thepoy 发表于 2020-4-8 13:00

nginx代{过}{滤}理去前缀遇到问题

我用的是uwsgi,前后端分离,后端所有的url都是api,于是想在nginx中加一个api的location:
```conf
                location ^~/api/ {
                        include /etc/nginx/uwsgi_params;

                        rewrite ^/api/(.*)$ /$1 break;# 想去掉api

                        # 从uwsgi获取响应的超时时间,默认是60s
                        uwsgi_read_timeout 900s;
                        # 连接到uwsgi的超时时间
                        uwsgi_connect_timeout 75s;
                        # 向uwsgi传输请求的超时时间
                        uwsgi_send_timeout 600s;
                        uwsgi_pass      http://127.0.0.1:5000;
                        uwsgi_ignore_client_abort on;
                }
    }
```
nginx里加上了api,但uwsgi里的url并没有api,于是想着用rewrite重写url,但不知为什么不生效,依然访问的是/api/xxx,一直报404。
是哪里的问题呢?

wei125483 发表于 2020-4-8 13:45

location /apis/ {
            proxy_passhttp://127.0.0.1:5000;
            rewrite ^/apis/(.*)$ /$1 break;
      }
location后面正则不用^试试

thepoy 发表于 2020-4-8 14:25

wei125483 发表于 2020-4-8 13:45
location /apis/ {
            proxy_passhttp://127.0.0.1:5000;
   ...


还是没用,你用proxy有效吗

高永献 发表于 2020-4-8 20:24

你的问题是在你的后台django或者flask等的url规则,前面加上api,例如访问xxx.com ,你原来的url规则本来是“/” ,现在改成“/api/”,而且不需要rewrite。

高永献 发表于 2020-4-8 20:25

这个问题我之前就是这么解决的,我觉得你能明白我的意思

thepoy 发表于 2020-4-9 19:06

高永献 发表于 2020-4-8 20:25
这个问题我之前就是这么解决的,我觉得你能明白我的意思

谢谢回复,这个办法是我最初用的,后来想到能不能去前缀完成。现在我也完成了去前缀,不过不是在nginx,而是在uwsgi配置文件里。

...
mount= /api=manage.py
manage-script-name = true
目的是将/api这个前缀挂载为希望的app,uwsgi就自动完成后续的加前缀,又不影响已写好的项目。
页: [1]
查看完整版本: nginx代{过}{滤}理去前缀遇到问题