前面学了web资源服务器的搭建,这篇博文就总结一下如何搭建反向代理服务器。
为什么需要反向代理
说了这么多,那么什么是反向代理呢?它有什么用呢?这里推荐一篇微信公众号的文章《如何给女朋友解释什么是反向代理?》
Nginx搭建反向代理服务器
上游服务器
./sbin/nginx -s stop # 停止nginx服务
此时访问Nginx服务器,就会显示无法访问了。
反向代理服务器
扩展一下Nginx的upstream的五种分配方式:
- 轮询
upstream local { server 192.168.1.100:8080; server 192.168.1.200:8080; }
这是upstream默认的分配方式,将请求轮流分配到不同的服务器上。
- 权重
upstream local { server 192.168.1.100 weight=3; server 192.168.1.200 weight=1; }
权重比例大的服务器,接受的请求就多。
- ip_hash
upstream local { ip_hash; server 192.168.1.100:8080; server 192.168.1.200:8080; }
每个请求按照访问ip的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
- fair
upstream local { server 192.168.1.100:8080; server 192.168.1.200:8080; fair; }
按照响应时间短的原则进行服务器的分配。
- url_hash
upstream local { server 192.168.1.100:8080; server 192.168.1.200:8080; hash $request_uri; hash_method crc32; }
按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景。
讲完了第一个部分的配置,接下来就讲第二个矩形框的配置。
proxy_set_header:是Nginx的一个模块。主要作用是,允许重新定义或添加字段传递给代理服务器的请求头。 —— Host $host:$host是直接引用了Nginx的变量,Host是一个变量名。 —— X-Real-IP $remote_addr:设置$remote_addr这个变量,可以让Nginx获得用户的真实ip,X-Real-IP同样是变量名。 —— X-Forwarded-For $proxy_add_x_forwarded_for:这个我也是脑瓜有点疼,没太搞懂。 proxy_pass http://local; 这个配置表示,设置后端代理服务器的地址。这里的local是上面upstream指令块的别名,即引用upstream指令块的地址。
反向代理的配置就讲完了,下面就可以启动代理服务器进行访问了。当我把上游服务器关掉后,再访问,就会报502,无效网关的错误。其实Nginx还支持缓存这一特性。可以将上游服务器返回的内容缓存指定的时间。即使上游服务器挂掉。Nginx的代理服务器依然可以返回响应结果。
具有缓存作用的反向代理服务器
在上面配置的基础上,新增缓存功能。首先在http指令块下新增以下指令
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; # /tmp/nginxcache:表示将Nginx缓存到哪个目录下(首先使用mkdir创建这个文件夹,这个位置是可以指定的)。 # levels:默认所有缓存文件都放在上面指定的根路径中,从而可能影响缓存的性能。推荐指定为2级目录来存储缓存文件。 # key_zone:用于在共享内存中定义一块存储区域来存放缓存的key和metadata。 # max_size:最大的cache空间。 # inactive:内存中缓存的过期检查周期。 # use_temp_path:如果为off,则Nginx会将缓存文件直接写入指定的cache文件中,而不使用temp_path指定的临时存储路径。

设置完了,还要在需要做缓存的url路径下添加以下指令。
proxy_cache my_cache; # my_cache指上面开辟的共享内存。 proxy_cache_key $host$uri$is_args$args; # 增加设置web缓存的key值,指明哪个用户,哪个资源,哪些参数。 proxy_cache_valid 200 304 302 1d; # 对指定的HTTP状态进行缓存,并指定缓存时间。
200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存。此时的数据是缓存到内存中的。 200 from disk cache 不访问服务器,直接读缓存,从磁盘中读取缓存。 304 Not Modified 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。
思考时,要像一位智者;但讲话时,要像一位普通人。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209479.html原文链接:https://javaforall.net
