Apache2 ไม่ทำงานบนพอร์ต IPv4 tcp


23

ฉันต้องการรัน Apache2 บนเซิร์ฟเวอร์ Debian 7 ของฉัน แต่จะรันเฉพาะบนพอร์ต tcpv6 ไม่ใช่บนพอร์ต tcpv4 ฉันติดตั้งมันด้วย apt-get install หากฉันไปที่ localhost หรือ 127.0.0.1 หรือที่อยู่ IPv4 เซิร์ฟเวอร์ของฉันจะไม่แสดงเว็บไซต์ใด ๆ

ของฉัน/etc/apache2/ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       

3
ลองเปลี่ยนไปListen 80 Listen 0.0.0.0:80คุณสามารถดูเอกสารhttpd.apache.org/docs/2.2/bind.htmlสำหรับข้อมูลเพิ่มเติม
pradeepchhetri

@pradeepchhetri ขอบคุณ มันได้ผล. ฉันสามารถเข้าถึงที่อยู่เซิร์ฟเวอร์ของฉันจากคอมพิวเตอร์เครื่องใดก็ได้และมันแสดงเนื้อหา (ที่อยู่ IP / some.php) แต่ฉันไม่สามารถเข้าถึง some.php จากเซิร์ฟเวอร์นี้ ฉันได้ลอง localhost, 127.0.0.1 และหมายเลข IP ภายนอก: หมายเลขพอร์ตที่ใช้งานได้จากพีซีเครื่องอื่น ... แต่มันไม่ทำงาน
Mato

1
คุณสามารถโพสต์ผลลัพธ์ของsudo iptables -nvLและsudo sestatus? ฉันคิดว่าคุณมีไฟร์วอลล์ท้องถิ่นที่ป้องกันได้
pradeepchhetri

@Mato คุณต้องชี้แจงเมื่อมันแสดงเนื้อหา แต่ไม่ทำงานคุณหมายถึงว่ามันแสดง PHP ดิบของคุณแทนที่จะเรียกใช้หรือไม่ ถ้าเป็นเช่นนั้นคุณต้องเปิดใช้งานโมดูล PHP ฉันคิดว่าa2enmod php5ควรทำเพื่อคุณ
robbat2

3
เครื่อง Linux มักจะซ่อน dualstack IPv4 IPv6 + ::ซ็อกเก็ตที่อยู่เบื้องหลังการฟังที่อยู่
Pavel Šimerda

คำตอบ:


32

