san*_*blo 5 unix django proxy nginx gunicorn
我有一个这样设置的站点:nginx 作为代理服务器,通过 UNIX 套接字代理请求一个为 Django 站点提供服务的 gunicorn 实例。
这是我的 nginx 配置:
server {
listen 80;
server_name api.mysite.com;
location /static/ {
alias /webapps/mysite/static/;
autoindex off;
}
location / {
include proxy_params;
proxy_pass http://unix:/webapps/mysite/mysite.sock;
}
Run Code Online (Sandbox Code Playgroud)
}
我的理解是 nginx 在接收请求时将Host标头与服务器块的 server_name 参数匹配,如果匹配,则为其提供服务。但是,nginx 似乎正在尝试使用与Hostapi.mysite.com 不同的标头来服务(将请求传递到我的 Django 服务器)请求。Django 有一个名为ALLOWED_HOSTS (在我的情况下设置为['api.mysite.com'])的设置,它执行对Host标头的进一步检查,并在请求Host标头不匹配时引发错误,这不应该发生,因为 nginx 应该已经过滤了它。问题是我看到 Django 引发的错误如下所示:
几件事:
Host头设置为我的 gunicorn/nignx UNIX 套接字的本地文件系统上的路径。有什么线索吗?
事实证明,如果 nginx 没有遇到匹配的服务器块,它会将请求发送到第一个服务器块。因此,解决方案是设置一个默认服务器块来删除每个请求,如下所示:
server {
listen 80 default_server;
return 444;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3510 次 |
| 最近记录: |