反向代理

  1. Syntax: proxy_pass URL;
  2. Default:
  3. Context: location, if in location, limit_except

头信息

因为经过代理后,后端服务无法获取到客户端的真实 ip,所以在请求头设置客户端的 ip 地址等信息。

  1. Syntax: proxy_set_header field value;
  2. Default: proxy_set_header Host $proxy_host;
  3. proxy_set_header Connection close;
  4. Context: http, server, location

超时

  1. Syntax: proxy_connect_timeout time;
  2. Default: proxy_connect_timeout 60s;
  3. Context: http, server, location

重定向

  1. Syntax: proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;
  2. Default: proxy_redirect default;
  3. Context: http, server, location

缓冲区

  1. Syntax: proxy_buffering on | off;
  2. Default: proxy_buffering on;
  3. Context: http, server, location

去除匹配路径

使用nginx做反向代理的时候,通过设置proxy_pass可以简单的直接把请求原封不动的转发给下一个服务。
但有时我们想匹配请求路径A,让请求转发到路径B上面,比如:localhost/user/1,我想把路径转变为 localhost/users/1,proxy_pass 需要如下设置:

  1. location /user/ {
  2. proxy_pass http://localhost/users/;
  3. }

注意上面proxy_pass的配置,users 后面必须有 /,明确地要移除 location匹配路径 user。如果 users 后面没有 /,同样会移除 user 路径,但是最后的请求路径会变为:localhost/users1。相当于 /user/ 路径替换到了 /users/ 路径。
但更通常的做法是将 /user/ 路径移除(即替换成 /)。这样我们就可以向外面提供统一的端口,只是根据路径去决定请求的具体位置。如下所示:

  1. location /user/ {
  2. proxy_pass http://localhost:8999/;
  3. }

示例:

  1. location /idea/ {
  2. proxy_pass http://127.0.0.1:1017/;
  3. proxy_redirect default;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6. proxy_connect_timeout 30;
  7. proxy_send_timeout 60;
  8. proxy_read_timeout 60;
  9. }