<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jqw889 (段三醉)</title>
    <link>https://ruby-china.org/jqw889</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Nginx location 知识知多少</title>
      <description>&lt;p&gt;写在之前&lt;/p&gt;

&lt;p&gt;众所周知 nginx location 路由转发规则多种多样，尤其是 [ = | ~ | ~* | ^~ ] 这些前缀是什么意思、root 与 alias 是否可以区分开，nginx 作为反向代理服务器时，location 中 proxy_pass 中配置的上游服务，服务器后面是否带/与不带/是否有区别，带 URI 与不带 URI 是否有区别等，本文从实践的角度进行分析总结。&lt;/p&gt;

&lt;p&gt;location 中 URI 前缀实践&lt;/p&gt;

&lt;p&gt;匹配语法&lt;/p&gt;

&lt;p&gt;nginx 的 uri 匹配模式很强大、并且使用也非常灵活，下面就是 nginx 的 location 相关的所有语法；&lt;/p&gt;

&lt;pre&gt;location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
&lt;/pre&gt;

&lt;p&gt;是的，语法就这一点，是不是感觉很简单呢？&lt;/p&gt;

&lt;pre&gt;location [指令模式] uri {
...
}
&lt;/pre&gt;

&lt;p&gt;指令模式说明&lt;/p&gt;

&lt;p&gt;指令模式有 [ = | ~ | ~* | ^~ ]，根据不同的指令模式可分为：&lt;/p&gt;

&lt;p&gt;精确匹配：= uri { ... }&lt;/p&gt;

&lt;p&gt;前缀匹配：^~ uri { ... }&lt;/p&gt;

&lt;p&gt;正则匹配：~ uri { ... } 和 ~* uri { ... }&lt;/p&gt;

&lt;p&gt;正常匹配：uri { ... }&lt;/p&gt;

&lt;p&gt;全匹配：/ { ... }&lt;/p&gt;

&lt;p&gt;指令模式匹配顺序&lt;/p&gt;

&lt;p&gt;精确匹配 &amp;gt; 前缀匹配 &amp;gt; 正则匹配 &amp;gt; 正常匹配 &amp;gt; 全匹配&lt;/p&gt;

&lt;p&gt;实验说明&lt;/p&gt;

&lt;p&gt;测试时，最好不要使用浏览器，因为浏览器有缓存，如果要使用请先清除缓存，或者使用 curl 或者 Postman 工具等。&lt;/p&gt;

&lt;p&gt;精确匹配&lt;/p&gt;

&lt;pre&gt;# 第1段
location /k8svip/ {
root /data/nginx/html4/;
index index.html;
}

# 第2段
location = /k8svip/ {
root /data/nginx/html3/;
index index.html;
}
&lt;/pre&gt;

&lt;p&gt;浏览器访问：&lt;a href="http://127.0.0.1/k8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;根据上面的匹配顺序，这里应该显示什么呢？大家都会认为是第 2 段代码中的 = /jdb/ 你可以实验下，不是的，是第 1 段，为什么？&lt;/p&gt;

&lt;p&gt;精确匹配中 '/k8svip/'中优先匹配到第 2 段，再访问'/k8svip/index.html'，此次内部跳转 uri 已经是'/k8svip/index.html'，而非 =的；最终访问结果是第 1 段中的 index.html。&lt;/p&gt;

&lt;pre&gt;# 第3段
location /k8svip/ {
rewrite ^/k8svip/$ https://www.baidu.com/ break;
}

# 第4段
location = /k8svip/ {
rewrite ^/k8svip/$ https://www.sina.com.cn/ break;
}
&lt;/pre&gt;

&lt;p&gt;浏览器访问：&lt;a href="http://127.0.0.1/k8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/&lt;/a&gt; 看下效果，是不是匹配到第 4 段了呢？答案：是的；访问&lt;a href="http://127.0.0.1/k8sVIP/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8sVIP/&lt;/a&gt; ，&lt;a href="http://127.0.0.1/k8svip/abc" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/abc&lt;/a&gt; 再看下效果，答案：都无法正常访问。这里可结合之前的一篇：看了这篇！再不会 Nginx rewrite 算我输！&lt;/p&gt;

&lt;p&gt;结论：精确匹配区分大小写，不能使用正则，访问的 URI 必须完全与=后面的一致，多一个"/"或者少一个"/"，都是不可以的&lt;/p&gt;

&lt;p&gt;前缀匹配&lt;/p&gt;

&lt;pre&gt;location ^~ /k8svip/ {
rewrite ^ https://www.163.com break;
}

location ^~ /k8svip/bcd/ {
rewrite ^ https://www.qq.com break;
}

location ^~ /Abc/ {
rewrite ^ https://www.sina.com.cn break;
}
&lt;/pre&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/k8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/&lt;/a&gt; 成功，跳转到 163 首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/k8svip/abcd/163%E9%A6%96%E9%A1%B5%EF%BC%9B" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/abcd/163首页；&lt;/a&gt;成功，只匹配前缀，跳转到&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/K8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/K8svip/&lt;/a&gt; 不成功，区分大小写，出错；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/k8sVip/123" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8sVip/123&lt;/a&gt; 不成功，区分大小写，出错；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/Abc/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/Abc/&lt;/a&gt; 成功，区分大小写，跳转到新浪首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/Abc/abc" rel="nofollow" target="_blank"&gt;http://127.0.0.1/Abc/abc&lt;/a&gt; 成功，只匹配前缀，跳转到新浪首页；&lt;/p&gt;

&lt;p&gt;结论：前缀匹配不能使用正则，区分大小写，只要前缀相同，都可以匹配成功，不管后面有没有字符，保证前缀相同即可。&lt;/p&gt;

&lt;p&gt;正则匹配&lt;/p&gt;

&lt;pre&gt;location ~ /[a-z]k8svip/ {
rewrite ^ https://www.sina.com.cn break;
}

location ~* /[a-z]k8svip/ {
rewrite ^ https://www.google.com break;
}
&lt;/pre&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/ak8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/ak8svip/&lt;/a&gt; 成功，正则匹配，会跳转到新浪首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/ak8svip/bbb" rel="nofollow" target="_blank"&gt;http://127.0.0.1/ak8svip/bbb&lt;/a&gt; 成功，正则 + 前缀匹配，会跳转到新浪首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/zk8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/zk8svip/&lt;/a&gt; 成功，会跳转到新浪首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/Ak8svip/aaa" rel="nofollow" target="_blank"&gt;http://127.0.0.1/Ak8svip/aaa&lt;/a&gt; 成功，这个会跳转到 google.com 首页；&lt;/p&gt;

&lt;p&gt;结论：正则匹配 ~ 区分大小写，~* 不区分大小写，并且与前缀匹配比较类似，只需要匹配模式开头部分，这两种同时存在时，优先匹配区分大小写的。&lt;/p&gt;

&lt;p&gt;正常匹配（指令模式为空的匹配规则叫正常匹配）&lt;/p&gt;

&lt;pre&gt;# 第1段
location /k8svip/ {
rewrite ^ https://www.google.com break;
}

# 第2段
location /[0-9]k8svip/ {
rewrite ^ https://www.qq.com break;
}
&lt;/pre&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/k8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/&lt;/a&gt; 成功，跳转 google 首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/k8svip/2" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/2&lt;/a&gt; 成功，类似前缀匹配，跳转 google 首页；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/k8sVIP/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8sVIP/&lt;/a&gt; 不成功，区分大小写，出错；&lt;/p&gt;

&lt;p&gt;访问：&lt;a href="http://127.0.0.1/0k8svip/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/0k8svip/&lt;/a&gt; 不成功，不支持正则；&lt;/p&gt;

&lt;p&gt;结论：有些文档中说正常匹配支持正则，不区分大小写，个人测试了下，不支持正则，但在 uri 后面继续跟字符，区分大小写（相信实验结果😀，大家可以测试，如果有问题，可以交流，也有可能是版本的差异）正常匹配与前缀匹配的差别，只在于优先级。&lt;/p&gt;

