pengembangan-web-mp.com

Bisakah saya menentukan port di entri di / etc / hosts di OS X?

Kemungkinan Duplikat:
Cara menggunakan DNS untuk mengarahkan ulang domain ke port tertentu di server saya

Saya ingin menipu browser saya untuk masuk ke localhost: 3000, bukannya xyz.com. Saya masuk ke/etc/hosts di OS X 10.5 dan menambahkan entri berikut:

127.0.0.1:3000 xyz.com

Itu tidak bekerja tetapi tanpa menentukan port triknya berfungsi. Apakah ada cara untuk melakukan ini dengan menentukan port?

51
Tony

Tidak, file host hanyalah cara untuk secara statis menyelesaikan nama ketika tidak ada server DNS.

47
Chief A-G

File hosts adalah untuk resolusi DNS. DNS menyelesaikan nama ke alamat IP, dan tidak ada hubungannya dengan port yang saya khawatirkan. Anda perlu menggunakan sesuatu yang lain bersama dengan file hosts untuk mengarahkan ulang port (Mangle the TCP header dengan mengubah port tujuan).

Dengan iptables:
Apakah MAC OS menggunakan iptables/netfilter (saya tidak berpikir demikian) ..? Jika OS X menggunakan iptables Anda bisa mengarahkan xyz.com ke beberapa ip di file hosts seperti 157.166.226.25 dan kemudian:

Sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -d 157.166.226.25 -j DNAT --to-destination 127.0.0.1:3000

:-)

45
Kyle Brandt

Anda tidak perlu menentukan port di file hosts. buat saja entri seperti yang Anda lakukan menghilangkan port, seperti pada 127.0.0.1 xyz.com, ini akan mengarahkan Anda ke Host lokal Anda, kemudian cukup tambahkan port 3000 ke akhir URL Anda ... http://xyz.com:30

12
stuart Brand

Dengan asumsi Anda mencoba mencegat http dan bukan https, Anda harus mendengarkan pada port 80 pada mesin lokal Anda, tetapi kemudian Anda mungkin dapat menggunakan fitur port forwarding ssh dengan ssh'ing ke localhost dengan -L80:localhost:3000, tetapi Anda harus melakukannya sebagai root.

Mungkin akan lebih baik untuk memiliki apa pun yang berjalan pada port 3000 hanya dengarkan port 80 saja.

Jika Anda mengontrol router antara Anda dan xyz.com, Anda mungkin bisa mengatur aturan port forwarding.

4
retracile

Solusi DNS untuk ini adalah dengan menggunakan catatan SRV:

http://en.wikipedia.org/wiki/SRV_record

Ini adalah cara untuk mengizinkan DNS, yang pada awalnya merupakan database terdistribusi "name to number" atau "number to name" untuk memasukkan "endpoint layanan ke layanan", yang (secara opsional) dapat mencakup protokol dan porta.

Berita buruknya adalah aplikasi harus dikembangkan untuk menggunakan catatan SRV, jadi itu bukan solusi drop-in untuk apa yang Anda coba lakukan.

3
James F

Saya pikir Anda perlu menggunakan beberapa jenis server proxy atau mungkin sesuatu dengan perangkat lunak firewall untuk mengarahkan kembali koneksi port ...

2
Bart Silverstrim

Chief-AG benar dalam hal file host digunakan untuk menyelesaikan nama secara statis (keberadaan DNS tidak relevan). Namun, mungkin ada kombinasi hal-hal yang bisa Anda lakukan.

  1. Atur catatan dalam file hosts ke 127.0.0.1 xyz.com
  2. Konfigurasikan mesin Anda untuk host virtual .
  3. Untuk Host virtual yang Anda siapkan untuk xyz.com, buat file html yang dialihkan ke localhost: 3000

Tampaknya sedikit kerja yang adil, tetapi itu akan mencapai apa yang Anda minta.

2

saya berasumsi ini untuk Rails pengembangan? jika demikian, kemudian jalankan script/server -p 80 untuk membuatnya berjalan pada port web standar. maka xyz.com Anda akan bekerja

1
Ryan

Sebagai alternatif dari virtual host; Anda dapat membuat ssh tunnel mendengarkan pada port 80 dan meneruskan ke localhost: 3000.

1
evilchili

Jika Anda menggunakan Apache sebagai server web di xyz.com, Anda bisa menggunakan Apache ProxyPass untuk 'mengkonversi' ke port yang berbeda.

0
Rory