【问题标题】:nginx throws bad request 400 when accessed through ddns domainnginx 通过 ddns 域访问时抛出错误的请求 400
【发布时间】:2021-01-16 23:47:52
【问题描述】:

通过本地 Web 服务器 IP 访问时完美运行,但通过 NOIP 主机名访问时抛出 400 错误。

对于上下文,路由器配置为将请求转发到该端口上的 Web 服务器。

这是 nginx 配置文件:

server {
    listen 80;
    server_name 192.168.1.64;
    #server_name example.ddns.net;

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

    location / {
       include proxy_params;
      # proxy_pass http://example.ddns.net;
       proxy_pass http://unix:/run/gunicorn.sock;
    }
}

我尝试添加主题标签所在的行,但无济于事。

【问题讨论】:

  • Django 日志中有错误吗?您是否正确配置了ALLOWED_HOSTS 设置?
  • 我确实正确配置了它,但我了解到 gunicorn 在对 django 进行更改后需要重新启动。感谢您为我指明正确的方向

标签: django nginx gunicorn


【解决方案1】:

假设您的服务器已正确配置,请在 Django 项目中使用以下内容编辑您的 setting.py:

ALLOWED_HOSTS = ["192.168.1.64"]

【讨论】:

  • 谢谢,我实际上已经准备好了,但是一旦对 django 进行了更改,就需要重新启动 gunicorn。
【解决方案2】:

为了将来参考,在我的例子中,虽然我已经正确配置了 ALLOWED_HOSTS,但问题是在更改 django 设置文件后重新加载 gunicorn/nginx。以下行解决了它:

sudo systemctl restart gunicorn
sudo systemctl restart nginx

归功于应得的,来自 Iain ShelvingtonGaëtan GR 的 cmets 被发现,根本问题是 ALLOWED_HOSTS 设置(在我的情况下,直到 gunicorn/nginx 重新启动完成后才应用它。

【讨论】: