首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用proxy_redirect重写NGINX反向代理规则

用proxy_redirect重写NGINX反向代理规则
EN

Server Fault用户
提问于 2020-02-24 10:32:11
回答 1查看 1.4K关注 0票数 1

我将NGINX作为反向代理运行在一些IIS托管的应用程序前面。我的目标是为特定的位置重写规则。问题是,在某些情况下,应用程序本身的响应是301或302。这提供了一个新的位置头,然后我需要解决的。

因此,基本上,我要做的是:- https://mydemo.app.de/abc应该出现在浏览器中,但是/xyz应该被交付,而不是/abc。即使存在重定向(301/302),这也能很好地工作。

以下是我的“半工作”配置:

代码语言:javascript
运行
复制
    location ~* /abc {

        rewrite (?i)/abc/(.*) /xyz/$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;

        proxy_pass http://mydemo.app.local;
        proxy_redirect ~*(.*)\/xyz\/(.*) $1/abc/$2;
        proxy_pass_header   Server;

        # Handle Web Socket connections
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }

现在,上游服务器有时会返回以下内容: login.aspx?ReturnUrl=/xyz/,它在浏览器中是可读的。情况不应如此。也应该有/abc/以及。据我所知,proxy_redirect部分应该处理这个问题,但在我的情况下却不这样做。

有什么办法可以让我的工作不改变应用程序本身(这将导致更大的变化.)?

任何帮助都是非常感谢的。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-03-02 10:37:14

如果文本序列/xyz/的两个实例都需要用/abc/替换,则需要组合一个正则表达式来匹配这两个实例,并捕获三个之间的空白。

但是,您需要保留现有的proxy_redirect语句来处理只有一个的情况。

与许多计算正则表达式的Nginx指令一样,顺序可能很重要,所以我会将更具体的表达式放在首位。

例如:

代码语言:javascript
运行
复制
proxy_redirect ~*(.*)/xyz/(.*)/xyz/(.*)$ $1/abc/$2/abc/$3;
proxy_redirect ~*(.*)/xyz/(.*)$ $1/abc/$2;
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1004343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档