ฉันจะทำให้ Apache Web Server รับฟังบนพอร์ตที่ต่างกันสองพอร์ตได้อย่างไร


45

ฉันต้องการ Apache Web Server ที่ฉันติดตั้งที่บ้านเพื่อฟังบนพอร์ต 80 และพอร์ต 8080

ฉันเพิ่มListen 8080ใน httpd.conf และเริ่มบริการ Apache ใหม่ แต่ดูเหมือนว่าเซิร์ฟเวอร์จะไม่ฟัง 8080 การเจาะในhttp: // localhost: 8080หมดเวลาและไม่แสดง index.html ของฉัน แต่http: / / localhostจะแสดง index.html ของฉัน

ฉันจะทำให้ฟัง 80 และ 8080 ได้อย่างไร


ทำไมคุณถึงคิดว่ามันไม่ฟังพอร์ต 8080 มันอาจมีประโยชน์ในการโพสต์ตัวอย่างการกำหนดค่า
David Z

1
คุณรีสตาร์ท Apache หลังจากแก้ไข http.conf หรือไม่
Dana the Sane

@ David ฉันได้อัปเดตคำถามของฉันเพื่อแสดงว่าทำไมฉันคิดว่ามันไม่ฟังใน 8080 อย่าเข้าสู่ httpd.conf ทันที @Dana - ใช่
โอเว่น

คำตอบ:


63

การติดตั้ง apache มาตรฐาน Debian จะมีการกำหนดค่าส่วนต่อไปนี้:

ฟัง 80

<IfModule mod_ssl.c>
    # โฮสต์เสมือนที่ใช้ชื่อ SSL ยังไม่รองรับดังนั้นจึงไม่
    # NameVirtualHost คำสั่งที่นี่
    ฟัง 443
</ IfModule>

นี่เป็นการบอกให้อาปาเช่ฟังบนพอร์ต 80 และฟังพอร์ต 443 หากกำหนดค่า mod_ssl ในกรณีของคุณคุณต้องการ:

Listen 80
Listen 8080

คุณต้องตรวจสอบให้แน่ใจว่าคุณเรียกใช้การรีสตาร์ทไม่ใช่การดำเนินการโหลดซ้ำบน apache เพื่อให้ความสนใจกับคำสั่งฟังใหม่ สิ่งที่ปลอดภัยที่สุดที่ต้องทำคือหยุด apache ตรวจสอบให้แน่ใจว่ามันตายแล้วเริ่มใหม่อีกครั้ง

หากการกำหนดค่านี้ไม่ทำงานให้ตรวจสอบล็อกไฟล์เพื่อดูข้อความแสดงข้อผิดพลาด คุณสามารถใช้ "netstat -lep --tcp" เพื่อดูว่ามีอะไรที่ฟังบนพอร์ต 8080 ในที่สุดหากทุกอย่างไม่ทำงานให้ลองเรียกใช้ apache ภายใต้ strace เพื่อดูว่ามันพยายามผูกเข้ากับพอร์ตนั้นหรือไม่ แต่ไม่ได้บันทึกปัญหา


1
ใน Apache 2.4 สามารถพบชิ้นส่วนการกำหนดค่านี้ได้ที่ไหน ขอบคุณ
Luís de Sousa

2
ตอบคำถามของฉันเอง: /etc/apache2/ports.conf.
Luís de Sousa

7

คำตอบเหล่านี้ยอดเยี่ยม แต่พวกเขาก็ทิ้งความเป็นไปได้ที่โอเว่นได้ทำสิ่งนี้ไปแล้ว ("ฉันได้เพิ่มListen 8080") อาจหมายถึงสิ่งที่ดูเหมือน (เช่นสิ่งที่ดาวิดแนะนำ)

หากคุณทำสิ่งนี้ไปแล้วและยังพบว่าไม่ทำงานตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่าคำสั่งสำหรับแต่ละโดเมนย่อยที่คุณอาจมีอย่างถูกต้องรวมถึงค่าเริ่มต้น (ถ้ามีการกำหนดค่าด้วยตนเองเพื่อฟัง: 80 ทันทีหลังจากชื่อ)

คุณอาจมีคำสั่งเช่นนี้:

<VirtualHost *:80>
 ServerName michaelsanford.com
 etc…
</VirtualHost>

คุณจำเป็นต้องเปลี่ยนที่หรือ<VirtualHost *:8080><VirtualHost *:*>


ฉันสงสัยว่านี่เป็นปัญหาของฉัน ฉันคิดว่ามีคำสั่ง <VirtualHost *: 80> ฉันจะต้องตรวจสอบสิ่งนี้
โอเว่น

1
หากคุณไม่มีโฮสต์เสมือนคุณจะได้รับเนื้อหาจาก Global DocumentRoot ซึ่งอาจจะให้ index.html มาตรฐานหน้าดัชนีไดเรกทอรีข้อผิดพลาด 404 หรือข้อผิดพลาด 403 มันจะไม่หมดเวลา
David Pashley

