在同一域下使用 Nginx 和 Gunicorn 为多个 Django 应用程序提供服务

Rik*_*iko 5 django nginx gunicorn

现在我在一个域中有一个 Django 项目。我想在一个域下提供三个 Django 项目,以 / 分隔。例如:www.domain.com/firstone/、www.domain.com/secondone/ 等。如何配置 nGinx 在一个域下提供多个 Django 项目?在这种情况下如何配置静态文件服务?

我当前的 nGinx 配置是:

server {                                                                                                                             
    listen 80;                                                                                                                       
    listen [::]:80;                                                                                                                  
    server_name domain.com www.domain.com;                                                                               
    return 301 https://$server_name$request_uri;                                                                                     
}                                                                                                                                    

server {                                                                                                                             
    listen       443 ssl;                                                                                                            
    server_name domain.com www.domain.com;                                                                               

    ssl_certificate /etc/nginx/ssl/Certificate.crt;                                                                                  
    ssl_certificate_key /etc/nginx/ssl/Certificate.key;                                                                              

    ssl_session_cache    shared:SSL:1m;                                                                                              
    ssl_session_timeout  5m;                                                                                                         

    ssl_ciphers  HIGH:!aNULL:!MD5;                                                                                                   
    ssl_prefer_server_ciphers  on;                                                                                                   


    root /home/admin/web/project;                                                                                               

    location /static {                                                                                                               
        alias /home/admin/web/project/static;                                                                                   
    }                                                                                                                                
    location /media {                                                                                                                
        alias /home/admin/web/project/media;                                                                                    
    }                                                                                                                                
    location /assets {                                                                                                               
        alias /home/admin/web/project/assets;                                                                                   
    }                                                                                                                                

    location / {                                                                                                                     
        proxy_pass_header Server;                                                                                                    
        proxy_set_header Host $http_host;                                                                                            
        proxy_redirect off;                                                                                                          
        proxy_set_header X-Real-IP $remote_addr;                                                                                     
        proxy_set_header X-Scheme $scheme;                                                                                           
        proxy_set_header X-Forwarded-Proto https;                                                                                    
        proxy_connect_timeout 75s;                                                                                                   
        proxy_read_timeout 300s;                                                                                                     
        proxy_pass http://127.0.0.1:8000/;                                                                                           
        client_max_body_size 100M;                                                                                                   
    }                                                                                                                                
# Proxies                                                                                                                            
#    location /first {                                                                                                                
#        proxy_pass http://127.0.0.1:8001/;                                                                                          
#    }                                                                                                                               
#                                                                                                                                    
#    location /second {                                                                                                                
#        proxy_pass http://127.0.0.1:8002/;                                                                                          
#    }                                                                                                                               

  error_page 500 502 503 504 /media/50x.html;                                                                                        
Run Code Online (Sandbox Code Playgroud)

r4v*_*4v1 5

您必须在不同的端口上运行项目,例如 8000 上的 firsrone 和 8001 上的 secondaryone。然后在 nginx conf 中,location /您必须编写location /firstone/并代理将其传递到端口 8000,然后为第二个端口编写location /secondone/与代理相同的位置对象将其传递到端口 8001。

对于静态文件和媒体,您必须将它们作为 /firstone/static 提供,对于 secondaryone 也是如此。另一种方法是为两个项目指定相同的 MEDIA_ROOT 和 STATIC_ROOT。