&lt;pre&gt;# 第3段
location ^~ /k8svip/ {
rewrite ^/k8svip/$ https://www.baidu.com/ break;
}

# 第4段
location /k8svip/ {
rewrite ^/k8svip/$ https://www.sina.com.cn/ break;
}
&lt;/pre&gt;

&lt;p&gt;总结：第 3 段前缀匹配与第 4 段正常匹配不能同时存在，否则会报 nginx: [emerg] duplicate location "/k8svip/" in /data/nginx//conf/nginx.conf:47 因为这两个都是普通字符串；&lt;/p&gt;

&lt;p&gt;全匹配&lt;/p&gt;

&lt;pre&gt;location / {
root /data/nginx/html;
index index.html index.htm;
}
&lt;/pre&gt;

&lt;p&gt;说明：没有匹配指令，并且匹配的 URI 仅一个斜杠 /，通常用在一个默认页面的地方，这个地方没有什么好说的。&lt;/p&gt;

&lt;p&gt;命名匹配&lt;/p&gt;

&lt;pre&gt;error_page 404 = @notfound;
location @notfound {
rewrite ^ https://www.google.com break;
}
&lt;/pre&gt;

&lt;p&gt;说明：一般用于静态页面或者错误页面，并且这个命名匹配中，不允许有 alias。&lt;/p&gt;

&lt;p&gt;优先级验证综合实验&lt;/p&gt;

&lt;pre&gt;# 全匹配，这里/data/nginx/html/下面有一个k8svip文件夹，里面有index.html
location / {
root /data/nginx/html;
index index.html;
}

# 正常匹配
location /k8svip/ {
rewrite ^/k8svip/$ https://www.sina.com.cn/ break;
}

# 正则匹配
location ~ /[a-z]8svip/ {
rewrite ^/k8svip/$ https://www.google.com/ break;
}

# 前缀匹配
location ^~ /k8svip/ {
rewrite ^/k8svip/$ https://www.baidu.com/ break;
}

# 精确匹配
location = /k8svip/ {
rewrite ^/k8svip/$ https://www.qq.com/ break;
}
&lt;/pre&gt;

&lt;p&gt;测试方法：把最先匹配的注释掉，然后再继续测试，就证明了上面的优先级，注意前缀匹配与正常匹配在相同 URI 时，不能同时存在；&lt;/p&gt;

&lt;p&gt;说明：为了证明以上的优先级顺序，我们设置了以上的测试用例，为了更进一步说明问题，我们把优先级最高的放在配置文件的最下面，这样避免从上到下优先匹配的问题，通过上面的实验，可以验证 精确匹配 &amp;gt; 前缀匹配 &amp;gt; 正则匹配 &amp;gt; 正常匹配 &amp;gt; 全匹配 这个指令优先级顺序。&lt;/p&gt;

&lt;p&gt;匹配原则除了这个优先级外，还有一个就是在相同指令模式匹配中，匹配度最大的 URI 优先；
root 与 alias&lt;/p&gt;

&lt;p&gt;nginx 配置 location 规则中的 uri 往往都是匹配一个目录。&lt;/p&gt;

&lt;pre&gt;location /k8svip/ {
root /data/nginx/html/;
index index.html index.htm;
}
&lt;/pre&gt;

&lt;p&gt;当我们访问 &lt;a href="http://127.0.0.1/k8svip/index.html/data/nginx/html/" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/index.html/data/nginx/html/&lt;/a&gt;时，如果 这个目录下面没有 k8svip 文件夹，并且它下面没有 index.html 或者 index.htm，会报 404 错误？原因是使用 root 指定目录时，目录下面需要包括 location 后面的 URI，否则会报错，即/data/nginx/html/k8svip/index.html，也可以这样理解，root 指定目录时，不会将 location uri 配置的路径去掉，需要在 root 目录下面包括 uri 路径；&lt;/p&gt;

