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


45

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

我已添加Listen 8080到httpd.conf并重新启动了Apache服务,但服务器似乎未在8080上侦听。在http:// localhost:8080中打卡超时,并且不显示我的index.html,但显示http:/ / localhost将显示我的index.html。

如何让它收听80和8080?


为什么您认为它不在8080端口上监听?发布您的配置摘要可能也很有用。
David Z 2009年

1
您是否在编辑http.conf之后重新启动了Apache?
Dana the Sane

@David我已经更新了我的问题,以显示为什么我认为它没有在8080上进行监听。现在无法访问httpd.conf。@Dana-是的。
欧文(Owen)

Answers:


63

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

听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来查看它是否试图绑定到该端口并失败,但不记录问题。


1
在Apache 2.4中可以在哪里找到此配置片段?谢谢。
路易斯·德·索萨

2
回答我自己的问题:/etc/apache2/ports.conf
路易斯·德·索萨

7

这些答案都是伟大的,但他们离开了,欧文的可能性确实这样做了(“我已经添加了Listen 8080”)可能意味着正是这听起来像(即,什么大卫曾建议)。

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

您可能有这样的指令:

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

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


我怀疑这是我的问题。我认为确实有<VirtualHost *:80>指令。我必须检查一下。
欧文(Owen)

1
如果您没有虚拟主机,则会从全局DocumentRoot提供内容,这可能会为您提供标准的index.html,目录索引页面,404或403错误。它不会超时。
David Pashley 09年

2
听起来好像您已经安装了防火墙,而防火墙会静默丢弃数据包。
msanford,

事实证明,这是一个防火墙问题。
Owen

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,如果配置了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       

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守护程序在另一个端口上侦听,但SELinux阻止了它,我该怎么办?”
修订

0

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

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


1
不,这是不对的。如果要让Apache监听端口,则需要使用Listen指令。
David Pashley 2009年


1
嗯,这也许是对的,许多人创建了诸如<VirtualHost *:80>之类的虚拟主机,在这种情况下,您需要将其更改为<VirtualHost *:*>或为端口8080创建另一个虚拟主机。(当然,还需要收听指令)
David Z

@David Pashley,作者说,已经添加了Listen指令。
Dana the Sane

0

假设linux netstat -lntp以root身份运行,您可以看到apache是​​否正在监听8080。这将帮助您确定问题是apache无法监听还是是否有外部因素(例如防火墙,selinux等)导致apache连接超时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.