Menguji kemampuan server untuk melayani domain tertentu

11

Katakanlah Anda telah Server Amengatur dengan server-daemon favorit Anda untuk dilayani www.example.com. Sekarang Anda ingin memindahkan ini Server B. Setelah banyak penyalinan dan konfigurasi, server baru tampaknya siap. Tes akhir akan dilakukan: Sebelum mengubah catatan DNS, bagaimana orang meminta www.example.comdari Server B ketika catatan DNS masih menunjuk ke server A?


Sementara pertanyaan utama saya telah dijawab, jika / etc / hosts tidak berada di bawah pengaruh saya, mungkinkah untuk mengujinya dengan telnet dengan alih-alih berbicara HTTP1.1 mentah ke server web?

Jarmund
sumber
8
Tolong jangan edit pertanyaan Anda untuk mengajukan pertanyaan yang sama sekali baru. Ini cenderung (agak) membatalkan jawaban yang ada dan juga platform tidak mengirim pemberitahuan bahwa pertanyaan telah berubah, sehingga kemungkinan orang yang sudah terlibat dengan pertanyaan Anda tidak akan melihat kembali jawaban mereka. Anda dapat memberikan komentar langsung kepada mereka bahwa Anda memiliki pertanyaan lanjutan. Seringkali strategi yang lebih baik adalah dengan mengajukan pertanyaan baru (mungkin menunjuk pada T&J sebelumnya).
HBruijn
2
Sangat mempertimbangkan untuk memilih hanya untuk perubahan tiang gawang yang lengkap dengan hasil edit. > _ <
Wesley

Jawaban:

12

DNS adalah hal yang ajaib. Dengan kontrol yang cukup atas PC klien, Anda dapat right.commasuk ke wrong.comdan viceversa.io. Langsung ke PC klien uji dan kotoran dengan resolusi DNS-nya dengan baik mengubah file host pada klien itu, atau Anda dapat melakukan sesuatu yang sedikit lebih kompleks dan memberikan host itu server DNS sederhana untuk permintaan, seperti dnsmasq. Apa pun cara Anda menjalani proses, tujuan utamanya adalah membuat respons DNS untuk pertanyaan terkait www.example.comrespons dengan alamat IP untuk Server B. Header host HTTP kemudian akan menanggung nama DNS untuk www.example.com, tetapi ditujukan untuk Server B.

Sihir!

Wesley
sumber
3
Entah bagaimana /etc/hoststidak terpikir oleh saya, dan ini bekerja dengan sempurna. Sorakan untuk pengingat!
Jarmund
2
The hostsfile tidak terlibat dalam resolusi DNS tetapi merupakan mekanisme pencarian nama yang sama sekali terpisah bahwa perpustakaan resolver yang disediakan oleh OS klien dapat, dan dalam kebanyakan kasus akan, digunakan selain pencarian di DNS. Secara pribadi saya pikir bit "itu sihir" hanya memasukkan "tidak perlu dipahami", yang tentu saja merupakan hal buruk bagi para profesional.
Håkan Lindqvist
@ HåkanLindqvist Anda sangat salah memahami konteks dan penggunaan frasa.
Wesley
Bagaimanapun, host fileDNS . Ini adalah SF; Saya berharap orang-orang di sini, jika ada, untuk mengetahui perbedaannya.
Ilmari Karonen
@IlmariKaronen Dan saya tidak mengatakan bahwa file host adalah DNS, jadi harapan Anda untuk ServerFault telah terpenuhi dan kita semua baik-baik saja di sini! ᕕ (ᐛ) ᕗ
Wesley
11

Penting untuk dicatat bahwa yang penting untuk melakukan tes seperti ini untuk HTTP tidak benar-benar terkait dengan DNS sama sekali, tetapi apa yang dikirim klien HTTP sebagai nilai Hostheader.

