【问题标题】:Configure NGINX redirect rules and proxy rules配置 NGINX 重定向规则和代理规则
【发布时间】:2018-12-20 03:12:18
【问题描述】:

我想创建一个带有重定向规则和代理规则的 nginx 配置文件。以下是要求和示例。有人可以帮忙吗?

所需的重定向规则是:如果域名后面没有“/outer”,则添加它并使用301重定向网址。我希望“/outer”出现在浏览器中。下面是一些例子。如果我在浏览器中输入左侧路径,我希望 nginx 将路径重定向到右侧。

https://design.mydomain.com -> https://design.mydomain.com/outer/
https://design.mydomain.com/ -> https://design.mydomain.com/outer/
https://design.mydomain.com/my/home.html?t=now -> 
https://design.mydomain.com/outer/my/home.html?t=now

所需的代理规则是:如果 url 包含前导“/outer”,则从路径中删除“/outer”并将请求代理到后端 Web 服务器。对于下面的示例,如果我在浏览器中输入左侧路径,nginx 应该以正确的路径调用后端 Web 服务器。

https://design.mydomain.com/outer/my/home.html?t=now  -->  https://webserver/my/home.html?t=now

Web 服务器文件夹结构如下。它已经在使用内部主机名网络服务器的后端运行。

|--index.html
|--my
     |--home.html

【问题讨论】:

    标签: nginx proxy


    【解决方案1】:

    为了通过 proxy_pass 将所有请求转发到 /path 以将所有请求转发到 /outer/path,您可以添加以下块。虽然 if 语句可能看起来多余,但它是在 $1 中 /outer 之后存储请求路径的最简单方法(受此帖子启发:https://serverfault.com/questions/699695/nginx-proxy-pass-remove-url-substring)

    location /outer {
        if ($request_uri ~* "/outer(.*)") {
            proxy_pass https://webserver$1;
        } 
    }
    

    为了将所有非/外部请求重定向到在域名之后插入 /outer,您可以创建一个匹配所有 url 的位置块,因为上面的位置块将优先于匹配 /outer(因此/outer 不会添加到已经包含 /outer 的 request_uris 前面)。

    location / {
        return 301 $https://design.mydomain.com/outer$request_uri;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2017-02-04
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多