当前位置: 代码网 > 服务器>服务器>缓存 > Nginx反向代理与缓存用法及说明

Nginx反向代理与缓存用法及说明

2026年04月16日 缓存 我要评论
一、正向代理和反向代理1.1 正向代理(代理的是客户端)是什么:就像一个中间人,帮你(客户端)去访问你想去的网站。有啥用:让局域网里的电脑能上网。可以缓存一些数据,省流量。访问那些被墙了或者限制地区的

一、正向代理和反向代理

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:连续失败几次就认为服务器挂了,过多久再去检查它有没有恢复。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com