资讯专栏INFORMATION COLUMN

proxy_pass的小说明

happyhuangjinjin / 3142人阅读

摘要:的小说明在中配置时,遇到了一些小坑,特加以说明,防止以后忘记。当加上了,相当于是绝对根路径,不会把中匹配的路径部分代理走。。。带上中的东西中的匹配路径为。不加后会加上转发为用在的正则匹配中的坑。。。

proxy_pass的小说明

在 nginx 中配置 proxy_pass 时,遇到了一些小坑,特加以说明,防止以后忘记。

proxy_pass http://backup/;

当加上了 / ,相当于是绝对根路径,nginx 不会把location 中匹配的路径部分代理走;

location ^~ /static/ 
{ 
# http://backup/。。。 不带location中的东西
# 只要proxy_pass后面有东西就不带location中的东西
proxy_pass http://www.test.com/; 
}
# location中的匹配路径为/static/。加了/之后proxy_pass 不会加上/static/
# curl http://localhost:3000/static/index.html
# proxy_pass 转发为 http://www.test.com/index.html
proxy_pass http://backup;

如果没有/,则会把匹配的路径部分也给代理走。

location ^~ /static/ 
{ 
# 带上location中的东西
proxy_pass http://www.test.com; 
}
# location中的匹配路径为/static/。不加 / 后proxy_pass会加上 /static/
# curl http://localhost:3000/static/index.html
# proxy_pass 转发为 http://www.test.com/static/index.html
用在 location 的正则匹配中的坑 。。。

location 中 ~ (区分大小写)与 ~* (不区分大小写)标识均为正则匹配,如果的话想在这里用的话,则 proxy_pass 中的 http://backup; 后面不能带有url。

如下写法会报错

location ~* /static/(.*)
{ 
# 此处 location 为正则匹配,proxy_pass 后面不能有 /test 
proxy_pass http://www.test.com/test; 
}

如果 http://backup; 不带url 。这么写是没有问题的

location ~* /static/(.*)
{ 
# 此处 location 为正则匹配,proxy_pass 后面不能有 /test 
proxy_pass http://www.test.com; 
}
在proxy_pass 中使用变量

proxy_pass中可以使用变量,但是如果变量涉及到域名的话 需要使用resolver指令解析变量中的域名(因为nginx一开始就会解析好域名)

### 不涉及到域名变量
location ~* /aa/bb(.*) {
    # 正常使用变量,注意此处为location的正则匹配 proxy_pass 不能带 /
    # 转发后为 127.0.0.1:9999/test
    proxy_pass http://backup$1;
}

### 涉及到域名的变量
location /aa/bb {
    # google 域名解析
    resolver 8.8.8.8;
    # 此处变量涉及到了域名 需要调用resolver指令进行解析下否则会报错。
    set $myhost "www.test.com"; 
    proxy_pass http://$myhost;
}
rewrite 重写后的 url 会忽略proxy_pass后路径
# curl 127.0.0.1:8888/aa/bb/ccc
location /aa/bb {
    rewrite /aa/bb(.*) /re$1 break;
    proxy_pass http://backup;
}
# 转发后得到 127.0.0.1:9999/re/ccc
location /aa/bb{
    rewrite /aa/bb(.*) /re$1 break;
    # rewrite 重写后的 url 路径会 忽略 /asd 相当于 http://backup;什么都不带
    proxy_pass http://backup/asd;
}
# 此处转发后同样得到 127.0.0.1:9999/re/ccc 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39434.html

相关文章

  • Nginx 学习总结(5) —— 反向代理

    摘要:代理请求当代理请求时,它会将请求发送到指定的代理服务器,获取响应并将其发送回客户端。是否启用缓冲使用指令,默认是开启的。 这是 Nginx 学习总结的第五篇,上一篇介绍到了 Nginx 学习总结(4)—— Rewrite 模块,这一篇会对 反向代理 相关知识做一些总结。 什么是代理?代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或通过除 HTTP 以外的协议将请求...

    Achilles 评论0 收藏0
  • 搞懂nginx的proxy模块-01

    摘要:参数值可以包含变量请求头响应头处理默认情况下,重新定义代理请求和中的两个头字段,并删除了值为空字符串的头字段。修改或设置请求头的值请求头的值可以是变量,文本或者是它们的组合如果为空字符串那么这个字段将不会被转发到代理服务器。 搞懂nginx的proxy模块-01 nginx的ngx_http_proxy_module模块的指令着实是太多了,其实平时工作中经常用到的指令也就是那几个,但是...

    ssshooter 评论0 收藏0
  • Nginx http运行状况健康检查配置

    摘要:服务器被标记为不健康,并且在再次通过运行状况检查之前不会向其发送客户端请求。对于上面声明的样本组中的第一个服务器,运行状况检查会请求。响应必须满足块中定义的所有条件,以便服务器通过运行状况检查。 原文链接:何晓东 博客 翻译自 官方文档 被动检查 对于被动健康检查,NGINX 和 NGINX Plus 会在事件发生时对其进行监控,并尝试恢复失败的连接。如果仍然无法恢复正常,NGINX...

    animabear 评论0 收藏0
  • Nginx http运行状况健康检查配置

    摘要:服务器被标记为不健康,并且在再次通过运行状况检查之前不会向其发送客户端请求。对于上面声明的样本组中的第一个服务器,运行状况检查会请求。响应必须满足块中定义的所有条件,以便服务器通过运行状况检查。 原文链接:何晓东 博客 翻译自 官方文档 被动检查 对于被动健康检查,NGINX 和 NGINX Plus 会在事件发生时对其进行监控,并尝试恢复失败的连接。如果仍然无法恢复正常,NGINX...

    daydream 评论0 收藏0

发表评论

0条评论

happyhuangjinjin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<