我是一名开发人员,不是网络管理员,所以这不太适合我。如能提供帮助,我将不胜感激。
突然之间,我的 VPS(运行 CentOS Linux 7.2.1511)停止接受 http 连接。对我托管的其中一个域进行简单的 telnet 操作会返回“连接被拒绝”。但 FTP 仍然有效,我仍可以通过 SSH 连接到服务器。我在这台服务器上总共运行了 17 个域。
Apache 正在运行(或根据 Plesk 12.5.30 声称正在运行)。
当我在服务器的命令行上运行
/sbin/iptables -L -n
结果是
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
当我跟踪到我的一个托管域的路由时,第十四跳到达我的服务器的 IP 地址,但此后,只显示星号,如下所示:
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
由于我的托管服务提供商的支持从周五晚上到周一早上都处于离线状态,我完全不知道该如何解决这个问题。如果能提供一些建议、帮助和提示,我将不胜感激。
更新: 如果我理解的话这个答案正确地说,使用以下命令应该告诉我是否有任何东西在监听端口 80,这是 http 连接的默认端口:
ss -tnlp | grep :80
此命令没有返回任何内容,我的理解是,没有任何东西在监听端口 80。
那么,问题就变成了,如何让 Apache 再次监听 80 端口?
更新:我更新了 httpd.conf 并添加了“Listen 80”,但之前没有这个。这在某种程度上起了作用,因为现在服务器又可以接受 http 请求了。但是,它仍然没有显示任何网站,而是一个占位符页面。httpd.conf 确实已经有了“Listen 7080”,而且,访问“http://{{oneofmywebsites}}:7080”可以按预期工作。
那么,现在的问题是,如何设置服务器默认通过端口 7080 提供 http 请求?
更新:这个答案提到了 vhost.conf,但我找不到。不过,似乎也可以在 httpd.conf 中定义 VirtualHost。在我托管于此服务器上的 17 个域中,有一个是“主”域,我认为它在某种程度上代表了服务器。(请记住,这不是我的菜。)
因此,我在 httpd.conf 中添加了以下内容:
<VirtualHost *:80>
ServerName {{mymaindomain}}
ProxyPass / http://localhost:7080/
</VirtualHost>
重启 Apache 后,浏览 http://{{mymaindomain}} 现在实际上可以访问相关网站。太棒了!但是,浏览我托管的任何其他域,也会访问相同的内容 (http://{{mymaindomain}})。
如果我在 httpd.conf 中添加另一个 VirtualHost 部分,如下所示:
<VirtualHost *:80>
ServerName {{someotherdomain}}
ProxyPass / http://localhost:7080/
</VirtualHost>
然后,结果是,当浏览 http://{{someotherdomain}} 时,我看到“服务不可用”。
那么现在,我该如何确保所有网站都能正确重定向?这难道不是 Plesk 中的一些配置吗?为什么我的所有网站都突然停止工作了?
更新:我完全无法理解,以下情况适用:
<VirtualHost *:80>
ServerName {{mymaindomain}}
ProxyPass / http://localhost:7080/
</VirtualHost>
上述操作如我所愿:浏览器请求 http://{{mymaindomain}} 显示关联网站。
<VirtualHost *:80>
ServerName {{myseconddomain}}
ProxyPass / http://{{myseconddomain}}:7080/
</VirtualHost>
上述域名正在使用 CloudFlare。浏览 http://{{myseconddomain}} 不起作用;CloudFlare 无法访问服务器。
<VirtualHost *:80>
ServerName {{mythirddomain}}
ProxyPass / http://{{mythirddomain}}:7080/
</VirtualHost>
上述域名未使用 CloudFlare。浏览 http://{{mythirddomain}} 将显示关联网站。
我仍然不明白是什么导致了这一切,仍然希望得到帮助。
同时,我可以将所有域从 CloudFlare 中移出,但随后我需要以某种方式设置 https,之前它运行良好。
更新:下面,@HardyRust 提到 nginx 可能在端口 80 上监听。
我执行了:
systemctl status nginx.service
这让我得到了下面的内容。‘自从……’几乎就是我的服务器停止工作的时候。
● nginx.service - Startup script for nginx service
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2016-10-01 00:23:25 CEST; 1 day 1h ago
Oct 01 00:23:24 {{mymaindomain}} systemd[1]: Starting Startup script for nginx service...
Oct 01 00:23:25 {{mymaindomain}} nginx[1066]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Oct 01 00:23:25 {{mymaindomain}} nginx[1066]: nginx: [emerg] bind() to [{{my ipv6 address}}]:443 failed (99: Cannot assign requested address)
Oct 01 00:23:25 {{mymaindomain}} nginx[1066]: nginx: configuration file /etc/nginx/nginx.conf test failed
Oct 01 00:23:25 {{mymaindomain}} systemd[1]: nginx.service: control process exited, code=exited status=1
Oct 01 00:23:25 {{mymaindomain}} systemd[1]: Failed to start Startup script for nginx service.
Oct 01 00:23:25 {{mymaindomain}} systemd[1]: Unit nginx.service entered failed state.
Oct 01 00:23:25 {{mymaindomain}} systemd[1]: nginx.service failed.
那么,为什么不可能“分配请求的地址”呢?
任何建议都是非常欢迎和需要的。我不知道 /etc/nginx/nginx.conf 应该是什么样子,但它的 30 行左右看起来应该属于这个范围。
答案1
似乎除了 apache 之外,还有其他程序在监听端口 80。通常,nginx 监听端口 80,服务器静态请求,并将所有其他请求代理到 apache。您可以使用命令检查它:
systemctl status nginx.service
配置应该放在 /etc/nginx/
从 apache 到 apache 的代理并不是一个好主意 - 你最好发现,如果你有 nginx(或 haproxy 或 lighttpd),现在它已经停止了。