&lt;pre&gt;location /k8svip/ {
alias /data/nginx/html/;
index index.html index.htm;
}
&lt;/pre&gt;

&lt;p&gt;当我们访问 &lt;a href="http://127.0.0.1/k8svip/index.html" rel="nofollow" target="_blank"&gt;http://127.0.0.1/k8svip/index.html&lt;/a&gt;时，这里使用 alias，只要保证 alias 指定的目录中有 index.html 即可，它会将 location uri 配置的路径去掉，实际访问的就是/data/nginx/html/index.html。&lt;/p&gt;

&lt;p&gt;结论：root 指定的目录中，需要 location 中的 uri 路径目录确实存在，alias 指定的目录中不需要 location 中的 uri 路径目录存在。&lt;/p&gt;

&lt;p&gt;代理服务器 proxy_pass 中有无 /&lt;/p&gt;

&lt;p&gt;nginx 作为反向代理服务器时，会使用到 proxy_pass，但是 proxy_pass 后面 server 有无 / 是有很大区别的，今天通过实验做下总结；&lt;/p&gt;

&lt;p&gt;&lt;img src="https://user-gold-cdn.xitu.io/2020/6/30/17304250f37b4807?w=673&amp;amp;h=164&amp;amp;f=png&amp;amp;s=24144" title="" alt=""&gt;
上游真实 server 192.168.1.3 配置&lt;/p&gt;

&lt;pre&gt;location /k8svip/ {
root /data/nginx/html/;
index index.html index.htm;
}

location /k8svi {
root /data/nginx/html/;
index index.html index.htm;
}

location /k3svip/ {
root /data/nginx/html/;
index index.html index.htm;
}
&lt;/pre&gt;

&lt;p&gt;上游真实 server 192.168.1.3 验证&lt;/p&gt;

&lt;pre&gt;[root@vm-os-centos7 conf]# curl http://192.168.1.3/k8svip/
k8svip
[root@vm-os-centos7 conf]# curl -L http://192.168.1.3/k8svi
k8svi
[root@vm-os-centos7 conf]# curl http://192.168.1.3/k3svip/
k3svip
[root@vm-os-centos7 html]# curl http://192.168.1.3/k3svipindex
k3svipindex.html
[root@vm-os-centos7 html]#
&lt;/pre&gt;

&lt;p&gt;代理服务器 proxy_pass 中无 "/" 验证&lt;/p&gt;

&lt;pre&gt;# 实验 反向代理中后面没有"/"
location /k8svip/ {
proxy_pass http://192.168.1.3;
}

# 实验结果
[root@vm-os-centos7 ~]# curl http://192.168.1.2/k8svip/
k8svip
[root@vm-os-centos7 ~]# curl -L http://192.168.1.2/k8svip
k8svip
[root@vm-os-centos7 ~]#
&lt;/pre&gt;

&lt;p&gt;192.168.1.3 access.log 日志如下：&lt;/p&gt;

&lt;p&gt;192.168.1.2 - - [17/Jun/2020:21:04:58 +0800] "GET /k8svip/ HTTP/1.0" 200 7 "-" "curl/7.29.0"&lt;/p&gt;

&lt;p&gt;结论：如果 proxy_pass 反向代理中，在 server 后面没有 "/" 反斜杠的话，访问的是 &lt;a href="http://192.168.1.3/k8svip/index.htmllocation" rel="nofollow" target="_blank"&gt;http://192.168.1.3/k8svip/index.htmllocation&lt;/a&gt;，它会去上游真实服务器去匹配代理服务器上面 URI。&lt;/p&gt;

&lt;p&gt;代理服务器 proxy_pass 中有 "/" 验证&lt;/p&gt;

