2016-10-20 8 views
0

Я пытаюсь создать проект, используя django, gunicorn и nginx, и у меня возникают проблемы с конфигурацией nginx. Точнее, когда я использую try_files.Проблемы с настройкой 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 (Джанго)

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

/и т.д./Nginx/sites- доступный/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; 

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

/и т.д./Nginx/сайты-доступные/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: Английский - это не мой родной язык, поэтому я приношу свои извинения за ошибки (многие).

+0

Вы должны установить 'proxy_set_header'-s в последний' location' –

+0

Привет Алексей Тен, теперь он работает отлично! Спасибо. – 3WZ

ответ

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; 
}