反向代理基本配置项
poxy_pass
poxy_pass URL;
将请求反向代理到指定的 URL,URL 可以是主机名或 IP : port 形式 也可以是 UNIX 句柄,看也可以使用 upstream 块。
配置块:location、if
默认情况下反向代理是不会转发请求中的 Host 头部。如果要转发必须加上配置:
proxy_set_header Host $host;
proxy_method
proxy_method method;
此配置相表示转发时的协议方法名,例如 method
设置为 POST
时 客户端发来的 GET
请求在转发时方法名也会改为 POST
配置块:http、server、location
proxy_hide_header
proxy_hide_header the_header;
在转发上游服务器响应给客户端时,默认不会转发以下 HTTP 头部字段:Date
Server
X-Pad
X-Accel-*
,proxy_hide_header
可以指定哪些 HTTP 头部字段不能被转发。
配置块:http、server、location
proxy_pass_header
proxy_pass_header the_header;
通过原先禁止的 HTTP 头部字段
配置块:http、server、location
proxy_pass_request_body
proxy_pass_request_body on | off;
是否发送 HTTP 包体部分
配置块:http、server、location
proxy_pass_request_headers
proxy_pass_request_headers on | off;
是否发送 HTTP 头部
配置块:http、server、location
proxy_redirect
proxy_redirect default | off | redirect replacement;
-
default
:表示默认的重定向行为,将后端服务器返回的响应头中的重定向 URL 从后端服务器的地址改为代理服务器的地址。 -
off
:表示禁用重定向。 -
redirect replacement
:用于自定义重定向规则,replacement
是一个替换模式,用于指定如何替换重定向 URL。
配置块:http、server、location
Example
-
自定义重定向规则:
proxy_redirect http://backend_server/ http://frontend_server/;
这个配置将会将后端服务器地址
http://backend_server/
替换为前端服务器地址http://frontend_server/
。 -
处理 HTTPS 重定向:
proxy_redirect http://backend_server/ https://frontend_server/;
proxy_next_upstream
proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off;
proxy_next_upstream
指令用于指定在与后端服务器通信的过程中发生错误时 Nginx 应该尝试的下一个后端服务器。通常在使用反向代理时,当与当前后端服务器的连接出现问题时,Nginx 可以尝试连接到下一个后端服务器。
配置块:http、server、location
Example
-
默认配置:
proxy_next_upstream error timeout;
这个配置表示当与后端服务器的连接发生错误或超时时,Nginx 将尝试连接下一个后端服务器。
-
禁用重试:
proxy_next_upstream off;
这个配置将禁用在与后端服务器通信过程中的重试机制,即不会尝试连接下一个后端服务器。
-
特定状态码重试:
proxy_next_upstream http_500 http_502 http_503 http_504;
这个配置表示当后端服务器返回 HTTP 状态码为 500、502、503、504 时,Nginx 将尝试连接下一个后端服务器。
Example
基本反向代理配置:
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; } }
在这个配置中,所有来自 example.com
的请求都会被反向代理到 http://backend_server
。
反向代理指定路径:
server { listen 80; server_name example.com; location /app { proxy_pass http://backend_server; } }
这个配置将只会将 example.com/app
下的请求反向代理到 http://backend_server
,其他请求将不会被代理。
反向代理配置HTTPS:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; location / { proxy_pass https://backend_server; proxy_ssl_verify off; # 关闭对后端服务器证书的验证 } }
这个配置示例将会使用 HTTPS 反向代理请求到 https://backend_server
,并关闭了对后端服务器证书的验证。
设置反向代理的请求头:
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
这个配置中,通过 proxy_set_header
指令设置了一系列的请求头,将客户端的一些信息传递给后端服务器,这在某些情况下是有用的。