本文编写于 1201 天前,最后修改于 1201 天前,其中某些信息可能已经过时。
示例
header部分是必加的
server{
listen 80;
server_name jsocn.com;
location / {
proxy_pass http://10.0.0.7; # 将http请求代理传送到10.0.0.7
proxy_http_version 1.1; #http协议设置为1.1
proxy_connect_timeout 120s; #代理服务器向后端请求http时,超时时间设置为120秒,默认60秒
proxy_read_timeout 60s;# 建立连接以后,60秒内后端没有响应header,则超时
proxy_send_timeout 60s; #60秒内没有将数据传送完,则超时,往往生产环境会调至600s
proxy_set_header Host $http_host; #代理服务器转发http请求时携带Host变量为www.jsocn.com
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #代理服务器向后端转发时,携带真实的客户机IP,通过nginx log可看到
proxy_set_header Connection ""; #自定义设置头部,将connection设置为空,可使http连接设置为长链接
proxy_buffering on; #打开代理缓存,
proxy_buffer_size 8k;#将header缓存到代理服务器上的内存中
proxy_buffers 4 64k;#将data缓存到代理服务器上的内存中
}
}
参数详解
proxy_set_header
# 添加发往后端服务器的请求头信息,
Syntax: proxy_set_header field value; Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection
Context: http, server, location
# 客户端请求Host的值是www.jsocn.net,那么代理服务会像后端请求时携带Host变量为www.jsocn.net
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中, $remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 这种方式已经弃用了,因为需要在后端服务器也需要在配置文件中定义X-Real-Ip这个变量
# 客户端通过代理服务访问后端服务,后端服务会通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version
# 代理的向后端请求时使用的HTTP协议版本。默认1.0版本
Syntax: proxy_http_version 1.0 | 1.1; Default: proxy_http_version 1.0;
Context: http, server, location
This directive appeared in version 1.1.4
proxy_connect_timeout
# nginx代理与后端服务器 "连接超时" 时间(代理连接超 时)
Syntax: proxy_connect_timeout time; Default: proxy_connect_timeout 60s; Context: http, server, location
proxy_read_timeout
# nginx代理等待后端服务器 "响应(Header)超时" 时 间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s; Context: http, server, location
proxy_send_timeout
#后端服务器 "数据(Data)回传给nginx代理超时" 时 间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
proxy_buffer(缓冲区)
1)启用缓冲时, nginx代理服务器将尽快的接收响应Header以及响应报文,并将其保存到 proxy_buffer_size(Headers) 和 proxy_buffers(data) 设置的缓冲区中。
# proxy_buffer代理缓冲区
Syntax: proxy_buffering on | off; Default: proxy_buffering on; Context: http, server, location
如果响应报文过大无法存储至内存,则会将其中部分保存到磁盘上的临时文件中。写入临时文件由proxy_temp_path (控制临时存储目录)proxy_max_temp_file_size (控制临时存储目录大 小) 和 proxy_temp_file_write_size(控制一次写 入临时文件的数据大小),临时文件最大大小由proxy_buffer_size 和 proxy_buffers 限制。但当禁 用缓冲时, nginx 代理服务器会在接收到响应时立即同 步传递给客户端。 nginx 代理服务器不会读取整个响应。
2) proxy_buffer_size 用于控制代理服务读取后端第 一部分响应 Header 的缓冲区大小。
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
# proxy_buffer_size 64k;
3) proxy_buffers 是代理服务器为单个连接设置响应 缓冲区 “数量” 和 “大小”。 如果一个后端服务所返回的页面大小为 256KB ,那么会为其分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到proxy_temp_path 指定的路径中。但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。所以这个值一般建议设置为站点响应所产生的页面大小中间值,如果站点大部分脚本所产生的页面大小为 256KB ,那么 可以把这个值设置为 “16 16k”、“4 64k” 等。
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
#proxy_buffers 4 64k;
代理参数总结
# 代理网站常用优化配置如下,将配置写入一个新文件,调 用时使用include即可
vim /etc/nginx/proxy_params
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 30;proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
# 使用include方式,便于后续Location的重复使用。
location / {
proxy_pass http://10.0.0.7:
include proxy_params; #相对路径,proxy_params在/etc/nginx/下
}
location / {
proxy_pass http://10.0.0.8:
include proxy_params;
}