反向代理
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;}
