一:nginx proxy设置代理
代理的模块式:ngx_http_proxy_module
代理
Syntax: proxy_pass URL; 代理的后端服务器URL
Default: —
Context: location, if in location, limit_except缓冲区
Syntax: proxy_buffering on | off;
Default: proxy_buffering on; 缓冲开关
Context: http, server, location
proxy_buffering开启的情况下,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端
(边收边传,不是全部接收完再传给客户端)。Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k; 缓冲区大小
Context: http, server, locationSyntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k; 缓冲区数量
Context: http, server, locationSyntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k; 忙碌的缓冲区大小,控制同时传递给客户端的buffer数量
Context: http, server, location头信息
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host; 设置真实客户端地址
proxy_set_header Connection close;
Context: http, server, location超时
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s; 链接超时
Context: http, server, locationSyntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, locationSyntax: proxy_send_timeout time;nginx进程向fastcgi进程发送request的整个过程的超时时间
Default: proxy_send_timeout 60s;
Context: http, server, location
启用代理,环境两台nginx真实服务器
1 nginx-1 启动网站(内容) ;nginx-1的IP:192.168.100.10 ;
yum install -y nginx
systemctl start nginx
echo "my name is dabai" > /usr/share/nginx/html/index.html
2 nginx-2 启动代理程序 ;nginx-2的IP:192.168.100.20
yum install -y nginx systemctl start nginx vim /etc/nginx/conf.d/default.conf location / { ..... proxy_pass http://192.168.100.10:80; proxy_redirect default; 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 32k; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; }
proxy_pass :真实服务器
proxy_redirect :如果真实服务器使用的是真实IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP :启用客户端真实地址(否则日志中显示的是代理在访问网站)
proxy_set_header X-Forwarded-For:记录代理地址proxy_connect_timeout::后端服务器连接的超时时间_发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接proxy_buffering on;开启缓存
proxy_buffer_size:proxy_buffer_size只是响应头的缓冲区
proxy_buffers 4 128k; 内容缓冲区域大小
proxy_busy_buffers_size 256k; 从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方
proxy_max_temp_file_size 256k;超大的响应头存储成文件。3:访问nginx-2服务器地址
4 观察nginx-1服务器的日志
二:Proxy缓存
1 延续代理实验
1 延续代理实验
vim /etc/nginx/conf.d/default.conf
http {
... #这里是原有的配置内容
proxy_cache_path /app/qianfeng/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
... #这里是原有的配置内容
}
proxy_cache_path命令中的参数及对应配置说明如下:
1.用于缓存的本地磁盘目录是/app/tianyun.me/cache
2.levels在/app/tianyun.me/cache/设置了一个两级层次结构的目录。将大量的文件放置在单个目录中会导致文件访问缓慢,所以针对大多数部署,我们推荐使用两级目录层次结构。如果levels参数没有配置,则NGINX会将所有的文件放到同一个目录中。
3.keys_zone设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使NGINX在不检索磁盘的情况下快速决定一个请求是`HIT`还是`MISS`,这样大大提高了检索速度。一个1MB的内存空间可以存储大约8000个key,那么上面配置的10MB内存空间可以存储差不多80000个key。
4.max_size设置了缓存的上限(在上面的例子中是10G)。这是一个可选项;如果不指定具体值,那就是允许缓存不断增长,占用所有可用的磁盘空间。当缓存达到这个上线,处理器便调用cache manager来移除最近最少被使用的文件,这样把缓存的空间降低至这个限制之下。
5.inactive指定了项目在不被访问的情况下能够在内存中保持的时间。在上面的例子中,如果一个文件在60分钟之内没有被请求,则缓存管理将会自动将其在内存中删除,不管该文件是否过期。该参数默认值为10分钟(10m)。注意,非活动内容有别于过期内容。NGINX不会自动删除由缓存控制头部指定的过期内容(本例中Cache-Control:max-age=120)。过期内容只有在inactive指定时间内没有被访问的情况下才会被删除。如果过期内容被访问了,那么NGINX就会将其从原服务器上刷新,并更新对应的inactive计时器。
6.NGINX最初会将注定写入缓存的文件先放入一个临时存储区域, use_temp_path=off命令指示NGINX将在缓存这些文件时将它们写入同一个目录下。我们强烈建议你将参数设置为off来避免在文件系统中不必要的数据拷贝。use_temp_path在NGINX1.7版本和NGINX Plus R6中有所介绍。
location / {
... #这里是原有的配置内容
proxy_cache proxy_cache; #Proxy_cache 使用名为 的对应缓存配置
proxy_cache_valid 200 304 12h; #proxy_cache_valid 200 206 304 301 302 12h; 对httpcode为200…的缓存12小时
proxy_cache_valid any 10m; #proxy_cache_valid 设置不同相应码的缓存时间,除了上面的,其他的的存10分钟
proxy_cache_key $host$uri$is_args$args; #proxy_cache_key $uri 定义缓存唯一key,通过唯一key来进行hash存取
add_header Nginx-Cache "$upstream_cache_status"; #add_header:缓存命中情况如何在http头中体现,以及在nginx日志中查看
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # proxy_next_upstream 出现502-504或错误,会跳过此台服务器访问下一台服务器
... #这里是原有的配置内容
}
mkdir -p /app/qianfeng/cache #准备缓存文件的存放目录
systemctl restart nginx # 重启服务器
再次访问nginx-2服务器
通过PC客户机浏览器开发者功能。观察是否命中缓存。