Nginx-模块-ngx_http_proxy_module【反向代理】
1、proxy_pass【指定代理的服务器】
Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except # 例如: proxy_pass http://localhost:8000/uri/; proxy_pass http://unix:/tmp/backend.socket:/uri/;
2、proxy_set_header 【设置代理转发请求头】
2.1、语法
Syntax: proxy_set_header field value;
Default:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
# 示例
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
2.2、Host-请求头
proxy_set_header Host $proxy_host;
$proxy_host # 代理主机名
$http_host # 用户端传什么,直接转发,不做修改
$host # 服务器的主机名
2.3、客户端请求真实IP地址
# 将$remote_addr的值放进变量x-Real-IP中,$remote_addr的值为客户端的ip proxy_set_header X-Real-IP $remote_addr; # 客户端通过代理服务访问后端服务,后端服务会通过该变量会记录真实客户端地址,$remote_addr==$proxy_add_x_forwarded_for proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3、proxy_http_version【http版本设置】
Syntax: proxy_http_version 1.0 | 1.1; Default: proxy_http_version 1.0; Context: http, server, location # 该指令在1.1.4版本才有 代理的向后端请求时使用的HTTP协议版本。默认1.0版本。
如果使用长连接,建议调整为1.1版本协议。
4、代理到后端的TCP连接、响应、返回等超时时间
4.1、proxy_connect_timeout【设置后端/上游服务器建立连接的超时时间】
# nginx代理与后端服务器连接超时时间(代理连接超时) Syntax: proxy_connect_timeout time; Default: proxy_connect_timeout 60s; Context: http, server, location
4.2、proxy_read_timeout【设置从后端/上游服务器读取响应的超时时间】
# 设置从后端/上游服务器读取响应的超时时间 Syntax: proxy_read_timeout time; Default: proxy_read_timeout 60s; Context: http, server, location
4.3、proxy_send_timeout【设置从后端/上游服务器发送的超时时间】
# 设置从后端/上游服务器发送的超时时间 Syntax: proxy_send_timeout time; Default: proxy_send_timeout 60s; Context: http, server, location
5、proxy_buffer代理缓冲区
5.1、proxy_buffering【开启/关闭缓冲区】
Syntax: proxy_buffering on | off; Default: proxy_buffering on; Context: http, server, location 1、启用缓冲时,nginx代理服务器将尽快的接收响应Header以及响应报文,并将其保存到proxy_buffer_size(Headers)和proxy_buffers(data)设置的缓冲区中。 2、如果响应报文过大无法存储至内存,则会将其中部分保存到磁盘上的临时文件中。 写入临时文件由proxy_temp_path(控制临时存储目录) proxy_max_temp_file_size(控制临时存储目录大小)和proxy_temp_file_write_size (控制一次写入临时文件的数据大小),
临时文件最大大小由proxy_buffer_size和proxy_buffers限制。但当禁用缓冲时,nginx代理服务器会在接收到响应时立即同步传递给客户端。nginx代理服务器不会读取整个响应。
5.2、proxy_buffer_size【设置Header的缓冲区大小】
Syntax: proxy_buffer_size size; Default: proxy_buffer_size 4k|8k; Context: http, server, location # 用于控制代理服务读取后端第一部分响应Header的缓冲区大小。
5.3、proxy_buffers 【代理服务器为单个连接设置响应缓冲区:数量和大小】
Syntax: proxy_buffers number size; Default: proxy_buffers 8 4k|8k; Context: http, server, location proxy_buffers是代理服务器为单个连接设置响应缓冲区“数量”和“大小”。 如果一个后端服务所返回的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到proxy_temp_path
指定的路径中。但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。
所以这个值一般建议设置为站点响应所产生的页面大小中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
6、生产使用include引用【优化配置】
cat >/etc/nginx/proxy_params<<'EOF' proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffering on; proxy_buffer_size 64k; proxy_buffers 4 64k; EOF