我正在尝试从我的服务器获取数据,但如果我尝试从,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,它将会失败。