nginx try_files设置的问题

时间:2016-10-20 10:55:43

标签: django nginx gunicorn

我正在尝试使用django,gunicorn和nginx建立一个项目,我遇到了nginx配置问题。更确切地说,当我使用try_files时。

如果我使用if (!-f $request_filename) {...}一切正常,但如果使用的话 try_files ... Django生成异常:

Invalid HTTP_HOST header: 'myproject_server'. The domain name provided is not valid according to RFC 1034/1035.

一旦使用if ...一切正常,我会假设其他设置 (gunicorn等)是正确的。

我正在使用的配置文件是:

/home/myproject/myproject/settings.py (django)

...
ALLOWED_HOSTS = [192.168.200.100, ]
...

/ etc / nginx / sites-available / myproject(this this WORKS)

upstream myproject_server {
    unix server:/home/myproject/run/gunicorn.sock fail_timeout = 0;
}
server {
    listen 80;
    server_name 192.168.200.100;
    root /home/myproject;
    location /media/ {}
    location /static/ {}
    location / {

        proxy_set_header Host $HTTP_HOST;
        proxy_set_header X-Real-IP $REMOTE_ADDR;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        if (!-f $request_filename) {
            proxy_pass http://myproject_server;
            break;
        }
    }
}

/ etc / nginx / sites-available / myproject(这个没有用)

upstream myproject_server {
    unix server: /home/myproject/run/gunicorn.sock fail_timeout = 0;
}
server {
    listen 80;
    server_name 192.168.200.100;
    root /home/myproject;
    location /media/ {}
    location /static/ {}
    location / {

        proxy_set_header Host $HTTP_HOST;
        proxy_set_header X-Real-IP $REMOTE_ADDR;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        try_files $uri @myproject_backend;
    }
    location @myproject_backend {
        proxy_pass $scheme://myproject_server;
    }
}

我做错了什么?

提前感谢任何帮助。

PS:英语不是我的母语,所以我为(很多)错误道歉。

1 个答案:

答案 0 :(得分:2)

proxy_set_header应与proxy_pass位于同一位置。

location / {
    try_files $uri @myproject_backend;
}

location @myproject_backend {
    proxy_set_header Host $HTTP_HOST;
    proxy_set_header X-Real-IP $REMOTE_ADDR;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://myproject_server;
}