linux - Nginx 为什么我的服务器在本地主机上提供正确的内容而不是 0.0.0.0

标签 linux django nginx server

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

server {
    listen 80;
    server_name localhost;
    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。

最佳答案

看起来您的输出是 netstat -a 的输出,而不仅仅是 netstat。这是 AWS Ubuntu 镜像上 netstat -a 的相当通用的结果:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN

正如其中一位评论者所说,0.0.0.0 表示“所有 IP 地址”。

Localhost 将由单词 localhost 具体表示,如上所示。

附言server_name 指令不需要为这样一个简单的 nginx.conf 指定,您只有一个 server block 。

附言在您的 nginx 配置中关闭 favicon 的日志记录真是太棒了!

关于linux - Nginx 为什么我的服务器在本地主机上提供正确的内容而不是 0.0.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223730/

相关文章:

python - Django:按文本字段的长度查找

php - 与 nginx 一起使用时,一旦 PHP FCGI 进程在 Windows 上死机,它就会自动重启

Nginx 重定向到 www 域不起作用

linux - 为什么 crond 无法在 alpine linux 上运行非根 crontab?

python - 使用 sqlite 在 Django 中进行查询过滤

linux - 如何将变量值从循环 A 更新到另一个循环 B - 在 bash 中

python - 如何在 Django ORM 中进行通配符搜索以替换单个字符 (_)?

javascript - 带有 prerender.io 的 nginx/angular/node.js 根 URL

c++ - linux 到 windows C++ 字节数组

我可以在阻塞和非阻塞行为之间反复切换吗?