配置NGINX重定向规则和代理规则

时间:2018-07-12 01:53:53

标签: nginx proxy

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

所需的重定向规则是:如果域名后没有“ / outer”,则添加该域名并使用301重定向Web URL。我希望浏览器中显示“ / 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服务器文件夹结构如下。它已经在带有内部主机名webserver的后端中运行。

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

1 个答案:

答案 0 :(得分:3)

为了通过proxy_pass将对/ outer / path的所有请求转发到/ path,可以添加以下块。尽管if语句似乎是多余的,但这是在/ outer之后将请求路径存储在$ 1中的最简单方法(受本文启发:https://serverfault.com/questions/699695/nginx-proxy-pass-remove-url-substring

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

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

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