Web-Hosting

VPS 不接受 http 連接,但伺服器正在執行

  • October 1, 2016

我是一名開發人員,而不是網路管理員,所以這不完全是我的一杯茶。幫助表示讚賞。

從某一刻到下一刻,我的執行 CentOS Linux 7.2.1511 的 VPS 停止接受 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 行左右看起來像是屬於它們的。

似乎除了 apache 在埠 80 上偵聽之外,您還有其他東西。通常是 nginx,它偵聽埠 80、伺服器靜態請求和代理所有其他到 apache。您可以使用以下命令檢查它:

systemctl status nginx.service

配置應該放在 /etc/nginx/

從 apache 到 apache 的代理並不是一個好主意——你最好發現,如果你有 nginx(或 haproxy,或 lighttpd),那現在就停止了。

引用自:https://serverfault.com/questions/806503