&lt;pre class="php" style="font-family:monospace;"&gt;&lt;span style="color:#666666;font-style:italic;"&gt;# 实验 proxy_pass 后面server中有"/"
&lt;/span&gt;location &lt;span style="color:#339933;"&gt;/&lt;/span&gt;k8svip&lt;span style="color:#339933;"&gt;/&lt;/span&gt; &lt;span style="color:#009900;"&gt;{&lt;/span&gt;
  proxy_pass http&lt;span style="color:#339933;"&gt;:&lt;/span&gt;&lt;span style="color:#666666;font-style:italic;"&gt;//192.168.1.3/;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;}&lt;/span&gt;
&lt;span style="color:#666666;font-style:italic;"&gt;# 实验结果
&lt;/span&gt;&lt;span style="color:#009900;"&gt;[&lt;/span&gt;root&lt;span style="color:#339933;"&gt;@&lt;/span&gt;vm&lt;span style="color:#339933;"&gt;-&lt;/span&gt;os&lt;span style="color:#339933;"&gt;-&lt;/span&gt;centos7 conf&lt;span style="color:#009900;"&gt;]&lt;/span&gt;&lt;span style="color:#666666;font-style:italic;"&gt;# curl http://192.168.1.2/k8svip/
&lt;/span&gt;&lt;span style="color:#339933;"&gt;&amp;lt;!&lt;/span&gt;DOCTYPE html&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;&lt;/span&gt;html&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;&lt;/span&gt;head&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;&lt;/span&gt;title&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;Welcome to nginx&lt;span style="color:#339933;"&gt;!&amp;lt;/&lt;/span&gt;title&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;&lt;/span&gt;style&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
    body &lt;span style="color:#009900;"&gt;{&lt;/span&gt;
        width&lt;span style="color:#339933;"&gt;:&lt;/span&gt; 35em&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
        margin&lt;span style="color:#339933;"&gt;:&lt;/span&gt; &lt;span style="color:#cc66cc;"&gt;0&lt;/span&gt; auto&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
        font&lt;span style="color:#339933;"&gt;-&lt;/span&gt;family&lt;span style="color:#339933;"&gt;:&lt;/span&gt; Tahoma&lt;span style="color:#339933;"&gt;,&lt;/span&gt; Verdana&lt;span style="color:#339933;"&gt;,&lt;/span&gt; Arial&lt;span style="color:#339933;"&gt;,&lt;/span&gt; sans&lt;span style="color:#339933;"&gt;-&lt;/span&gt;serif&lt;span style="color:#339933;"&gt;;&lt;/span&gt;
    &lt;span style="color:#009900;"&gt;}&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;/&lt;/span&gt;style&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;/&lt;/span&gt;head&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;&lt;/span&gt;body&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;&lt;/span&gt;h1&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;Welcome to nginx&lt;span style="color:#339933;"&gt;!&amp;lt;/&lt;/span&gt;h1&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;/&lt;/span&gt;body&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#339933;"&gt;&amp;lt;/&lt;/span&gt;html&lt;span style="color:#339933;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#009900;"&gt;[&lt;/span&gt;root&lt;span style="color:#339933;"&gt;@&lt;/span&gt;vm&lt;span style="color:#339933;"&gt;-&lt;/span&gt;os&lt;span style="color:#339933;"&gt;-&lt;/span&gt;centos7 conf&lt;span style="color:#009900;"&gt;]&lt;/span&gt;&lt;span style="color:#666666;font-style:italic;"&gt;#&lt;/span&gt;&lt;/pre&gt;

192.168.1.3 access.log 日志如下：

192.168.1.2 - - [17/Jun/2020:21:11:17 +0800] "GET / HTTP/1.0" 200 257 "-" "curl/7.29.0"

结论：如果 proxy_pass 反向代理中，在 server 后面有 "/" 反斜杠的话，访问的是 http://192.168.1.3/index.html，它会忽略掉代理服务器上面location中的URI，直接访问代理服务器上面的"/"。

代理服务器 proxy_pass 后面增加目录并且加"/"''
&lt;pre&gt;# 实验 proxy_pass 后面有目录，并且目前后面有"/"
location /k8svip/ {
proxy_pass http://192.168.1.3/k3svip/;
}

# 实验结果
[root@vm-os-centos7 conf]# curl http://192.168.1.2/k8svip/
k3svip
[root@vm-os-centos7 conf]#
&lt;/pre&gt;

&lt;p&gt;192.168.1.3 access.log 日志如下：&lt;/p&gt;

&lt;p&gt;192.168.1.2 - - [17/Jun/2020:21:19:11 +0800] "GET /k3svip/ HTTP/1.0" 200 7 "-" "curl/7.29.0"&lt;/p&gt;

&lt;p&gt;结论：如果 proxy_pass 反向代理中有目录，并且有"/"反斜杠的话，访问的是&lt;a href="http://192.168.1.3/k3svip/index.htmllocation%E4%B8%AD%E7%9A%84URI%EF%BC%8C%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%9D%A2%E7%9A%84%E7%9B%AE%E5%BD%95+" rel="nofollow" target="_blank"&gt;http://192.168.1.3/k3svip/index.htmllocation中的URI，直接访问代理服务器上面的目录+"/"的形式。&lt;/a&gt;，它会忽略掉代理服务器上面&lt;/p&gt;

&lt;p&gt;代理服务器 proxy_pass 后面增加 URI，但不加"/"&lt;/p&gt;

&lt;pre&gt;# proxy_pass 中有目录，没有"/"
location /k8svip/ {
proxy_pass http://192.168.1.3/k3svipindex;
}

# 实验结果
[root@vm-os-centos7 conf]# curl http://192.168.1.2/k8svip/
k3svipindex.html
[root@vm-os-centos7 conf]#
&lt;/pre&gt;

&lt;p&gt;192.168.1.3 access.log 日志如下：&lt;/p&gt;

&lt;p&gt;192.168.1.2 - - [17/Jun/2020:21:36:19 +0800] "GET /k3svipindex HTTP/1.0" 200 17 "-" "curl/7.29.0"&lt;/p&gt;

&lt;p&gt;结论：如果 proxy_pass 反向代理中，在 server 后面有 URI，但没有 "/" 反斜杠的话，访问的是 &lt;a href="http://192.168.1.3/k3svipindexURI%E3%80%82" rel="nofollow" target="_blank"&gt;http://192.168.1.3/k3svipindexURI.&lt;/a&gt;，它会去上游真实服务器去匹配代理服务器上面的&lt;/p&gt;

&lt;p&gt;总结&lt;/p&gt;

&lt;p&gt;本文通过实验总结了 location 的匹配规则、root 与 alias 的区别、以及 nginx 作为反向代理服务器时，proxy_pass 中真实 server 是否有"/"反斜杠的区别等。&lt;/p&gt;</description>
      <author>jqw889</author>
      <pubDate>Wed, 01 Jul 2020 00:28:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/40086</link>
      <guid>https://ruby-china.org/topics/40086</guid>
    </item>
    <item>
      <title>Ruby 搭建程序时候出现 error，也查出来是 SSL，可就是搭配不成功！</title>
      <description>&lt;p&gt;Error fetching &lt;a href="https://gems.ruby-china.com:" rel="nofollow" target="_blank"&gt;https://gems.ruby-china.com:&lt;/a&gt;
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (&lt;a href="https://gems.ruby-china.com/specs.4.8.gz" rel="nofollow" target="_blank"&gt;https://gems.ruby-china.com/specs.4.8.gz&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;为什么我安装 SSL 总是不能匹配成功？&lt;/p&gt;</description>
      <author>jqw889</author>
      <pubDate>Sun, 28 Jun 2020 17:45:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/40038</link>
      <guid>https://ruby-china.org/topics/40038</guid>
    </item>
    <item>
      <title>怎么样才能把自己的网站展览的在酷站？</title>
      <description>&lt;p&gt;有没有相关技术人员出来解释一下？&lt;/p&gt;</description>
      <author>jqw889</author>
      <pubDate>Wed, 24 Jun 2020 16:14:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/40008</link>
      <guid>https://ruby-china.org/topics/40008</guid>
    </item>
  </channel>
</rss>
