我正在尝试配置 Linux 服务器(NGINX)以允许通过端口 80 进行 HTTP 请求,但它似乎没有任何变化。
当我从服务器内部运行时curl localhost:80
,我得到了正确的响应。但是,一旦我更改localhost
为公共 IP 地址,它就会出现以下错误:curl: (7) Failed to connect to <ip> port 80: No route to host
。以下是我尝试过的方法:
ping <ip>
作品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)
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 服务器配置。