首页 > 解决方案 > 2 个 django 应用程序的 Nginx 配置 2 个不同的端点 1 个服务器主机

问题描述

所以问题是我有 1 个 ip(例如127.0.0.1 )

在我的服务器上有 2 个不同的 django 应用程序

1. /api     0.0.0.0:8000
2. /data    0.0.0.0:8090
3. /        this will go to default pages served up by nodejs

我需要弄清楚如何部署这些单独的服务的 nginx 配置,每个服务都有自己的数据库。

导航时,如果端点被命中,它将被路由到适当的应用程序,否则它将默认到 nodejs 应用程序。

额外信息:登录 /api/admin/ 时,它被路由到 /admin 并且失败,请考虑 django 进行的重定向。我尝试了很多东西,包括设置主机或位置

这将是 2 天内的赏金,所以狩猎愉快。

当前的 nginx

upstream app1 {
    server 0.0.0.0:8000;
}

upstream app2 {
    server 0.0.0.0:8090;
}

server {
    listen       80;
    server_name  localhost;


    location / {
        error_log /var/log/webapp/error.log debug;
        access_log /var/log/webapp/access.log;

        proxy_pass http://0.0.0.0:3000;
        proxy_redirect off;
    }

    location /api {
        location /api/static {
            alias /var/tmp/app1/static;
            #autoindex on;
        }
        proxy_pass http://app1;
        proxy_redirect off;
    }

    location /data {
        location /data/static {
            alias /var/tmp/app2/static;
        }
        proxy_pass http://app2;
        proxy_redirect off;
    }
}

标签: djangonginxgunicorn

解决方案


您是否使用 gunicorn 作为 WSGI 服务器?

以防万一,尝试将其添加到现有的 nginx 配置中:

location /api {
    proxy_set_header SCRIPT_NAME /api;
    ...

location /data {
    proxy_set_header SCRIPT_NAME /data;
    ...
...

原则上,SCRIPT_NAME 将被传递给 gunicorn,而后者又应将其用作所有地址的前缀。

不过,我从未在实际项目中尝试过。


推荐阅读