承接上一篇文章,在本文中,将上文中的静态资源服务器作为上游服务器,另外搭建一台 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。
下面是关于缓存的配置文件节选:
...
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 等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。