加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

使用nginx proxy_pass和重写的多个django应用程序

发布时间:2020-12-13 21:35:42 所属栏目:Nginx 来源:网络整理
导读:我有一个名为myapp的django-admin应用程序,我想在不同的物理盒上部署多个实例,每个客户一个.但是,我希望所有这些都可以从类似的域名mydomain.com/customer1/myapp访问. 我已经摆弄了特定的代理设置,并在SO上尝试了多项建议,但没有一个非常适合我的用例而且因

我有一个名为myapp的django-admin应用程序,我想在不同的物理盒上部署多个实例,每个客户一个.但是,我希望所有这些都可以从类似的域名mydomain.com/customer1/myapp访问.

我已经摆弄了特定的代理设置,并在SO上尝试了多项建议,但没有一个非常适合我的用例…而且因为我对nginx和django都知之甚少,所以我很茫然!

我目前的nginx.conf是:

server {
    listen 80;
    server_name myserver.com

    location ^~ /static {
        alias /path/to/static/files/;
    }
#    location / {
#        proxy_pass http://127.0.0.1:8001;
#    }
    location ^~ /customer1/myapp/static {
        alias /path/to/static/files/;
    }
    location /customer1/myapp {
        rewrite ^/customer1/myapp/(/?)(.*) /$2 break;
        proxy_pass http://127.0.0.1:8001;
    }
}

我可以通过myserver.com/customer1/myapp/admin按预期进入登录屏幕.但是,当我尝试登录时,nginx将我的URL重写为myserver.com/admin,这不是一个有效的URL.如何让nginx实际重写url并只更改传递给127.0.0.1:8001的url?

FWIW,我正在使用gunicorn服务于gunicorn -b 127.0.0.1:8001 -n myapp.如果我取消注释/ location并删除最后两个位置块,那么应用程序效果很好.

如果有其他选择,我对这种方法的态度还很远.目标是避免为每个部署修改django代码,而只是为nginx.conf添加最少的代码以用于新部署.

最佳答案
基本上,您指定url作为proxy_pass指令的一部分,以下位置指令应该这样做:

location ~ ^/customer1/myapp(/?)(.*) {
    proxy_pass http://127.0.0.1:8001/$2;
}

有关nginx如何通过uri的详细说明,请参阅http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读