尝试了所有但仍无法通过nginx + gunicorn

时间:2015-07-31 01:31:23

标签: python django nginx

我必须通过nginx + gunicorn部署Django项目(nginx的静态文件和gunicorn的其他文件。)

项目设置文件夹中的 dev.py文件具有以下设置 -

STATIC_ROOT = os.path.join(BASE_DIR,'static')
STATIC_URL = '/static/'

nginx.conf看起来像这样 -

server {
listen 8000;   
server_name  localhost;

access_log /home/user/access.log;
error_log /home/user/error.log;

location / {
    proxy_pass http://localhost:8001;
}

location /static/ {
    autoindex on;
    alias /home/user/project_revamped/project/static;
}

}

我正在运行我的服务器 -

gunicorn project.wsgi:application --bind=127.0.0.1:8001

在localhost:8001的URL访问服务器时,页面显示没有任何静态文件。

nginx的error.log没有填充。错误是浏览器尝试从url

请求静态文件
localhost:8001/static/...

但它应该从URL请求文件 -

localhost:8000/static/...

因为nginx配置为通过该URL提供服务。

1 个答案:

答案 0 :(得分:1)

server {
  listen 8000;   
  server_name  localhost;
  root /home/user/project_dir/project;

  access_log /home/user/access.log;
  error_log /home/user/error.log;

  location /static/ {
    alias /home/user/project_dir/project/static/;
  }
  location / {
      proxy_set_header Host $http_host;
      proxy_pass http://localhost:8001;
      proxy_redirect default;
  }
  • 我认为这应该是适合您案例的正确配置。
  • 理想情况下你应该在端口80上监听所有的http请求,所以请听 8000在生产中应改为80。
  • 如果你写的位置/之前和代码之后的静态事物 永远不会到达位置/ static /
  • 必须有“proxy_set_header Host $ http_host;”所以在debug = 假(在生产中)允许主机获得一些价值