我正在尝试通过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
错误,/sites/mysite/staticmedia/
的路径在nginx根目录中就是问题..
Django在Apache 2.2 + mod_wsgi上运行
nginx 0.7.65
谢谢..
答案 0 :(得分:3)
更好的方法是在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上为您的网站提供服务
我在多个网站上进行了此设置,并且运行完美。另一个优点是,通过在nginx.conf中向上游wwwcluster添加另一个apache-server,可以非常轻松地对应用程序进行集群/负载均衡
答案 1 :(得分:1)
server {
listen 7777;
listen localhost:7777;
server_name example.com;
location / {
proxy_pass http://localhost:7777;
...
nginx侦听端口7777并连接到位于同一主机上的端口7777的代理。难怪它会返回502错误。
答案 2 :(得分:1)
如果您的项目中包含第三方应用程序,那么它应该安装在您的服务器上,就像南方是第三方应用程序一样。 考虑在您的settings.py文件中包含south,然后南也应该安装在您的服务器上。 如果该模块在这里考虑南,已经安装在服务器上然后尝试升级它。因为您可能在本地计算机上使用升级版本的模块,并且在服务器中安装了旧版本。
答案 3 :(得分:0)
502 bad gateway
是因为apache有问题(没有重启或类似的东西)。您可以查看apache服务器日志以获取信息。
问题是你的/sites/mysite/staticmedia/
被传递给apache而不是由nginx本身提供。
你的nginx媒体部分必须是这样的:
location /staticmedia/ {
root /sites/mysite/;
expires max;
autoindex on
}
这将访问文件系统上的/sites/mysite/staticmedia/
。
也就是说,使用location指定的位置路径也被认为是文件系统的一部分。 (我认为这也不是好方法;但这就是nginx的用法。)
您可以启用自动索引,以便在调试期间为您提供帮助。
答案 4 :(得分:0)
除非你做不寻常的事情,否则没有理由同时运行apache和nginx。
Nginx + gunicorn在这个时间点可能比apache + modwsgi更好。
Gunicorn部署文档在这里:
https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/gunicorn/
和部署的nginx配置在这里: