【问题标题】:Use script instead of regex for Nginx prox_redirect to modify Location header对 Nginx prox_redirect 使用脚本而不是正则表达式来修改 Location 标头
【发布时间】:2020-12-19 22:17:16
【问题描述】:

对于 Nginx,proxy_redirect,我们可以使用字符串代替字符串或正则表达式吗?我需要使用 proxy_redirect 替换 Location 字符串中多次出现的文本,但我不确定如何使用正则表达式。因此,我正在检查proxy_redirect是否可以使我们成为脚本,那么它可能很容易。

【问题讨论】:

  • 您可以在一个块中使用多个proxy_redirect 语句,但您能举个例子说明您要实现的目标吗?
  • 这是另一个问题,描述了我试图用 proxy_redirect 解决的整体问题。 stackoverflow.com/questions/63647067/…
  • 在字符串中单次出现要更改的文本,正则表达式有效,但多次出现正则表达式是不可能的。而且我认为如果它支持脚本,那么它可以很容易地完成。
  • 该字符串可能出现多少次?您可以编写一个正则表达式来处理一个事件,另一个来处理两个事件,等等。
  • 目前出现了 3 次。任何提示或参考如何做到这一点都很棒!

标签: nginx proxy reverse-proxy nginx-reverse-proxy


【解决方案1】:

您可以在包含proxy_pass 语句的单个块中使用多个proxy_redirect 语句。 Nginx 会按顺序评估包含正则表达式的语句,直到找到匹配项,因此将更具体的正则表达式放在不太具体的正则表达式之前。

要替换 3xx 响应的 Location 标头中出现的一次模式,您可以使用:

proxy_redirect ~^(.*)origin.example.com(.*)$ $1main.example.com$2;

要替换相同模式的两次出现,您可以使用:

proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)$ $1main.example.com$2main.example.com$3;

要替换相同模式的一个、两个或三个匹配项,您可以使用:

proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)origin.example.com(.*)$ $1main.example.com$2main.example.com$3main.example.com$4;
proxy_redirect ~^(.*)origin.example.com(.*)origin.example.com(.*)$ $1main.example.com$2main.example.com$3;
proxy_redirect ~^(.*)origin.example.com(.*)$ $1main.example.com$2;

使用~* 使正则表达式不区分大小写。详情请见this document。

【讨论】:

  • 哇,这很好用。我有一个确切的想法。谢谢指导。
猜你喜欢
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
相关资源
最近更新 更多