Nginx极客时间:用Nginx搭建一个具备缓存功能的反向代理服务
作者:互联网
0. 一个具备 缓存功能的 反向代理服务器配置文件实例:
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream local {
server 127.0.0.1:8000;
}
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
liten 192.168.0.100:8001;
location / {
proxy_pass http://local;
#proxy_set_header (field) (value);
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-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;
}
}
}
在前面一节《用Nginx搭建静态资源Web服务器》的基础上,再用Nginx搭建一个反向代理服务器。
先把前面一节的静态资源Web服务器 改造为 “上游服务器”,而上游服务器通常是不支持通过公网访问的,只能通过反向代理服务器内部访问。
改造方式也很简单,只需要将 静态资源web服务器的监听IP地址改为 127.0.0.1 :
# 上游服务器(静态资源web服务器):
server {
listen 127.0.0.1:8000;
}
1. upstream:配置反向代理服务器:
http {
upstream local { # 一批上游服务器 命名 : local
server 127.0.0.1:8000; # 一台上游服务器
}
server {
location / {
proxy_pass http://local;
}
}
}
2. proxy_set_header:将浏览器客户端的网络地址信息转发给上游服务器:
当加入了反向代理之后,上游静态资源服务器在默认情况下是无法拿到浏览器客户端的IP地址和域名等信息的,因为上游服务器与反向代理服务器之间、反向代理服务器与浏览器客户端之间 是两条独立的TCP连接,此时如果上游服务器需要对不同的浏览器客户端进行限速等操作时就无法实现。
解决方法是反向代理服务器在转发客户端请求时再附加上一些字段,将浏览器客户端的IP地址等信息传递给上游静态资源服务器。
通过 proxy_set_header
操作:
server {
location / {
# proxy_set_header (field) (value);
proxy_set_header Host $host; # 在向上游服务器 http://local 转发请求时,打上浏览器客户端的host域名
proxy_set_header X-Real-IP $remote_addr; # 打上浏览器客户端的IP地址($remote_addr是反向代理服务器拿到的浏览器客户端的IP地址)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://local;
}
}
3. proxy_cache:开启Nginx反向代理服务的缓存功能:
在Nginx的官网中可以查看到 ngx_http_proxy_module 模块的介绍,其中有一项功能非常重要:proxy_cache (缓存)。
一般情况下,只有动态请求(不同的用户访问同一个URL得到的结果是不同的)Nginx才会从上游服务器上访问资源。
对于静态请求,Nginx一般是会缓存在本地上一段时间(例如一天),当有用户访问此资源时,就直接返回Nginx上缓存的资源。
因为Nginx的性能远远领先于上游服务器的性能,所以使用 proxy_cache
特性,对于一些小的站点会有非常大的性能提升。
如何开启 proxy_cache 缓存功能:
http {
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 命令设置 cache缓存路径及其他缓存参数。例如存储路径为 /tmp/nginxcache,开辟共享内存my_cache等
server {
location / {
proxy_cache my_cache; # my_cache 是上文中通过proxy_cache_path命令开辟的一块共享内存,用于存储缓存
proxy_cache_key $host$uri$is_args$args; # 设置参数,例如浏览器客户端的域名、uri、一些参数
proxy_cache_valid 200 304 302 1d; # 设置对于哪些响应不返回
proxy_pass http://local;
}
}
}
此时即使停掉 上游资源服务器,客户端仍然可以正常访问这个资源,因为已经在反向代理服务器缓存了。
标签:极客,代理服务,cache,代理服务器,Nginx,缓存,proxy,服务器,客户端 来源: https://blog.csdn.net/ArtAndLife/article/details/113842733