nginx proxy_pass详解

nginx proxy_pass详解


最近在使用nginx时遇到一个奇怪的问题,我想将以/api开头的请求代理到http:127.0.0.1/8080/xxxapi下,所以我在nginx中做了如下配置:

		location /api {
                proxy_pass      http://127.0.0.1:8080/xxxapi/;
        }

然后我请求http://127.0.0.1/xxxapi/xxxx直接给我报了404,好家伙,直接给我整蒙了,F12查看请求,发现请求变成了http://127.0.0.1/api//xxxx,于是就有了这篇文章。

废话不多说,为什么会变成这样呢?查阅了nginx官网以及一些其它资料后发现,这是nginx的转发规则导致的,这里以访问http://127.0.0.1/api/abc为例列出一些常见的情形:

序号locationproxy_pass代理url
1/api/http://127.0.0.1:8080/http://127.0.0.1:8080/abc
2/api/http://127.0.0.1:8080http://127.0.0.1:8080/api/abc
3/api/http://127.0.0.1:8080/xxxapi/http://127.0.0.1:8080/xxxapi/abc
4/api/http://127.0.0.1:8080/xxxapihttp://127.0.0.1:8080/xxxapiabc
5/apihttp://127.0.0.1:8080/http://127.0.0.1:8080//abc
6/apihttp://127.0.0.1:8080http://127.0.0.1:8080/api/abc

因此,根据实际情况,一般使用第3种或者第6种写法,特此记录,以供参考!

<think>我们正在讨论Nginxproxy_pass配置,特别是如何正确设置以避免405错误等问题。 根据之前的对话,用户遇到了405错误,并且我们提供了一些Nginx配置示例。现在用户直接询问proxy_pass的配置方法。 因此,我们需要详细解释proxy_pass的用法,并提供配置示例。 注意:回答末尾必须按照要求输出3-5个相关问题,且第一行必须是"§§相关问题§§"。 </think>### Nginx `proxy_pass` 配置详解 #### 核心配置语法 ```nginx location /path/ { proxy_pass http://backend_server; } ``` - **`location`**:定义匹配的 URL 路径 - **`proxy_pass`**:指定后端服务地址(IP/域名 + 端口) --- #### 基础配置示例 **1. 反向代理到本地服务** ```nginx location /api/ { proxy_pass http://localhost:3000; # 转发到本机3000端口 } ``` **2. 代理到外部服务** ```nginx location /static/ { proxy_pass http://cdn.example.com; # 转发到外部CDN proxy_set_header Host $host; # 保留原始主机头 } ``` **3. 路径重写场景** ```nginx location /v1/ { proxy_pass http://backend/newapi/; # 自动追加/newapi/ } location /v2/ { proxy_pass http://backend; # 不修改路径 } ``` --- #### 高级配置参数 ```nginx location / { proxy_pass http://backend; # 超时控制 proxy_connect_timeout 5s; proxy_read_timeout 30s; # 头部转发 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 缓冲区优化 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 32k; # 错误处理 proxy_intercept_errors on; error_page 502 503 /maintenance.html; } ``` --- #### 常见场景解决方案 **1. WebSocket 代理** ```nginx location /ws/ { proxy_pass http://websocket_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ``` **2. HTTPS 后端服务** ```nginx location /secure/ { proxy_pass https://secure-backend; proxy_ssl_verify off; # 生产环境应启用验证 proxy_ssl_server_name on; } ``` **3. 负载均衡** ```nginx upstream backend_cluster { server 10.0.0.1:8000 weight=5; server 10.0.0.2:8000; server backup.example.com:8000 backup; } location / { proxy_pass http://backend_cluster; } ``` --- #### 调试命令 ```bash # 检查配置语法 nginx -t # 查看实际生效配置 nginx -T # 测试代理连接 curl -v http://nginx-host/proxy_path ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值