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

 更新时间:2026年04月15日 16:27:32   作者:东北甜妹  
文章主要介绍了正向代理和反向代理的概念、用途及其配置方法,反向代理包括负载均衡、缓存、动静分离等功能,并详细介绍了配置思路和具体配置方法,最后,文章提供了配置实战示例,帮助读者更好地理解和应用这些知识

一、正向代理和反向代理

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • windows下快速安装nginx并配置开机自启动的方法

    windows下快速安装nginx并配置开机自启动的方法

    这篇文章主要介绍了windows下快速安装nginx 并配置开机自启动的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Nginx首页修改及使用Nginx实现端口转发

    Nginx首页修改及使用Nginx实现端口转发

    本文介绍了如何使用nginx将80端口转发到CTF靶场的8000端口,包括nginx的安装、启动、首页修改及nginx.conf的端口转发配置,帮助用户通过IP或域名直接访问靶场
    2025-10-10
  • nginx修改上传文件大小限制的方法

    nginx修改上传文件大小限制的方法

    本篇文章主要介绍了nginx修改上传文件大小限制的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-12-12
  • nginx配置proxy_pass后返回404问题以及Nginx host相关变量的说明

    nginx配置proxy_pass后返回404问题以及Nginx host相关变量的说明

    这篇文章主要介绍了nginx配置proxy_pass后返回404问题以及Nginx host相关变量的说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Nginx + lua 实现WAF的详细过程

    Nginx + lua 实现WAF的详细过程

    这篇文章主要介绍了Nginx + lua 实现WAF的详细过程,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • nginx反向代理java项目方式

    nginx反向代理java项目方式

    文章简要介绍了如何使用Nginx作为反向代理来部署Java项目,核心在于配置proxy_pass指令
    2024-12-12
  • Nginx使用自签ssl证书实现https连接的方法

    Nginx使用自签ssl证书实现https连接的方法

    本文主要介绍了Nginx使用自签ssl证书实现https连接的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Nginx服务LNMP之WordPress部署流程步骤

    Nginx服务LNMP之WordPress部署流程步骤

    这篇文章主要为大家介绍了Nginx服务LNMP之WordPress部署流程步骤,本实验意在部署过程,使用单机版部署,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • Nginx实现404页面的几种方法(三种)

    Nginx实现404页面的几种方法(三种)

    一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有些相关配置方法,下面小编给大家带来了Nginx实现404页面的几种方法,感兴趣的朋友一起看看吧
    2018-08-08
  • 一文带你搞懂Nginx中的配置文件

    一文带你搞懂Nginx中的配置文件

    Nginx(发音为“engine-x”)是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何配置 Nginx 以满足不同的需求吧
    2025-01-01

最新评论