Nginx 为什么我的服务器在 localhost 上提供正确的内容,而不是 0.0.0.0

Nginx 为什么我的服务器在 localhost 上提供正确的内容,而不是 0.0.0.0

我正在尝试从我的服务器获取数据,但如果我尝试从,0.0.0.0/my/api它会给出 400,但如果我尝试从,localhost/my/api它会给出我需要的内容。我正在使用 nginx,这是服务器的配置文件

server {
    listen 80;
    server_name localhost 54.149.242.144;
    access_log /var/log/nginx/myapp.log;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/myapp;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

另外,如果我执行 netstat,我会得到服务器的信息

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8080/nginx

为什么它只给我来自 localhost 的正确内容,并给我来自 0.0.0.0 地址的 400?这也导致我无法从外部机器访问 api。最后,我使用 gunicorn 作为后端服务器,并使用 nginx 反向代理 gunicorn。

答案1

地址 0.0.0.0 只能在 Linux 机器上的某些特定上下文中使用。过去,您可以使用 0.0.0.0,它被解释为环回地址(127.0.0.1 或 localhost)。

地址 0.0.0.0 现在仅用于监听套接字,以表明进程正在监听所有 IPv4 接口。配置此项很不错,因为您可以更改服务器的 IP,而无需重新启动监听 0.0.0.0 的服务。

我记得(我可能错了......)如果您尝试从链接断开的接口启动侦听器 IP,它将会失败。

相关内容