如果 nginx 托管在云虚拟机上而不是容器中,则无法访问它

如果 nginx 托管在云虚拟机上而不是容器中,则无法访问它

我有一台 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;

相关内容