2
ดูเหมือนว่าคุณมีไฟร์วอลล์ในที่วางแพ็กเก็ตอย่างเงียบ ๆ
msanford

เมื่อปรากฎว่าเป็นปัญหาไฟร์วอลล์
โอเวน

5

ขั้นตอนที่ 1

#vi httpd.conf
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

httpd (apache) เพื่อฟังพอร์ต 80 และฟังพอร์ต 443 หาก mod_ssl ได้รับการกำหนดค่า

Listen 80
Listen 8080

ขั้นตอนที่ 2

#su - service httpd restart

ขั้นตอนที่ 3

$ netstat -lntp

(ไม่สามารถระบุกระบวนการทั้งหมดได้ข้อมูลกระบวนการที่ไม่ได้เป็นเจ้าของจะไม่แสดงคุณจะต้องเป็นรูทเพื่อดูกระบวนการทั้งหมด)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:47027               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:80              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:8080            0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::ffff:127.0.0.1:45100      :::*                        LISTEN      3149/java           
tcp        0      0 :::111                      :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      -                   
tcp        0      0 :::57173                    :::*                        LISTEN      3149/java           
tcp        0      0 :::18197                    :::*                        LISTEN      3149/java           
tcp        0      0 :::22                       :::*                        LISTEN      -                   
tcp        0      0 ::1:631                     :::*                        LISTEN      -                   
tcp        0      0 :::40832                    :::*                        LISTEN      3149/java           
tcp        0      0 ::ffff:127.0.0.1:6880       :::*                        LISTEN      3149/java       

0

คุณอาจต้องการตรวจสอบเพื่อดูว่าคุณเปิดใช้งาน SELinux หรือไม่ การกำหนดค่า SELinux เริ่มต้นอาจไม่อนุญาตให้คุณเรียกใช้ Apache บนพอร์ตที่ไม่ได้มาตรฐาน นี่คือเว็บไซต์ที่แสดงให้คุณเห็นว่าคุณกำลังใช้งาน SELinux อยู่หรือไม่และจะปิดการใช้งานอย่างไรถ้าคุณไม่ต้องการหรือใช้คุณสมบัติของมัน http://www.crypt.gen.nz/selinux/disable_selinux.html


หรือคุณอาจเปิด SELinux ไว้หากคุณอยู่ในระบบ SELinux ที่ทันสมัยดูว่าพอร์ตต่างๆมีป้ายกำกับด้วย semanage port -l อย่างไร เห็นdanwalsh.livejournal.com/9275.htmlซึ่งมีชื่อว่า "ฉันต้องการให้ apache daemon ของฉันฟังบนพอร์ตอื่น แต่ SELinux ป้องกันไม่ให้ฉันทำอะไร"
rev

0

คุณอาจต้องกำหนดค่าพอร์ต 8080 เพื่อให้ไซต์ใช้งานได้ อ่านเอกสารสำหรับApache โฮสต์เสมือน แต่ละไซต์สามารถตั้งค่าให้ยอมรับการเชื่อมต่อบนพอร์ตเฉพาะ (และของไอพี ฯลฯ ) คุณมีโฮสต์เสมือนใน http.conf ของคุณที่กำหนดค่าสำหรับพอร์ต 80 เท่านั้นหรือไม่

นอกจากนี้คุณสามารถยืนยันได้ว่าเซิร์ฟเวอร์กำลังฟังบน 8080 โดยใช้netstat -nlpและค้นหารายการบนพอร์ตนั้น


1
ไม่ถูกต้อง หากคุณต้องการให้ apache ฟังบนพอร์ตคุณต้องใช้คำสั่ง Listen
David Pashley


1
มันอาจจะค่อนข้างถูกต้อง - หลายคนสร้าง vhosts เช่น <VirtualHost *: 80> และในกรณีนี้คุณต้องเปลี่ยนเป็น <VirtualHost *: *> หรือสร้าง vhost อื่นสำหรับพอร์ต 8080 (แน่นอน ฟังคำสั่งจะต้องมี)
เดวิด Z

@David Pashley ผู้เขียนกล่าวว่าได้เพิ่มคำสั่ง Listen แล้ว
Dana the Sane

0

สมมติว่า linux ทำงานnetstat -lntpเป็น root อย่างที่คุณเห็นว่า Apache กำลังฟังอยู่ที่ 8080 หรือไม่ สิ่งนี้จะช่วยคุณระบุว่าปัญหาคือ apache ที่ไม่ฟังหรือมีปัจจัยภายนอก (เช่นไฟร์วอลล์, selinux ฯลฯ ) เพื่อ apache ทำให้การเชื่อมต่อหมดเวลา

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