Nginx(2)-创建具有缓存功能的反向代理服务器

承接上一篇文章,在本文中,将上文中的静态资源服务器作为上游服务器,另外搭建一台 Nginx 服务器,作为反向代理服务器。

配置反向代理服务器

上游服务器处理的业务逻辑相对复杂,而且强调开发效率,所以它的性能并不优秀,使用 nginx 作为反向代理后,可以将请求将根据负载均衡算法,分散到多台上游(后端)服务器,这样就实现了架构上的水平扩展,让用户无感知的情况下,添加更多的服务器,来提升性能,即使后端的服务器出现问题,nginx反向代理服务器会转交给正常工作的服务器。

Nginx(2)-创建具有缓存功能的反向代理服务器

一般情况下,上游服务器不对外提供访问,修改的方法是,将 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;
        }

Nginx(2)-创建具有缓存功能的反向代理服务器

配置缓存服务器

通常只有动态请求,也就是不同的用户访问同一个 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 等。

相关推荐