102人参与 • 2025-01-11 • Oracle
proxy_pass
是 nginx 中一个非常重要的指令,用于将请求代理到后端服务器。本文将详细介绍 proxy_pass
的基本用法、配置示例以及一些高级用法。
proxy_pass
指令用于将请求转发到后端服务器。它可以用于 http 和 stream 模块,分别处理 http 请求和 tcp/udp 流量。
proxy_pass url;
2.1.1 基本示例
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; } }
在这个示例中,所有访问 example.com
的请求都会被转发到 backend_server
。
2.1.2 绝对根路径 vs 相对路径
绝对根路径:在 proxy_pass
后面的 url 以斜杠 /
结束,表示绝对根路径。
location /proxy/ { proxy_pass http://127.0.0.1/; }
例如,访问 http://example.com/proxy/test.html
会被转发到 http://127.0.0.1/test.html
。
相对路径:在 proxy_pass
后面的 url 不以斜杠 /
结束,表示相对路径。
location /proxy/ { proxy_pass http://127.0.0.1; }
例如,访问 http://example.com/proxy/test.html
会被转发到 http://127.0.0.1/proxy/test.html
。
stream { upstream backend { server 127.0.0.1:8080; } server { listen 12345; proxy_pass backend; } }
在这个示例中,所有连接到 12345
端口的 tcp 流量都会被转发到 127.0.0.1:8080
。
当 location
使用正则表达式时,proxy_pass
不能包含 uri 部分。
location ~ /testc { proxy_pass http://127.0.0.1:8801; }
如果包含 uri 部分,会导致配置文件解析错误:
location ~ /testd { proxy_pass http://127.0.0.1:8801/; # 错误 }
可以使用变量来动态生成转发地址。
location /novel/ { proxy_pass http://book-server/books$request_uri; }
例如,访问 http://example.com/novel/three-body.html?page=3
会被转发到 http://book-server/books/novel/three-body.html?page=3
。
nginx 会在某些情况下自动进行 301 重定向,例如当请求的 uri 没有以斜杠 /
结束,但 nginx 认为这是一个目录时。
location /films/nature/ { proxy_pass http://film-server; }
如果访问 http://example.com/films/nature
,nginx 会返回 301 重定向到 http://example.com/films/nature/
。
可以使用精确匹配来避免 301 重定向。
location /films/nature/ { proxy_pass http://film-server; } location = /films/nature { proxy_pass http://film-server; }
在 location
中使用 if
语句时,proxy_pass
不能包含 uri 部分。
location /google { if ($geoip_country_code ~ (ru|cn)) { proxy_pass http://www.google.hk; } }
在 limit_except
中使用 proxy_pass
时,不能包含 uri 部分。
location /yongfu/ { proxy_pass http://unix:/tmp/backend.socket:/uri/; limit_except put delete { proxy_pass http://127.0.0.1:9080; } }
upstream backend_servers { server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } }
server { listen 80; server_name example.com; location /api/ { proxy_pass http://api_server/; } location /static/ { proxy_pass http://static_server/; } }
server { listen 80; server_name example.com; location / { proxy_pass http://unix:/tmp/backend.socket:/uri/; } }
到此这篇关于nginx中proxy_pass使用小结的文章就介绍到这了,更多相关nginx proxy_pass使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论