Nginx反向代理与缓存用法及说明
一、正向代理和反向代理
1.1 正向代理(代理的是客户端)
是什么:
- 就像一个中间人,帮你(客户端)去访问你想去的网站。
有啥用:
让局域网里的电脑能上网。
可以缓存一些数据,省流量。
访问那些被墙了或者限制地区的网站。
隐藏你的真实 IP,对方看到的是代理服务器的 IP。
配置思路:
- 客户端访问代理服务器,代理服务器再去请求目标网站。
1.2 反向代理(代理的是服务器)
是什么:
你访问一个网站,其实访问的是代理服务器,它再偷偷去背后真正的服务器拿数据给你。你完全不知道背后是哪台服务器。
有啥用:
负载均衡:把很多人的请求分散到多台服务器上,防止一台服务器累垮。
缓存:把不常变的图片、页面存起来,下次直接给你,更快。
动静分离:把图片、CSS 等静态文件和需要计算的动态页面(比如 PHP)分开处理。
多站点共用端口:
一台服务器可以代理多个不同的网站。
常用模块:
proxy_module(转发HTTP请求)、upstream_module(定义服务器组)、stream_proxy_module(转发TCP请求)等。
二、反向代理的核心配置
proxy_pass:最重要的一句,告诉 Nginx 把请求转发给谁。
如果地址后面没有斜杠(/),会把客户端请求的路径拼在后面。
如果地址后面有斜杠(/),会替换掉客户端请求的路径。
如果
location用了正则表达式匹配,proxy_pass后面不能加斜杠。
其他小功能:
proxy_hide_header:不让后端服务器的某些头部信息(比如服务器版本)透传给客户端。proxy_pass_header:强制让后端服务器的某些头部信息透传给客户端。proxy_pass_request_body/headers:控制是否把客户端的请求体和头部转发给后端(默认都转发)。
三、配置实战(举例子)
3.1 最简单的反向代理
目标:访问代理服务器(192.164.65.100),实际看到的是后端服务器(192.164.65.101)上的网站内容。
操作:在代理服务器的配置里写一句
proxy_pass http://192.164.65.101;就行了。
3.2 动静分离
目标:请求
/api开头的地址,转发给动态服务器(101);请求/static开头的地址,转发给静态服务器(103)。操作:配置两个
location,分别指向不同的后端服务器。
3.3 缓存功能
目标:把后端返回的图片、页面存到代理服务器本地,下次有人要,直接给,不用再去麻烦后端。
操作:
- 先在
http块里用proxy_cache_path定义一个缓存目录和规则(比如放哪儿,多大,存多久)。 - 再在
server或location里用proxy_cache开启缓存,用proxy_cache_valid设置哪些状态码的响应需要缓存多久。 清缓存:直接删缓存文件夹,或者用专门的模块。
3.4 客户端 IP 透传(让后端知道谁在访问)
问题:用了代理后,后端服务器看到的都是代理服务器的 IP,不知道真正的用户是谁。
一级代理:在代理服务器配置里加一句
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,把用户的真实 IP 塞进请求头里传给后端。多级代理:每一级代理都这么配置,
X-Forwarded-For这个头就会把经过的所有 IP 都记录下来,像一个链路清单。
3.5 & 3.6 负载均衡
是什么:把请求分给一组服务器(上游服务器组)去处理。
怎么配:
- 先用
upstream定义一个服务器组,把多台后端服务器的 IP 列进去。 - 然后在
location里用proxy_pass http://组名;把请求交给这个组处理。
调度算法(怎么分任务):
- 轮询:一人一个,轮流来。
- 加权轮询:性能好的多分几个任务(
weight=3),性能差的少分几个(weight=1)。 - ip_hash:同一个 IP 的人,每次都分给同一台服务器(解决登录状态丢失问题)。
- least_conn:谁当前处理的连接少,就分给谁。
- 第三方算法:
fair(谁反应快分给谁)、url_hash(同一个网址分给同一台服务器,适合做缓存)。
服务器状态:
down:标记为下线。backup:备胎服务器,其他主服务器都挂了才启用。max_fails和fail_timeout:连续失败几次就认为服务器挂了,过多久再去检查它有没有恢复。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
nginx配置proxy_pass后返回404问题以及Nginx host相关变量的说明
这篇文章主要介绍了nginx配置proxy_pass后返回404问题以及Nginx host相关变量的说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01


最新评论