我有一台 Google Cloud VM,其防火墙配置为允许 tcp:8080 和 tcp:80
我还配置了 ufw:
To Action From
-- ------ ----
Nginx HTTP ALLOW Anywhere
8080 ALLOW Anywhere
Nginx HTTP (v6) ALLOW Anywhere (v6)
8080 (v6) ALLOW Anywhere (v6)
并检查端口8080是否开放:
> sudo nmap -sT -O localhost
PORT STATE SERVICE
80/tcp open http
8080/tcp open http-proxy
Nginx 配置:
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location /some_endpoint {
proxy_pass http://localhost:<port>/<route>;
}
}
然后我在主机上运行一个 nginx(没有容器,只在虚拟机本身上),在这个配置下,我无法从互联网访问我的机器 - “连接已超时”,error.log 中没有错误,access.log 中也没有任何错误
但是!如果我在同一个虚拟机中的 Docker 中运行相同版本的 nginx 和相同的配置文件,那么一切都会正常,并且可以通过互联网访问 nginx。
我真的很难理解我做错了什么以及如何在虚拟机上正确运行 nginx。
编辑:附加信息:
输出
sudo netstat -tulpn | grep LISTEN
:
tcp 0 0 127.0.0.1:8099 0.0.0.0:* LISTEN 6149/traefik
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 14761/nginx: master
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 542/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 797/sshd: /usr/sbin
输出
curl -v <url>
:
* Trying <URL>...
* connect to <URL> port 8080 failed: Timed out
* Failed to connect to <URL> port 8080 after 21045 ms: Timed out
* Closing connection 0
curl: (28) Failed to connect to <URL> port 8080 after 21045 ms: Timed out
答案1
Nginx 正在监听 localhost:8080。Localhost 无法从机器外部访问。
将 listen 指令更改为:
listen *:8080;