「Nginx」- proxy_pass(学习笔记) @20210222

本文详细介绍了Nginx中proxy_pass指令的使用,特别是其参数携带URI时如何影响请求路径,以及不携带URI时如何处理。同时,探讨了proxy_pass指令中使用静态与动态域名时的DNS解析规则,包括启动和重载时的解析行为,以及从变量中获取域名时的解析策略。理解这些细节对于优化Nginx反向代理配置至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于 proxy_pass 参数是否携带 URI 的问题

如果 proxy_pass 的参数携带 URI 信息,则匹配 location 的部分,将被替换为 proxy_pass 指令设置。例如:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

curl https://example.com/name/example
curl http://127.0.0.1/remote/example

如果 proxy_pass 参数没有携带 URL 信息,请求将直接发送到后端进行处理:

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

curl https://example.com/name/example
curl http://127.0.0.1/name/example

这里需要重点区分的就是 proxy_pass http://127.0.0.1proxy_pass http://127.0.0.1/ 是有区别的。

注意事项:
1)当在 proxy_pass 中带有变量时,需要进行特殊处理,因为此时无法确定请求的 URI 信息。

何时发生域名解析

当直接使用域名时……

对于如下 Nginx 配置信息:

server {
    location / {
        proxy_pass http://backends.example.com:8080;
    }
}

根据 Using the Domain Name in the proxy_pass Directive 描述,可以得出以下结论:
1)在启动或重载时,Nginx 进行 DNS 解析,之后不会再进行解析;如果无法解析,将返回 host not found in upstream 错误;
2)读取 /etc/resolv.conf 配置进行 DNS 解析;

当从变量中获取域名时……

对于如下 Nginx 配置信息:

resolver 10.0.0.2 valid=10s;

server {
    location / {
        set $backend_servers backends.example.com;
        proxy_pass http://$backend_servers:8080;
    }
}

根据 Setting the Domain Name in a Variable 描述,可以得出以下结论:
1)当 TTL 后,Nginx 将重新解析域名;
2)必须配置 resolover 参数,使用 valid 控制过期;
3)不会使用 /etc/resolv.conf 配置进行 DNS 解析;

参考文献

Module ngx_http_proxy_module/proxy_pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值