在Nginx中,您可以通过配置不同的 location 块将特定路径的请求路由到不同的后端服务器
在Nginx中,您可以通过配置不同的 location
块将特定路径的请求路由到不同的后端服务器。以下是详细的配置方法:
1. 基础配置示例
2. 关键配置解释
2.1 location
路径匹配
-
精确匹配:
location = /path { ... }
仅匹配/path
请求。 -
前缀匹配:
location /prefix/ { ... }
匹配以/prefix/
开头的所有请求。 -
正则匹配:
location ~ ^/regex/(.*)$ { ... }
使用正则表达式匹配路径。
2.2 proxy_pass
代理行为
-
保留路径前缀:
location /app1/ { proxy_pass http://backend1; # 无结尾 / }
请求
example.com/app1/api
→ 转发到backend1/app1/api
。 -
去除路径前缀:
location /app1/ { proxy_pass http://backend1/; # 有结尾 / }
请求
example.com/app1/api
→ 转发到backend1/api
。
2.3 请求头传递
-
proxy_set_header
:确保后端服务器获取真实客户端信息:proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3. 高级场景
3.1 路径重写(Rewrite)
location /legacy/ { rewrite ^/legacy/(.*)$ /new/$1 break; # 将 /legacy/ 重写为 /new/ proxy_pass http://backend3; }
3.2 负载均衡
upstream backend { server 192.168.1.30:80 weight=2; # 权重2 server 192.168.1.40:80; } location / { proxy_pass http://backend; }
3.3 静态文件处理
location /static/ { root /var/www/html; # 路径为 /var/www/html/static/ expires 30d; # 缓存30天 }
4. 测试与调试
-
检查语法:
nginx -t
-
重载配置:
nginx -s reload
-
日志排查:
-
查看Nginx访问日志:
/var/log/nginx/access.log
-
查看Nginx错误日志:
/var/log/nginx/error.log
-
5. 完整示例
http { upstream app1_server { server 10.0.0.1:8080; } upstream app2_server { server 10.0.0.2:8080; } server { listen 80; server_name mydomain.com; # 路由到应用1 location /app1/ { proxy_pass http://app1_server/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 路由到应用2(带路径重写) location /app2/ { rewrite ^/app2/(.*) /$1 break; proxy_pass http://app2_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 默认路由 location / { return 404; # 或代理到默认后端 } } }
通过上述配置,Nginx会根据请求路径将流量分发到不同的后端服务器。请根据实际需求调整IP、端口和路径规则。
郭慕荣博客园
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-03-02 nginx -s reload原理
2021-03-02 Nginx 限流总结
2020-03-02 开发一个属于自己的Spring Boot Starter