ความจริงที่ว่า netstat แสดงเฉพาะ tcp6 ที่นี่ไม่ใช่ปัญหา หากคุณไม่ได้ระบุที่อยู่ที่จะรับฟัง apache จะรับฟังตระกูลที่อยู่ที่รองรับทั้งหมดโดยใช้ซ็อกเก็ตเดียว (สำหรับเหตุผลด้านการออกแบบ sshd ใช้ซ็อกเก็ตที่ไม่ซ้ำกันต่อครอบครัวที่อยู่และที่อยู่

นี่เป็นหนึ่งในระบบของฉันแสดง apache ที่มีซ็อกเก็ต tcp6 เท่านั้นและยังทำงานได้ดีผ่านทั้ง IPv4 และ IPv6

woodpecker ~ # netstat -anp |grep apache
tcp6       0      0 :::80    :::*       LISTEN      1637/apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

หากคุณเรียกใช้wget http://127.0.0.1/ -O -บนเซิร์ฟเวอร์จะเกิดอะไรขึ้น เชื่อมต่อสำเร็จหรือไม่ มันส่งคืน HTML ดิบสำหรับเว็บไซต์ของคุณตามที่คาดไว้หรือไม่


ขอบคุณตอนนี้มันใช้ได้ แต่ฉันมีปัญหาเล็ก ๆ เพียงปัญหาเดียว ฉันได้เขียนเกี่ยวกับเรื่องข้างต้น
Mato

คุณรู้ไหมว่าสิ่งที่บ้าคือประสบการณ์ของฉัน เป็นธรรมชาติ เป็นโปรแกรมเมอร์เครือข่ายฉันรู้ดีเกี่ยวกับและINADDR_ANY IN6ADDR_ANY_INITแต่วันนี้ฉันเห็นพฤติกรรมแปลก ๆ บางอย่าง ไม่มีการเปลี่ยนแปลงไฟร์วอลล์ไม่มีการเปลี่ยนแปลง Apache แต่อย่างใดโฮสต์ระยะไกลสามารถเชื่อมต่อผ่าน IPv6 เท่านั้น - ซึ่งเป็นปัญหาสำหรับผู้ที่ยังไม่มี IPv6 แน่นอนว่ามันเป็นสิ่งที่ฉันจะออกกำลังกาย แต่คุณถูกต้องอย่างแน่นอน (แม้ว่าการขอร้องที่คุณให้จะไม่สามารถใช้ได้ในกรณีของฉัน)
Pryftan


1
  1. 127.0.0.1 เป็นโลคัลสำหรับเครื่องเท่านั้นคุณต้องอยู่บนเซิร์ฟเวอร์ในเบราว์เซอร์เพื่อใช้ไอพี / ที่อยู่ลูปแบ็คท้องถิ่น

  2. คุณอาจมีไฟร์วอลล์บล็อกพอร์ต

  3. ตรวจสอบให้แน่ใจว่า apache ทำงานและทำงานอย่างถูกต้องตรวจสอบบันทึกข้อผิดพลาด

  4. ตรวจสอบ apache ของคุณอีกครั้ง

  5. คุณโฮสต์จากรูท www หรือไดเรกทอรี public_html ของผู้ใช้หรือไม่

  6. ตรวจสอบอีกครั้งเจ้าของและการอนุญาต


เกือบปี 2019 (ยินดีต้อนรับสู่อนาคต):

  • โดยค่าเริ่มต้นส่วนใหญ่ของโลกใช้ ipv6 และหากล้มเหลวให้ถอยกลับไปที่ ipv4;

  • ตอนนี้เรามีอุโมงค์ ipv4 บน ipv6 และคีมจับในทางกลับกัน;

  • ระบบปฏิบัติการ, โปรแกรม, ไคลเอนต์และเซิร์ฟเวอร์ส่วนใหญ่ทำสิ่งนี้ได้ในตอนนี้

  • ยินดีต้อนรับสู่โลกของ NATs ที่ไม่มีอีกต่อไปและต้องพึ่งไฟร์วอลล์ / ตัวกรองไปยังอุปกรณ์ของคุณทันที

  • ฉันขอแนะนำให้พยายามรักษาระบบของคุณทั้งหมดไว้ด้วยกันแบบซ้อนสองชั้นรองรับทั้ง ipv4 และ ipv6 ในเวลาเดียวกันดังนั้นเมื่อสวิตช์เวทมนตร์เกิดขึ้นคุณก็ยังทำงานอยู่ ระบบปฏิบัติการเครือข่ายของฉันแม้แต่ ISP ของฉันก็เป็นแบบคู่ซ้อนกันตั้งแต่ต้นจนจบ ฉันสามารถปิด ipv4 ได้อย่างสมบูรณ์หากฉันต้องการ แต่สิ่งที่อยู่ข้างนอกนั่นอาจไม่ทำงานอีกต่อไปหากไม่มีอุโมงค์กลับไปที่ ipv6 จาก ipv4


ฉันอยู่บนปุ่มหมุนว่าจะให้ +1 กับคุณหรือไม่เนื่องจากคุณใช้คำว่า 'โฟลเดอร์' แต่แนวคิดของการไม่ปิดใช้งาน IPv6 มีความสำคัญเช่นเดียวกับการทำให้แน่ใจว่าไฟร์วอลล์ของคุณได้รับการกำหนดค่าอย่างเหมาะสมสำหรับ IPv6 ฉันรู้ว่าหลายคนคิดว่า NAT เป็นระบบรักษาความปลอดภัย แต่ที่จริงแล้วเป็นภาพลวงตา สิ่งนั้นและประเด็นอื่น ๆ ของคุณนั้นใช้ได้ทั้งหมดดังนั้นต้องมี +1
Pryftan

ฉันขอโทษฉันหมายถึงไดเรกทอรี :-P
cdmlb

ทีนี้ฉันจะให้ +1 อีกถ้าคุณทำได้ ฉันค่อนข้างแปลกใจและถ่อมตนว่าคุณจะเปลี่ยนมัน ฉันเป็นคนเจ้าระเบียบคือฉันคิดว่าทั้งหมดที่ฉันสามารถพูดได้ มันทำให้ฉันสับสนและทำให้ฉันรู้สึกว่ามีบาง บริษัท ที่เคยแก้ไขให้ถูกต้องแล้วเปลี่ยนเป็น 'โฟลเดอร์' บางทีนั่นอาจจะทำให้ 'เป็นมิตร' กับผู้คนมากขึ้น แต่ดูเหมือนว่าจะได้รับการยอมรับว่าเป็นคำที่เหมาะสมสำหรับคนอื่น ๆ ที่ควรรู้มากกว่านี้ ฉันไม่รู้ อย่างไรก็ตามรายการทั้งหมดของคุณเป็นสิ่งที่ฉันต้องการให้ผู้คนเข้าใจมากขึ้น! อนิจจาไม่ทำ ...
Pryftan

-1

* * * *

wget http://127.0.0.1/ -O / dev / null

* แสดงถึงการเชื่อมต่อกับเซิร์ฟเวอร์ภายในโดยไม่มีการจัดการ IPv4 หรือ IPv6 ถ้าคุณเปลี่ยน localhost (หรือ 127.0.0.1) เป็นที่อยู่ IPv4 จริงของเซิร์ฟเวอร์นี้คุณไม่สามารถรับการเชื่อมต่อใด ๆ ได้เนื่องจากถูกปฏิเสธ

ลองอธิบาย IP ของคุณในไฟล์ปรับแต่ง: NameVirtualHost: 80 Listen: 80

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