จำกัด Apache เพียง IP เดียว


13

ฉันมีเซิร์ฟเวอร์ที่มีที่อยู่ IP จำนวนมากและฉันต้องการให้ Apache ฟังหนึ่งในนั้น มันฟังดูไม่ยากที่จะทำและฉันก็ทำไปซักพักแล้ว แต่ตอนนี้ฉันมีปัญหา ก่อนอื่นนี่คือที่ฉันอยู่ตอนนี้เพื่อทำความเข้าใจของฉัน:

ทุกที่ที่ Apache กำลังฟังพอร์ต 80 มันกำลังฟังบน IP ที่ถูกต้องเท่านั้น

/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>

ไม่มีการเอ่ยถึงการฟังใน 0.0.0.0

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

และ ... Apache ไม่ยอมเริ่ม

/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]

ในกรณีที่มีคนถามฉันไม่ผูกพันกับที่อยู่ดังกล่าว:

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

บันทึกข้อผิดพลาดที่/var/log/apache2/error.logเพิ่งพูดว่า:

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

ฉันพลาดจุดในการกำหนดค่าของ Apache หรือไม่? มีบางอย่างที่ฉันจำไม่ได้ที่จะมองหา? ทำไมเรื่องนี้ไม่ง่ายอย่างที่ฉันจำได้


1
ฉันไม่ได้โกรธเคืองหรืออะไร แต่คุณช่วยอธิบายได้ว่าคุณเลือกคำตอบที่ดีที่สุดของคำถามนี้ได้อย่างไร คำตอบที่คุณเลือกคือการอ้างอิง distro อื่นในขณะที่คำตอบของฉันคือจุดที่เกี่ยวกับ Ubuntu ฉันจะทำให้คำตอบของฉันแตกต่างไปในทางใดทางหนึ่งเนื่องจากคุณไม่ได้เลือกมันได้หรือไม่?
pauska

คำตอบของคุณทั้งสองมีListen 192.168.0.82:80เส้นสำคัญซึ่งเป็นสิ่งที่ฉันต้องการ ฉันเลือกคำตอบของ cjc เพราะมันเจาะลึกลงไปอีกเล็กน้อยว่าทำไมต้องใช้บรรทัดนั้น ฉันคิดว่าการพูดถึงความคิดเห็นที่ใช้ใน Apache เวอร์ชันที่มาพร้อมกับ CentOS นั้นเป็นสิ่งที่ดี แต่เนื่องจากทุกคนดูเหมือนจะอยู่ในข้อตกลงทั่วไปว่าคำตอบควรไปที่ pauska ฉันเลยไปข้างหน้าแล้วมอบมันให้เขา ท้ายที่สุดฉันสังเกตเห็นโดยการตรวจทานการแก้ไขที่ความคิดเห็นของ pauska มีอิทธิพลต่อคำตอบของ cjc ในรูปแบบปัจจุบันอย่างมีนัยสำคัญ
ด่าน

คำตอบ:


18

Apache จะผูกกับทุกสิ่งเป็นค่าเริ่มต้นแม้ว่าคุณจะระบุ IP ที่แน่นอนเพื่อให้ใช้งาน NameVirtualHost

เพิ่มใน ports.conf ของคุณ:

Listen 192.168.0.82:80

การอ้างอิง: http://httpd.apache.org/docs/2.2/bind.html


16

ดูใน/etc/apache2/ports.confไฟล์

คุณจะพบคำสั่งเช่น:

Listen 80

ความคิดเห็นในกล่อง CentOS อธิบายถึงตัวเลือกนี้:

#
# 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

สำหรับสิ่งที่คุณต้องการเปลี่ยนสายไปListen 80Listen 192.168.0.82:80

คุณไม่สามารถเริ่ม Apache ได้ในขณะนี้เนื่องจากมันพยายามผูกเข้ากับพอร์ต 80 บนอินเทอร์เฟซทั้งหมด (การกำหนด 0.0.0.0) และคุณได้nodeฟัง 192.168.0.83:80

IP ในบล็อกโฮสต์เสมือนหมายความว่าโฮสต์เสมือนเฉพาะจะตอบสนองคำขอที่เข้ามาในที่อยู่ IP นั้น ไม่ได้ระบุว่า Apache จะผูกกับอินเตอร์เฟสที่เห็นอย่างไร


httpd.conf ว่างบน Ubuntu เนื่องจากใช้ไฟล์การกำหนดค่ารูปแบบที่แตกต่างกัน ไม่มี "Listen 80" อย่างใดอย่างหนึ่งเช่นเดียวกับ grep จาก OP แสดงให้เห็น
pauska

1
โอ้ใช่. อูบุนตู ฉันจะอัปเดต grepที่เขากำลังทำอยู่กับ: 80 Listen 80ดังนั้นจึงเป็นไปได้สิ่งที่พลาดต่อไปเป็นค่าเริ่มต้นคือ
cjc

1
ความคิดเห็น CentOS นั้นจะช่วยฉันได้จริงๆ Silly อูบุนตู ...
แดน

2

ฟังคำสั่งคือสิ่งที่คุณกำลังมองหา:

Listen 192.168.0.82:80

ข้อมูลอื่น ๆ ในเอกสาร


0

ใช้สิ่งต่อไปนี้ตามเอกสาร Apache :

ฟัง 192.168.0.82:80

ในบางสถานการณ์ (ไม่ใช่ทั้งหมด) เราสามารถไปได้ไกลกว่านี้และทำสิ่งนี้:

ฟัง some_name_in_my_localhost: 80

วิธีนี้ทำให้ apache ของคุณสามารถกำหนดค่าแบบพกพาในสถานการณ์เมื่อคุณมีฟาร์มเซิร์ฟเวอร์ Apache มีข้อดีข้อเสีย (เช่นเดียวกับทุกสิ่ง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.