Batasi Apache untuk satu IP

13

Saya punya server dengan banyak alamat IP, dan saya hanya ingin Apache mendengarkan salah satunya. Kedengarannya bukan hal yang sulit untuk dilakukan, dan saya pernah melakukannya beberapa saat yang lalu, tapi kali ini saya mengalami masalah. Pertama, di sinilah saya sekarang, untuk pemahaman saya:

Setiap tempat Apache mendengarkan port 80, itu hanya mendengarkan pada IP yang benar.

/etc/apache2$ grep -R ":80" .
./sites-available/default:<VirtualHost 192.168.0.82:80>
./httpd.conf:<VirtualHost 192.168.0.82:80>
./ports.conf:NameVirtualHost 192.168.0.82:80
./sites-enabled/000-default:<VirtualHost 192.168.0.82:80>

Tidak disebutkan tentang mendengarkan pada 0.0.0.0.

/etc/apache2$ grep -R "0\.0\.0\.0" .

Namun ... Apache menolak untuk memulai.

/etc/apache2$ sudo /etc/init.d/apache2 start
 * Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Jika seseorang bertanya, saya tidak terikat ke alamat itu:

/etc/apache2$ sudo netstat -nap | grep :80
tcp        0      0 192.168.0.83:80       0.0.0.0:*        LISTEN      2822/node

Log kesalahan di /var/log/apache2/error.loghanya mengatakan:

[Wed Aug 08 03:30:18 2012] [notice] caught SIGTERM, shutting down

Apakah saya melewatkan tempat di konfigurasi Apache? Apakah ada sesuatu yang saya tidak ingat untuk mencari? Mengapa ini tidak sesederhana yang saya ingat?

Dan
sumber
1
Saya tidak tersinggung atau apa pun, tetapi bisakah Anda menjelaskan bagaimana Anda memilih jawaban terbaik dari pertanyaan ini? Jawaban yang Anda pilih merujuk pada distro lain, sedangkan jawaban saya tepat terkait dengan Ubuntu. Bisakah saya membuat jawaban saya berbeda dengan cara apa pun karena Anda tidak memilihnya?
pauska
Kedua jawaban Anda berisi Listen 192.168.0.82:80garis kritis , yang saya butuhkan. Saya memilih jawaban cjc karena masuk ke kedalaman yang lebih dalam mengapa garis itu diperlukan. Saya pikir menyebutkan komentar yang digunakan dalam versi Apache yang dikemas dengan CentOS adalah tambahan yang bagus. Tetapi karena semua orang tampaknya setuju secara umum bahwa jawabannya harus diberikan pada pauska, saya telah maju dan memberikannya kepadanya. Setelah semua, saya perhatikan dengan melihat revisi bahwa komentar pauska secara signifikan mempengaruhi jawaban cjc dalam bentuknya saat ini.
Dan

Jawaban:

18

Apache mengikat semuanya secara default, bahkan jika Anda menentukan IP tertentu untuk menjalankan NameVirtualHost.

Tambahkan ini di ports.conf Anda:

Listen 192.168.0.82:80

Referensi: http://httpd.apache.org/docs/2.2/bind.html

pauska
sumber
16

Lihat di /etc/apache2/ports.conffile.

Anda akan menemukan arahan seperti:

Listen 80

Komentar pada kotak CentOS menjelaskan opsi ini:

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80

Untuk apa yang Anda inginkan, ubah Listen 80baris ke Listen 192.168.0.82:80.

Anda tidak dapat menjalankan Apache sekarang karena ia mencoba untuk mengikat ke port 80 pada semua antarmuka (penandaan 0.0.0.0), dan Anda harus node mendengarkan pada 192.168.0.83:80.

IP di blok host virtual berarti bahwa host virtual tertentu akan merespons permintaan yang masuk pada alamat IP tersebut. Itu tidak menentukan bagaimana Apache akan mengikat ke antarmuka yang dilihatnya.

cjc
sumber
Httpd.conf kosong di Ubuntu, karena mereka menggunakan gaya berbeda dari file konfigurasi (banyak termasuk). Tidak ada "Dengarkan 80", seperti yang ditunjukkan grep dari OP.
pauska
1
Oh benar Ubuntu. Saya akan memperbarui. Yang grepdia lakukan adalah menentang: 80 jadi itu akan kehilangan banyak hal, seperti standarnya Listen 80.
cjc
1
Komentar CentOS itu akan sangat membantu saya. Ubuntu konyol ...
Dan
2

Mendengarkan arahan adalah apa yang Anda cari:

Listen 192.168.0.82:80

Info lebih lanjut dalam dokumentasi .

stderr
sumber
0

Gunakan yang berikut ini sesuai dengan dokumen Apache :

Dengarkan 192.168.0.82:80

Dalam beberapa keadaan (tidak semua), seseorang dapat melangkah lebih jauh dan melakukan ini:

Dengarkan some_name_in_my_localhost: 80

Dengan cara itu Anda membuat apache Anda konfigurasi portabel dalam situasi ketika Anda memiliki sebuah server server Apache. Ada pro dan kontra untuk ini (sama seperti yang lainnya.)

luis.espinal
sumber