如何使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:80my.ip.add.res:8000my.ip.add.res:8950,都应该指向同一个网站。

我尝试了什么:

第 1 步:在/etc/apache2/ports.conf 文件中,Listen 80 已经存在。我添加了Listen 8000Listen 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.confmyservice2.conf。我将myservice1.confmyservice2.conf 文件中的第一条语句VirtualHost *:80&gt; 分别更改为VirtualHost *:8000&gt;VirtualHost *:8950&gt;

第三步:我建立了这些文件到/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 8000telnet 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/*.confInclude sites-enabled/*.conf int eh 配置文件。【参考方案2】:

找出问题所在。我所有的步骤都是绝对正确的。但是,已经有两个服务在端口 8000 和 8950 上运行。我能够让除这两个端口之外的每个端口都正常工作。

【讨论】:

以上是关于如何使apache2上的服务响应多个端口上的请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在apache中打开一个新端口

如何在 ubuntu 上为 django restful 服务配置 apache2

Apache 2.4 在同一端口上的多个虚拟主机

分析托管在 apache2 上的 django 应用程序

Ajax入门与应用

一台 IIS 服务器上的多个网站