资讯专栏INFORMATION COLUMN

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

BakerJ / 1400人阅读

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

承接上一篇文章,在本文中,将上文中的静态资源服务器作为上游服务器,另外搭建一台 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 等。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/62072.html

相关文章

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

    摘要:承接上一篇文章,在本文中,将上文中的静态资源服务器作为上游服务器,另外搭建一台服务器,作为反向代理服务器。 承接上一篇文章,在本文中,将上文中的静态资源服务器作为上游服务器,另外搭建一台 Nginx 服务器,作为反向代理服务器。 配置反向代理服务器 上游服务器处理的业务逻辑相对复杂,而且强调开发效率,所以它的性能并不优秀,使用 nginx 作为反向代理后,可以将请求将根据负载均衡算法,...

    LoftySoul 评论0 收藏0
  • 【译】Ngnix实现一个缓存和缩略处理反向代理务器

    摘要:我觉得结合的反向代理,缓存和图像过滤处理三大模块来为我托管在上的图片来创建一个缩略图服务器会很优雅。后者将作为的反向代理,产生并提供调整大小后的图像。它返回有效的响应,缓存服务器将缓存该响应天,其它任何东西都只缓存秒。 一两个月前,我决定从我的站点中移除Varnish ,并用Nginx内置的缓存系统替代它。我本来已经在我的python站点上用了nginx来反向代理,所以摆脱Varnis...

    bergwhite 评论0 收藏0
  • 【译】Ngnix实现一个缓存和缩略处理反向代理务器

    摘要:我觉得结合的反向代理,缓存和图像过滤处理三大模块来为我托管在上的图片来创建一个缩略图服务器会很优雅。后者将作为的反向代理,产生并提供调整大小后的图像。它返回有效的响应,缓存服务器将缓存该响应天,其它任何东西都只缓存秒。 一两个月前,我决定从我的站点中移除Varnish ,并用Nginx内置的缓存系统替代它。我本来已经在我的python站点上用了nginx来反向代理,所以摆脱Varnis...

    big_cat 评论0 收藏0

发表评论

0条评论

BakerJ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<