Nginx-模块-ngx_http_proxy_module【反向代理】

Nginx-学习目录

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

 

posted @ 2023-04-30 18:21  小粉优化大师  阅读(206)  评论(0编辑  收藏  举报