配置 Nginx 从 nodejs 服务器块下的位置提供 UWSGI 应用程序

配置 Nginx 从 nodejs 服务器块下的位置提供 UWSGI 应用程序

我正在运行一个 UWSGI Django API,它在 NGINX 中的配置如下:

upstream django_api {                                                                                                                                                                                                                         
    server 127.0.0.1:8088;                                                                                                                                                                                                                    
}

server {                                                                                                                                                                                                                                      
    server_name api.domain.com;                                                                                                                                                                                            
    root /home/www/api/domain/;                                                                                                                                                                                                               
    access_log /var/log/nginx/api.domain.com-access.log;                                                                                                                                                                                      
    error_log /var/log/nginx/api.domain.com-error.log;

   location / {                                                                                                                                                                                                                              
     uwsgi_pass  django_api;                                                                                                                                                                                                               
     include     uwsgi_params;                                                                                                                                                                                                             
     uwsgi_read_timeout 600;                                                                                                                                                                                                               
     add_header Host $hostname;                                                                                                                                                                               
    } 
}

节点应用程序的配置如下:

server {                                                                                                                                                                                                                                      
    server_name app.domain.com;                                                                                                                                                                                 
    root /home/www/app/dist/;                                                                                                                                                                                                          
    access_log /var/log/nginx/app.domain.com-access.log;                                                                                                                                                                           
    error_log /var/log/nginx/app.domain.com-error.log;                                                                                                                                                                             

    location / {                                                                                                                                                                                                                              
        try_files $uri $uri/ /index.html;                                                                                                                                                                                                     
        proxy_cache domain_zone;                                                                                                                                                                                                              
        add_header X-Proxy-Cache $upstream_cache_status;                                                                                                                                                                                      
    }
}

我想从我的应用程序的子路径(如 app.domain.com/api/)以及 api.domain.com 提供 Django api。

通常我认为我需要在 app.domain.com 下创建一个新的位置块,如下所示:

location /api/ {                                                                                                                                                                                                                          
    rewrite ^/api/(.*)$ /$1 break;                                                                                                                                                                                                        
    proxy_set_header X-Real-IP $remote_addr;                                                                                                                                                                                              
    proxy_set_header HOST $http_host;                                                                                                                                                                                                     
    proxy_set_header X-Forwarded-For $remote_addr;                                                                                                                                                                                        
    proxy_pass http://localhost:8088;                                                                                                                                                                                                            
}

但它不起作用,我收到 500 错误。我尝试了许多其他配置,但都没有成功。可以这样做吗?

答案1

通过uwsgi_pass显然起了作用,感谢 Alexy 的建议。

新的配置现在是这样的:

location /api/ {
    rewrite ^/api/(.*)$ /$1 break;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header HOST $http_host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://localhost:8088;

    uwsgi_pass  django_api;
    include     uwsgi_params;
    uwsgi_read_timeout 600;
    add_header Host $hostname;
}

相关内容