nginx serving Django static media | 502 bad gateway

后端 未结 5 1350
暗喜
暗喜 2021-02-11 09:14

I\'m trying to serve Django static media through nginx, Here\'s my nginx.conf

server {
    listen       7777;
    listen       localhost:7777;
    server_name  e         


        
相关标签:
5条回答
  • 2021-02-11 09:54

    if third party app included in your project then it should be installed on your server also like south is third party app. Consider south is included in your settings.py file then south should be installed on your server also. If that module consider south here, is already installed on server then try to upgrade it. Because it is possible that you are using upgraded version of module on local machine and older version is installed in the server.

    0 讨论(0)
  • 2021-02-11 09:59
    server {
        listen       7777;
        listen       localhost:7777;
        server_name  example.com;
    
        location / {
            proxy_pass http://localhost:7777;
    ...
    

    nginx listening on port 7777 and connecting to a proxy located at port 7777 on same host. No wonder it returns 502 error.

    0 讨论(0)
  • 2021-02-11 10:00

    the better way would be to use nginx in front of apache and to serve static media:

    eg: 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/*;
    }
    

    and configure apache to serve your website on 127.0.0.1:8080

    i have this setup on multiple sites and its running perfect. another advantage is, that you can cluster/load-balance your app very easy by adding another apache-server to upstream wwwcluster in nginx.conf

    0 讨论(0)
  • 2021-02-11 10:03
     502 bad gateway
    

    is because apache has a problem (not restarted or something like that). You can check the apache server logs for info.

    The problem is your /sites/mysite/staticmedia/ is being passed to apache and not served by nginx itself.

    Your nginx media part has to be like this:

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

    This will access /sites/mysite/staticmedia/ on the filesystem.

    That is, the path of location specified with location is a considered to be the part of the file system too. (I don't think this is good way either; but this is how nginx does it.)

    You can leave the autoindex on, to help you during debug.

    0 讨论(0)
  • 2021-02-11 10:13

    Unless you're doing unusual things, there's no reason to run both apache and nginx.

    Nginx + gunicorn is likely to work better than apache + modwsgi at this point in time.

    Gunicorn deployment docs are here:

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

    and the nginx config for deploying that is here:

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

    0 讨论(0)
提交回复
热议问题