用Nginx搭建具备缓存功能的反向代理服务
什么是反向代理
我们平时说的代理就是正向代理,隐藏的是客户端,服务端不知道真实的客户端是谁,客户端请求的服务都通过代理服务器来代替,然后由代理服务器把请求返回的相应结构再返回给真正的客户端。那么反向代理隐藏的是真实的服务端,客户端发出的请求,并不知道是哪台服务器在提供服务。
可以去知乎上看这个问题,解释的十分清楚: https://www.zhihu.com/question/24723688
配置上游服务
继续使用上一篇Nginx搭建静态资源Web服务器与GoAccess日志可视化中的资源和配置,将这个nginx作为上游服务器,需要在nginx.conf
中做一下修改,将listen
处修改为127.0.0.1:8080
,注释掉server_name
,表示只能本机访问8080端口。
1 | server { |
重启nginx:
1 | nginx -s stop |
我是使用虚拟机搭建的环境,这个时候只能在虚拟机内部访问8080端口了。
反向代理服务器
反向代理同样也是在一个虚拟机中,使用openresty采用不同的端口来搭建,关于openresty的安装我之前记录在从Hello World初识OpenResty
在openresty的nginx配置目录中做一些修改,增加upstream等信息:
1 | upstream local { |
通过设置proxy_set_header的相关参数,可以将相关信息传递到上游服务器,在上游服务器和代理服务器中的host.access.log
文件都可以看到。
关于proxy_set_header
的解释可以在官方文档中找到:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
配置完毕后重启一下:
1 | openresty -p `pwd` -c conf/nginx.conf -s reload |
此时可以成功访问192.168.199.107:8000
端口,在控制台中也可以看到提供服务的是openresty。

配置缓存
在配置文件中增加proxy_cache_path
和proxy_cache
参数:
1 | proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; |
proxy_cache_path的参数解释:
1)用户缓存的本地磁盘目录是/tmp/nginxcache;
2)levels在/tmp/nginxcache设置了一个两级层次结构的目录,如果levels参数没有配置,则nginx会将所有的文件放到同一个目录中;
3)keys_zone设置一个共享内存区,该内存区用于存储缓存键和元数据;
4)max_size设置了缓存的上限;
5)inactive指定了项目在不被访问的情况下能够在内存中保持的时间。像上面的配置,如果一个文件在60分钟之内没有被请求,则缓存管理将会自动将其在内存中删除,不管该文件是否过期;
6)use_temp_path=off命令会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储。
具体的参数解释在官方文档:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_key
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid
重启openresty并且关闭上游nginx,现在只有openresty的nginx在运行:
1 | ps -ef | grep nginx |
这个时候我们仍然可以成功访问8000端口看到dlib的文档,此时的状态码是304:

那么搭建具备缓存功能的反向代理服务的学习到这就先结束啦。