nginx服务Django静态媒体| 502错误的网关

我试图通过nginx服务Django静态媒体,这是我的nginx.conf

server { listen 7777; listen localhost:7777; server_name example.com; location / { proxy_pass http://localhost:7777; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } location /test-app-media/ { root /sites/mysite/staticmedia/; expires max; } } 

但给502 bad gateway错误,path/sites/mysite/staticmedia/是在Nginx的根/是这个问题..


运行在Apache 2.2 + mod_wsgi上的Django

nginx 0.7.65

谢谢..

更好的方法是在apache前面使用nginx,并提供静态媒体:

例如:nginx:

 server { listen 80; server_name media.example.com; access_log /var/log/nginx/media.example.com.media.access.log; location / { autoindex on; index index.html; root /var/www/media.example.com/media; } } server { listen 80; server_name www.example.com; access_log /var/log/nginx/www.example.com.django.access.log; location / { proxy_pass http://wwwcluster; include /etc/nginx/proxy.conf; } } 

proxy.conf:

 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; 

nginx.conf:

 http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; upstream wwwcluster { server 127.0.0.1:8080; } include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 

并配置Apache为127.0.0.1:8080上的您的网站

我有这个设置在多个网站上,它的运行完美。 另一个好处是,你可以很容易地集群/负载平衡你的应用程序,通过添加另一个Apache服务器到上游CNcluster在Nginx.conf

 server { listen 7777; listen localhost:7777; server_name example.com; location / { proxy_pass http://localhost:7777; ... 

nginx监听端口7777,并连接到位于同一主机端口7777的代理。 难怪它会返回502错误。

如果第三方应用程序包含在您的项目中,那么它应该安装在您的服务器上也像南方是第三方应用程序。 考虑南你的settings.py文件,然后南应该也安装在你的服务器上。 如果这个模块考虑在这里,已经安装在服务器上,然后尝试升级它。 因为您可能在本地计算机上使用了升级版本的模块,而在服务器中安装了旧版本。

  502 bad gateway 

是因为Apache有问题(没有重新启动或类似的东西)。 你可以检查Apache服务器日志的信息。

问题是你的/sites/mysite/staticmedia/被传递给apache而不是由nginx本身提供服务。

你的nginx媒体部分必须是这样的:

 location /staticmedia/ { root /sites/mysite/; expires max; autoindex on } 

这将访问文件系统上的/sites/mysite/staticmedia/

也就是说,位置指定的路径也被认为是文件系统的一部分。 (我不认为这是好的方法,但是这是nginx的做法。)

您可以保留autoindex,在调试过程中为您提供帮助。

除非你做了不寻常的事情,否则没有理由同时运行apache和nginx。

在这个时候,Nginx + gunicorn可能比apache + modwsgi更好。

Gunicorn部署文档在这里:

https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/gunicorn/

和用于部署的nginx配置在这里:

http://gunicorn-docs.readthedocs.org/en/latest/deploy.html