我希望 Apache(v2.4.41)在我的 Ubuntu(v20.04)服务器上监听端口 802 和 44302 而不是 80 和 443,因此我执行以下操作:
编辑了 中的端口号
/etc/apache2/ports.conf
。现在文件只有两行,如下所示:Listen 802 Listen 44302
/etc/apache2/sites-available/000-default.conf
像这样编辑端口号:<VirtualHost *:802> .... </VirtualHost>
/etc/apache2/sites-available/default-ssl.conf
像这样编辑端口号:<IfModule mod_ssl.c> <VirtualHost *:44302> .... </VirtualHost> </IfModule>
/etc/apache2/sites-available
也编辑了里面其他虚拟主机的端口号。重新启动 Apache
netstat
确认 Apache 正在使用以及监听新端口,lsof
并得到以下信息:
网络状态:
tcp6 0 0 :::44302 :::* LISTEN 113959/apache2
tcp6 0 0 :::802 :::* LISTEN 113959/apache2
lsof -i:802
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 113959 root 4u IPv6 3543809823 0t0 TCP *:802 (LISTEN)
apache2 113960 www-data 4u IPv6 3543809823 0t0 TCP *:802 (LISTEN)
apache2 113961 www-data 4u IPv6 3543809823 0t0 TCP *:802 (LISTEN)
lsof -i:44302
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 117939 root 6u IPv6 3547650042 0t0 TCP *:44302 (LISTEN)
apache2 117940 www-data 6u IPv6 3547650042 0t0 TCP *:44302 (LISTEN)
apache2 117941 www-data 6u IPv6 3547650042 0t0 TCP *:44302 (LISTEN)
- 通过使用
netstat
和,确认没有其他任何东西正在监听端口 80 和 443lsof
。
现在,当我尝试访问任何网站,甚至是端口 802 上的服务器 IP 地址时,都会出现错误This site can’t be reached
。但是,可以通过端口 44302 正常访问站点/服务器 IP。
http://ipaddress:802
或http://example.com:802
<----不起作用https://ipaddress:44302
或https://example.com:44302
<----工作正常
我做错了什么以及我该如何解决这个问题?
答案1
端口 44302 可以运行而端口 802 不运行的原因是,端口 44302 在防火墙的开放端口范围内,而端口 802 不在。
端口 0 - 1023 被视为特权端口,与其他端口不同,仅限于 root 用户使用。
将端口从 802 切换到通用端口 80 替代端口(例如 8080)即可解决问题。
答案2
看起来 apache 正在监听 ipv6
在 apache 的文档中是这样说的
If you want httpd to handle IPv4 connections only, regardless of what your platform and APR will support, specify an IPv4 address on all Listen directives, as in the following examples:
Listen 0.0.0.0:80
Listen 192.0.2.1:80