我正在尝试使用Django,nginx和gunicorn来运行我的服务器。在开发服务器上,一切都很顺利。但是在生产服务器上,gunicorn总是返回Bad Request(400)。
我知道我需要设置我的ALLOWED_HOSTS
变量,我做了。我尝试了正确的域名,星号,甚至将DEBUG设置为True。但是,它仍然是Bad Request(400)。
这是我的nginx-config:
server {
listen 80;
location /static {
alias /home/username/sites/sub.domain.example.com/static;
}
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:8000;
}
}
我的wsgi-prod.py
文件:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings_prod")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
settings_prod.py
文件(缩写):
DEBUG = False
ALLOWED_HOSTS=["*"]
我用以下方式开始使用gunicorn(使用virtualenv):
gunicorn --bind 127.0.0.1:8000 app.wsgi_prod:application
当我使用manage.py runserver --settings=app.settings_prod
启动服务器时,该网站可以访问。 gunicorn的错误日志没有显示任何内容,访问日志只显示400.静态内容确实有效。
答案 0 :(得分:5)
你应该告诉Nginx将主机传递给Gunicorn:
proxy_set_header Host $host;
此外,我还会传递这些值(示例),以便您可以访问请求的IP:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如果您还没有这样做,请检查您的Nginx日志。 我希望这会有所帮助。
编辑: 还可以尝试设置服务器名称,如:
server_name your_domain.com www.your_domain.com
最后但并非最不重要的是尝试像这样设置环境(在这种情况下是解决方案):
os.environ['DJANGO_SETTINGS_MODULE'] = "app.settings_prod"
答案 1 :(得分:0)
这为我解决了这个问题:
private async void Button_Click()
{
await DBHelper(DoDBStuff);
}