如何使apache2上的服务响应多个端口上的请求
Posted
技术标签:
【中文标题】如何使apache2上的服务响应多个端口上的请求【英文标题】:How to make a service on apache2 respond to request on multiple ports 【发布时间】:2016-12-29 10:47:35 【问题描述】:我有一个托管在/var/www/html
的网站。我可以使用my.ip.add.res
访问它。现在我希望能够从多个端口访问它。我的意思是浏览器中的所有三个 URL,my.ip.add.res:80
、my.ip.add.res:8000
和 my.ip.add.res:8950
,都应该指向同一个网站。
我尝试了什么:
第 1 步:在/etc/apache2/ports.conf
文件中,Listen 80
已经存在。我添加了Listen 8000
和Listen 8950
。该文件如下所示:
Listen 80
Listen 8000
Listen 8950
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
第二步:在/etc/apache2/sites-available
目录下,有一个文件000-default.conf
。我将它复制到两个文件中:myservice1.conf
和 myservice2.conf
。我将myservice1.conf
和myservice2.conf
文件中的第一条语句VirtualHost *:80>
分别更改为VirtualHost *:8000>
和VirtualHost *:8950>
。
第三步:我建立了这些文件到/etc/apache2/sites-enabled
中对应文件的符号链接。这就是我的意思:
root@virtual-machine:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 35 Jul 7 09:18 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 46 Aug 22 11:45 loginservice.conf -> /etc/apache2/sites-available/loginservice.conf
lrwxrwxrwx 1 root root 44 Aug 22 11:44 scfservice.conf -> /etc/apache2/sites-available/scfservice.conf
第 4 步:然后我重新启动了 Apache2 服务器
root@virtual-machine:/etc/apache2/sites-enabled# /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.
结果是:
my.ip.add.res
: 指向正确的网站
my.ip.add.res:80
: 指向正确的网站
my.ip.add.res:8000
:无法连接
my.ip.add.res:8950
:没有这样的资源(即使我停止了服务器……令人惊讶)
我做错了什么或错过了什么?
Edit1:根据 jedifans 的建议,我尝试了 apachectl -S
。下面是输出。
root@virtual-machine:/etc/apache2/sites-available# apachectl -S
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:80 127.0.1.1 (/etc/apache2/sites-enabled/000-default.conf:1)
*:8950 127.0.1.1 (/etc/apache2/sites-enabled/loginservice.conf:1)
*:8000 127.0.1.1 (/etc/apache2/sites-enabled/scfservice.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
编辑2:
root@virtual-machine:/etc/apache2/sites-available# telnet 127.0.0.1 8000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
root@virtual-machine:/etc/apache2/sites-available# telnet 127.0.0.1 8950
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# gets stuck here. I have to ctrl + C to come out.
【问题讨论】:
你重新加载 Apache 了吗? 是的,我重新启动了它。 Apache 错误日志中是否有任何错误? 我看不到任何日志文件。你知道它在哪里吗? 哦,对了。我有一种防火墙在起作用的感觉。尝试在服务器本身上运行它以查看 Apache 是否是问题:telnet 127.0.0.1 8000
和 telnet 127.0.0.1 8950
。如果它连接,则服务(很可能是 Apache)正在这些端口上运行
【参考方案1】:
Listen 80
Listen 8000
Listen 8950
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/var/www/html"
</VirtualHost>
<VirtualHost *:8000>
ServerName www.example.com
DocumentRoot "/var/www/html"
</VirtualHost>
<VirtualHost *:8950>
ServerName www.example.org
DocumentRoot "/var/www/html"
</VirtualHost>
确保使用 Document root 到 /var/www/html 并且如果您在 http.conf 末尾添加此行,那么如果您希望保留在两个单独的文件中,则无需添加两个单独的文件确保你有一个
Include sites-available/*.conf
如果您将 ServerRoot 作为 /etc/apache2/ inn 您的案例,则上述包含为真
但是更简单的方法是将上述配置添加到 http.conf 文件的末尾
【讨论】:
我已经有了Include sites-available/*.conf
和Include sites-enabled/*.conf
int eh 配置文件。【参考方案2】:
找出问题所在。我所有的步骤都是绝对正确的。但是,已经有两个服务在端口 8000 和 8950 上运行。我能够让除这两个端口之外的每个端口都正常工作。
【讨论】:
以上是关于如何使apache2上的服务响应多个端口上的请求的主要内容,如果未能解决你的问题,请参考以下文章