it-swarm.cn

如何使Apache Web Server在两个不同的端口上侦听?

我想在家中安装一个Apache Web服务器,以监听端口80和8080。

我已经添加 Listen 8080到httpd.conf并重新启动了Apache服务,但服务器似乎未在8080上侦听。 http:// localhost:808 的插入超时并不会显示我的索引。 html,但 http:// localhost 将显示我的index.html。

如何让它收听80和8080?

45
Owen

Apache的标准Debian安装将具有以下配置片段:

收听80 
 
 <IfModule mod_ssl.c> 
#尚不支持基于SSL名称的虚拟主机,因此不支持
#NameVirtualHost语句在此处
听443 
 </ IfModule> 

这是告诉Apache监听端口80,如果配置了mod_ssl则监听端口443。在您的情况下,您需要:

Listen 80
Listen 8080

您需要确保在Apache上运行重新启动而不是重新加载操作,以使其对新的Listen指令有所注意。最安全的做法是停止Apache,确保它已死,然后重新启动它。

如果此配置不起作用,请检查日志文件中是否有任何错误消息。您可以使用“ netstat -lep --tcp”来查看端口8080上是否有监听的内容。最后,如果其他所有操作都不起作用,请尝试在strace下运行Apache,以查看它是否试图绑定到该端口并失败,但不记录问题。

64
David Pashley

这些答案很好,但它们排除了Owen has实际上已经完成此操作的可能性(“我添加了Listen 8080“)的含义可能确切地说是什么(即David的建议)。

如果您已经完成此操作,但仍然发现它不起作用,请确保已为可能包含的每个子域正确配置了指令,包括默认的(如果已将其手动配置为在名称后立即监听:80)。

您可能有这样的指令:

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

您需要将其更改为<VirtualHost *:8080> 要么 <VirtualHost *:*>

7
msanford

步骤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,如果配置了mod_ssl,则侦听端口443。

Listen 80
Listen 8080

第2步

#su - service httpd restart

第三步

$ netstat -lntp

(并非所有进程都可以被识别,非拥有的进程信息将不会显示,您必须是root用户才能查看全部。)

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       
5
Rajat

您可能需要将站点配置为端口8080才能起作用。阅读有关 Apache Virtual Hosts 的文档。可以将每个“站点”设置为接受特定端口(和ip等)上的连接。您的http.conf中是否有仅配置为端口80的虚拟主机?

另外,您可以使用netstat -nlp确认服务器正在侦听8080,并在该端口上寻找条目。

0
Dana the Sane

您可能还需要检查是否已启用SELinux。 SELinux的默认配置可能不允许您在非标准端口上运行Apache。这是一个向您显示是否正在运行SELinux以及如何禁用它(如果您不想使用它的功能)的站点。 http://www.crypt.gen.nz/selinux/disable_selinux.html

0
Reamer77

假设linux运行netstat -lntp作为根目录,您可以看到Apache是​​否正在监听8080。这将帮助您确定问题是否是Apache无法监听,或者Apache是​​否存在外部因素(例如防火墙,selinux等)导致连接超时。

0
Jason Tan