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.log
hanya 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?
apache-2.2
ubuntu
Dan
sumber
sumber
Listen 192.168.0.82:80
garis 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.Jawaban:
Apache mengikat semuanya secara default, bahkan jika Anda menentukan IP tertentu untuk menjalankan NameVirtualHost.
Tambahkan ini di ports.conf Anda:
Referensi: http://httpd.apache.org/docs/2.2/bind.html
sumber
Lihat di
/etc/apache2/ports.conf
file.Anda akan menemukan arahan seperti:
Komentar pada kotak CentOS menjelaskan opsi ini:
Untuk apa yang Anda inginkan, ubah
Listen 80
baris keListen 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.
sumber
grep
dia lakukan adalah menentang: 80 jadi itu akan kehilangan banyak hal, seperti standarnyaListen 80
.Mendengarkan arahan adalah apa yang Anda cari:
Info lebih lanjut dalam dokumentasi .
sumber
Gunakan yang berikut ini sesuai dengan dokumen Apache :
Dalam beberapa keadaan (tidak semua), seseorang dapat melangkah lebih jauh dan melakukan ini:
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.)
sumber