反向代理
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
头信息
因为经过代理后,后端服务无法获取到客户端的真实 ip,所以在请求头设置客户端的 ip 地址等信息。
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
超时
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
重定向
Syntax: proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location
缓冲区
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
去除匹配路径
使用nginx做反向代理的时候,通过设置proxy_pass可以简单的直接把请求原封不动的转发给下一个服务。
但有时我们想匹配请求路径A,让请求转发到路径B上面,比如:localhost/user/1
,我想把路径转变为 localhost/users/1,proxy_pass 需要如下设置:
location /user/ {
proxy_pass http://localhost/users/;
}
注意上面proxy_pass的配置,users 后面必须有 /
,明确地要移除 location
匹配路径 user
。如果 users 后面没有 /
,同样会移除 user 路径,但是最后的请求路径会变为:localhost/users1。相当于 /user/
路径替换到了 /users/
路径。
但更通常的做法是将 /user/
路径移除(即替换成 /
)。这样我们就可以向外面提供统一的端口,只是根据路径去决定请求的具体位置。如下所示:
location /user/ {
proxy_pass http://localhost:8999/;
}
示例:
location /idea/ {
proxy_pass http://127.0.0.1:1017/;
proxy_redirect default;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
}