Klien perlu terhubung ke alamat IP dan port yang tepat, tentu saja, tetapi lebih dari itu semuanya bermuara pada Hostheader yang sebaris dalam permintaan HTTP itu sendiri.


Untuk pengujian cepat, perintah berikut dapat digunakan tanpa mengubah konfigurasi level sistem operasi apa pun pada klien:

$ curl -H "Host: www.example.com" http://192.0.2.17/foo/bar

atau, dalam hal ini,

$ curl -H "Host: www.example.com" http://beta.example.com/foo/bar


Untuk melakukan hal yang sama dengan browser web biasa Anda memerlukan ekstensi browser yang dapat memodifikasi header permintaan (atau mungkin proxy HTTP yang mengubah header), atau Anda perlu mengubah konfigurasi sistem operasi mesin klien.

Seperti yang telah disebutkan, cara termudah untuk melakukan perubahan konfigurasi adalah menambahkan entri ke hostsfile. Dengan cara ini perpustakaan resolver OS klien akan mendapatkan hit saat berkonsultasi hostsfile dan bahkan tidak perlu melakukan pencarian DNS.

Pilihan lain termasuk mengubah server resolver DNS yang dikonfigurasi pada klien ke server nama yang diatur untuk menjawab seperti yang diinginkan.

Håkan Lindqvist
sumber
1
+1 untuk solusi yang tidak melibatkan mucking sekitar dengan resolusi nama
Jarmund
2
Baru-baru ini curlmemungkinkan Anda untuk mengganti resolusi nama normal (DNS atau hostfile) dan masih melakukan header secara otomatis, dan juga SNI jika menggunakan / menguji httpS. Lihat --resolvedi halaman manual Anda atau di curl.haxx.se/docs/manpage.html .
dave_thompson_085
4

Anda dapat menguji ini dengan telnet. Anda perlu membuat permintaan HTTP mentah dengan mengetikkan perintah. Anda tidak dapat membuat kesalahan, dan beberapa server memiliki batas waktu sehingga Anda juga harus mengetikkan seluruh permintaan dalam jangka waktu tersebut.

Perintahnya akan seperti ini:

telnet serverb 80

Permintaan akan terlihat seperti ini:

GET / HTTP/1.1
Host: www.example.com

Perhatikan bahwa itu harus diakhiri dengan baris kosong, jadi Anda akan menekan enter dua kali setelah header host.

briantis
sumber
1
Nitpick: walaupun tajuk HTTP tidak seharusnya peka terhadap huruf besar-kecil, tajuk normatifHost tidak semuanya terbatas. (Dan ternyata beberapa server mungkin mengalami masalah dengan kapitalisasi yang berbeda.)
Bob
@ Bob benar, diedit
briantist
3

Apa yang biasanya saya lakukan adalah memaksa www.example.com ke alamat IP server B di / etc / hosts saya. Saya sudah melakukan itu sejak saya menggunakan Mosaic dan karena saya jarang melakukannya, saya belum merasa perlu untuk menemukan yang lebih baik.

Melihat-lihat sedikit untuk Anda, saya menemukan /superuser/403042/custom-host-file-for-firefox yang dijawab oleh https://addons.mozilla.org/es/firefox/addon/ foxyproxy-standard / tetapi ada catatan yang sangat baru mengatakan bahwa itu ditinggalkan.

Hukum29
sumber
Menanggapi hasil edit Anda meminta metode pengujian tanpa / etc / hosts, ya, itu ada. Ini akan menjadi telnet untuk pengujian yang sangat mendasar, sebuah addon seperti yang saya sebutkan dalam jawaban saya di atas, atau proxy yang dikonfigurasi khusus, atau (dan ini adalah metode yang saya lebih suka) ServerAlias ​​pada server B dari katakanlah www2.example. com.
Law29
3

Jika Anda perlu memeriksa apakah itu berfungsi, saya sarankan plugin broswer sederhana seperti Modify Headersuntuk Firefox, dan ubah HOSTke www.mydomain.com.

bukk530
sumber