Nginx中proxy_pass使用小结
proxy_pass
是 Nginx 中一个非常重要的指令,用于将请求代理到后端服务器。本文将详细介绍 proxy_pass
的基本用法、配置示例以及一些高级用法。
1. 基本概念
1.1 proxy_pass 概述
proxy_pass
指令用于将请求转发到后端服务器。它可以用于 HTTP 和 Stream 模块,分别处理 HTTP 请求和 TCP/UDP 流量。
1.2 语法
proxy_pass URL;
- URL:后端服务器的地址,可以是 HTTP/HTTPS 地址或 TCP/UDP 地址。
1.3 使用场景
- HTTP 代理:将 HTTP 请求转发到后端服务器。
- Stream 代理:将 TCP/UDP 流量转发到后端服务器。
2. 基本用法
2.1 HTTP 代理
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
。
2.2 Stream 代理
stream { upstream backend { server 127.0.0.1:8080; } server { listen 12345; proxy_pass backend; } }
在这个示例中,所有连接到 12345
端口的 TCP 流量都会被转发到 127.0.0.1:8080
。
3. 高级用法
3.1 正则匹配
当 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/; # 错误 }
3.2 变量使用
可以使用变量来动态生成转发地址。
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
。
3.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/
。
3.4 精确匹配
可以使用精确匹配来避免 301 重定向。
location /films/nature/ { proxy_pass http://film-server; } location = /films/nature { proxy_pass http://film-server; }
3.5 if 语句
在 location
中使用 if
语句时,proxy_pass
不能包含 URI 部分。
location /google { if ($geoip_country_code ~ (RU|CN)) { proxy_pass http://www.google.hk; } }
3.6 limit_except
在 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; } }
4. 实际案例
4.1 转发到多个后端服务器
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; } }
4.2 转发到不同路径
server { listen 80; server_name example.com; location /api/ { proxy_pass http://api_server/; } location /static/ { proxy_pass http://static_server/; } }
4.3 转发到 Unix Domain Socket
server { listen 80; server_name example.com; location / { proxy_pass http://unix:/tmp/backend.socket:/uri/; } }
到此这篇关于Nginx中proxy_pass使用小结的文章就介绍到这了,更多相关Nginx proxy_pass使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- Nginx中location proxy_pass加与不加/的区别说明
- Nginx location和proxy_pass配置示例详解
- Nginx中proxy_pass的斜杠的两种方式
- Nginx的location路径与proxy_pass匹配规则说明
- Nginx捕获并自定义proxy_pass返回的错误问题
- nginx中如何配置proxy_pass
- Nginx rewrite和proxy_pass的区别及说明
- Nginx proxy_pass如何到https后端
- nginx代理参数proxy_pass的实现
- nginx反向代理proxy_pass遇到的死循环问题
- 解决nginx配置proxy_pass之后,响应变慢的问题
- Nginx使用if指令实现多个proxy_pass方式
相关文章
权限问题导致Nginx 403 Forbidden错误的解决方法
这篇文章主要介绍了权限问题导致Nginx 403 Forbidden错误的解决方法,本文中导致 403 Forbidden错误的原因是配置文件中没有指明一个用户,需要的朋友可以参考下2014-08-08keepalived结合nginx实现nginx高可用的方法
这篇文章主要介绍了keepalived结合nginx实现nginx高可用的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-03-03nginx限速配置的三种方法(limit_req、limit_conn、limit_rate)
本文主要介绍了nginx限速配置的三种方法,主要包括limit_req、limit_conn、limit_rate,本文就详细的介绍一下如何使用,感兴趣的可以了解一下2023-08-08
最新评论