向 Linux 服务器发出 HTTP 调用时出现“无路由到主机”

向 Linux 服务器发出 HTTP 调用时出现“无路由到主机”

我正在尝试配置 Linux 服务器(NGINX)以允许通过端口 80 进行 HTTP 请求,但它似乎没有任何变化。

当我从服务器内部运行时curl localhost:80,我得到了正确的响应。但是,一旦我更改localhost为公共 IP 地址,它就会出现以下错误:curl: (7) Failed to connect to <ip> port 80: No route to host。以下是我尝试过的方法:

  1. ping <ip>作品
  2. sudo ufw disable暂时禁用服务器防火墙(我也添加80/tcp到我的允许ufw列表中。输出sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
Nginx Full                 ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
Nginx Full (v6)            ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)
  1. netstat -ltn显示正在监听端口 80:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN

如果有帮助的话,这是我的 NGINX 配置(是的,NGINX 是实时的 XD):

upstream django {
        server 127.0.0.1:5000;
#        server unix:///home/ubuntu/app/lyricschords/lyricschords.sock;
        #server unix:///home/ubuntu/lyrics-chords/lyrics-chords.sock;
}

server {
        listen 80;
        server_name 127.0.0.1 localhost <ip>;

        location /media/ {
                alias /home/ubuntu/app/lyricschords/media/;
        }

        location /static/ {
                alias /home/ubuntu/app/lyricschords/static/;
        }

        location / {
                uwsgi_pass django;
                include /etc/nginx/uwsgi_params;
        }
}

我还通过 uWSGI 在端口 5000 上运行 Django。

任何帮助将不胜感激!

答案1

对于任何使用 Oracle 的人来说,这篇文章最终解决了以下问题:https://stackoverflow.com/questions/62326988/cant-access-oracle-cloud-always-free-compute-http-port。结果只是防火墙问题

答案2

如果 localhost:80 有效但外部 IP 无效,则 Web 服务器至少在监听 80 端口,但它要么只在本地主机上监听,要么在公共 IP 上受到防火墙保护。

netstat -lt您可以使用或等工具ss -lt获取正在监听的端口列表,并查找*:http或,[::]:http这表示正在监听通配符 IP 地址。如果您看到的是,127.0.0.1:http则表示它只在监听本地 IP 地址。或者您可以检查您的 Web 服务器配置。

相关内容