Nginx(2)-创建具有缓存功能的反向代理服务器
承接上一篇文章,在本文中,将上文中的静态资源服务器作为上游服务器,另外搭建一台 Nginx 服务器,作为反向代理服务器。
配置反向代理服务器
上游服务器处理的业务逻辑相对复杂,而且强调开发效率,所以它的性能并不优秀,使用 nginx 作为反向代理后,可以将请求将根据负载均衡算法,分散到多台上游(后端)服务器,这样就实现了架构上的水平扩展,让用户无感知的情况下,添加更多的服务器,来提升性能,即使后端的服务器出现问题,nginx反向代理服务器会转交给正常工作的服务器。
一般情况下,上游服务器不对外提供访问,修改的方法是,将 server 配置块中的 listen 配置项修改为内部网络地址,修改配置文件后,重启nginx 进程,目的是防止之前打开的端口仍然可以使用。
Nginx实现反向代理的功能由 ngx_http_proxy_module 实现,下面是配置示例:
location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; #当后端还有虚拟主机时,应该返回正确的网页,而不是用户请求不用的 host 都返回相同的内容 proxy_set_header X-Real-IP $remote_addr; }
当用户请求"/"的所有 URL请求,都转交配置文件中proxy_pass指定的后端服务器,同时还设置了向后端生成请求报文时新的 header,如定义Host 将用户请求的 host 定义在 header 中,定义 X-Real-IP客户端的 IP 地址。
... upstream webdlib{ #定义上游服务器群组,并自定义名称为 webdlib server 172.16.240.140:8080; #上游服务器群组的服务器列表,多台服务器可以选择负载均衡算法 } server { listen 80 server_name _; ... ... location / { proxy_pass http://172.16.240.140:8080; #设置上游服务器地址 proxy_set_header Host $host; #添加请求首部 host 名称,由上游服务器处理 host 请求 proxy_set_header X-Real-IP $remote_addr; #添加客户端真实 IP 地址 proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; }
配置缓存服务器
通常只有动态请求,也就是不同的用户访问同一个 url内容不相同时,请求才会交由上游处理,在页面中,一部分内容在一段时间不会发生变化,为了减轻上游服务器的压力,将上游服务器返回的内容,缓存在反向代理服务器中保存一段时间,如几个小时或一天,在缓存时间内,即使上游服务器内容发生变化,也会被忽视,将缓存的内容向浏览器发送。使用缓存会提供站点的响应性能。
首先要在 http 配置块下,使用proxy_cache_path定义缓存文件的路径、文件命名方式、命名共享内存及共享内存的空间大小等信息,如proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
缓存的使用方法则是,在需要进行缓存url 路径下,添加 proxy_cache、proxy_cache_key、proxy_cache_valid。
- proxy_cache my_cache:指定缓存共享内存的命名
- proxy_cahce_key $host$uri$is_args$args:在共享内存中设置的 key 的值,这里将 host,uri 等作为 key 值
- Proxy_cache_valid 200 304 302 1d :指定的响应不返回缓存
下面是关于缓存的配置文件节选:
... http { ... proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; ... server { ... location / { proxy_pass http://172.16.240.140:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_cache my_cache; proxy_cache_key $host$uri$is_args$args; proxy_cache_valid 200 304 302 1d; } } }
总结
首先配置反向代理服务器,需要使用 proxy_pass设置上游服务地址、使用 proxy_set_header设置向后端发送请求的 header诸如客户端的 IP 地址、请求的 host。
配置缓存服务器,首先要设置缓存的名称,内存空间名称等信息,然后在需要进行缓存的 URL 路径下,启用缓存,进行缓存的设置诸如缓存的名称、缓存的 key 等。