分享好友 最新资讯首页 最新资讯分类 切换频道
Nginx之反向代理配置(二)
2024-11-18 14:35

  前文我们聊了Nginx的防盗链、反向代理以及开启nginx代理缓存,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12417130.html;今天我们继续说nginx的反向代理,上一篇主要就说了下nginx反向代理http协议的使用,被代理RUL包含和不包含RUI的处理逻辑;我们可以把这种前后端都用同样的协议理解为同构代理,就是说前端用户访问nginx是http或https协议,代理服务器访问后端的真正提供服务的服务器也是基于http协议,这种前后端都是使用同一种协议,我们就说这是同构;同理有同构就有异构,异构就是前后端使用的协议不同,比如前端用户使用http或https协议,代理和后端服务器使用fastcgi协议,这种就叫异构;互联网上绝大部分网站都不是纯html静态网页,很多网站都是有自己的应用服务器,比如,我们用户访问的数据是需要一段脚本,或者某一程序执行后的数据,那么我们就把后面需要执行脚本的服务器叫应用服务器;nginx作为web服务器它虽然有很多功能,但是它自己没有执行某些脚本的能力比如php脚本,通俗的讲,nginx只可以处理静态文本,不能自己执行php脚本(需借助其他应用服务器),它和httpd类似,httpd还可以动态的加载php模块,让其拥有执行php脚本的能力,nginx没有,为了实现这样的功能,nginx就支持通过fastcgi协议向后端代理客户端请求一个自己不能处理的资源;当然类似的协议还有很多比如,scgi、uwsgi等等;像这种异构的架构上,它的原理是这样的,客户端请求某一脚本资源,比如,index.php这个文件,如果我们不把用户的请求代理到后端应用服务器上,客户端看到的数据是index.php里的脚本内容,这显然是不合情理的;那怎么办呢?通常情况我们需要在nginx服务器上配置,用户访问某某.php结尾的URL时,我们就让它干嘛干嘛,通过这种匹配用户的URL去做代理,把用户的请求代理到后端服务器,让后端应用服务器把脚本执行完,然后把执行后的数据返回给代理,再由代理响应给客户端;如果是后端应用服务器需要某些数据,需要到数据库里去拿数据,很可能应用服务器此时还会扮演客户端角色,通过某种协议去数据库拿数据;我们可以看到最终我们用户看到的网页里的内容,它来自很多服务器,所以说一个动态网站上由很多台服务器共同完成一个处理请求的结果,我们可以理解成,每个服务器处理自己擅长的事务,分工合作,最后把处理好的数据由代理响应给客户端;

Nginx之反向代理配置(二)

  ngx_http_fastcgi_module:此模块实现了nginx允许将用户请求代理至fastcgi 服务器

    1、fastcgi_pass address:设置fastcgi服务器的地址,此地址可以是IP加端口的形式,也可以是域名或者UNIX域套接字路径;此选项可用于location 和if in location 配置段中

  示例

  提示:以上配置意思是,通过fastcgi协议反代本机的9000端口上的服务响应;

  提示:以上表示设置fastcgi地址是本机/tmp/fastcgi.socket文件;

  2、fastcgi_index name;设置fastcgi的默认主页资源名称;此指令可用于http、server、location配置段中

  3、fastcgi_param parameter value [if_not_empty]:设置一个参数,用于传递给后端fastcgi服务器,参数的值可以是文本,变量,或者二者的组合。

  示例

  提示:以上配置表示把SCRIPT_FILENAME等于/home/www/scripts/php$fastcgi_script_name传递给fastcgi服务器,$fastcgi_script_name表示用户请求的脚本名称;意思是告诉fastcgi服务器该把那个脚本执行了返回给客户端(这里的客户端通常指代理服务器)

  提示:我们知道一个脚本传递不同的参数,执行的结果就会不同;以上配置表示把请求的脚本的参数通过QUERY_STRING变量保存,并传递给后端fastcgi服务器,让其运行某脚本时,把QUERY_STRING保存的值作为参数传递给脚本;当然我们向后端传递的东西很多,不便一一写出来,也不太可能一一写到配置文件中,在nginx的配置目录里有一个文件,专门存放nginx上的变量对应后端fastcgi服务器上的变量的一个配置文件fastcgi.conf  通常我们把这个配置文件用include指令来导入到我们需要定义nginx变量通过fastcgi变量传递给fastcgi服务器;

  示例

  提示:以上配置表示匹配用户URI,如果用户URI是以.php结尾的,就通过fastcgi协议代理至本机的127.0.0.1:9000端口进行处理(执行),fastcgi服务器默认主页资源名叫index.php,并告诉fastcgi服务器到/usr/share/nginx/html/下去找用户请求的资源脚本,如果还有其他参数和指令要传递,就使用/etc/nginx/fastcgi_params中的定义来把nginx的变量保存的值传递给后端fastcgi服务器,以上是反代动态php网页的配置示例,有了以上配置 nginx就可以作为代理服务器响应客户端请求动态脚本php的能力了;

  提示:在上面配置前需要先安装好php-fpm,安装好后需要更改/etc/php-fpm.d/www.conf里的user 和group,通常情况要看前端代理是用那个用户启动的,我们后端就用那个用户启动即可,我们前端代理商nginx,这里需要更改成nginx即可,这样修改后,保存配置,然后启动php-fpm,然后在本机就可以看到127.0.0.1:9000就处于监听状态了;以上配置表示用户请求.php结尾的资源都反代至127.0.01:9000进行处理;并且明确说明了后端fastcgi主页资源名称为index.php,后端应用服务器的根路径为/app/php_scripts;fastcgi_param  SCRIPT_FILENAME /app/php_scripts$fastcgi_script_name同nginx里的root alias指令的作用相同,指定用户访问的URI对应磁盘上的路径,相当于指定后端fastcgi服务器的工作目录吧;

Nginx之反向代理配置(二)

  提示:可以看到我们访问test.php是能够被php-fpm服务器执行并返回执行后的结果;

  4、fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];此指令同proxy_cache_path一样,作用定义fastcgi的代理缓存;其中levels表示定义缓存目录的级别,最多3级,每级最多2个字符;keys_zone=name:size表示k/v映射的内存空间的名称及大小;inactive=time表示非活动时长;max_size=size表示指定磁盘上用于缓存路径的存放缓存的空间上限;

  5、fastcgi_cache zone |off;调用指定的缓存空间来缓存数据;可用于http,server,location配置段中

  6、fastcgi_cache_key string;定义用作缓存项的key的字符串;

  7、fastcgi_cache_methods GET|HEAD|POST ……;定义那些请求方法使用缓存;默认是GET和HEAD

  8、fastcgi_cache_min_uses number;定义缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可被认为活动的缓存项,不被清理;

  9、fastcgi_cache_valid[code] tiem;设定不同的响应码各自缓存的时长;

  10、fastcgi_keep_conn on | off;:设置是否保持连接,

  示例

Nginx之反向代理配置(二)

   提示:在定义缓存空间时,必须要在http配置段定义,以上表示定义一个fastcgi的缓存空间,其名称为php_cache,在内存中使用10m的空间,在物理磁盘上的路径为/cache/proxy/php-fpm/目录下,最大空间为2g;

Nginx之反向代理配置(二)

   提示:以上配置表示使用fastcgi的缓存空间php_cache,缓存key为$request_uri,就是把用户请求的uri hash作为缓存路由,什么意思呢,就是nginx查找缓存是通过hash什么来查找缓存的,上面的配置就是定义nginx把用户请求的URI作为hash对象;对用户请求用的方法是GET 或HEAD方法时,使用缓存;缓存最小命中次数为3次,也就说在非活动时长内,该缓存项命中次数小于3次就会被认为该缓存是无效的,在下次检查缓存的有效性,就会被清理;对响应码是200 或302的资源缓存15分钟,对404响应码的资源缓存1分钟;开启和后端的fastcgi服务器的长连接;

Nginx之反向代理配置(二)

  提示:可以看到我们访问test.php页面时,在我们定义的缓存空间里生成了缓存,但是我们访问了test.php这一个页面,为什么会缓存三项呢?其实我们可以打开浏览器的web开发者模式,查看它请求和响应的情况

Nginx之反向代理配置(二)

   提示:可以看到我们访问test.php这个页面,其背后是3次请求,所以我们在缓存空间里看到有三条缓存项,其实缓存空间里的缓存项每一个缓存项就代表一个缓存资源,我们是可以通过cat命令查看缓存项里的内容的;如下

Nginx之反向代理配置(二)

   提示:我们可以看到里面的缓存项纪录的信息,其中有一项KEY 就是我们指定的fastcgi_cache_key 说指定变量的值;我们查看缓存项里的内容很可能出现乱码,原因是缓存的内容有二进制,或者其他字符编码的内容;

最新文章
影响亚马逊排名的因素有哪些?
很多跨境卖家对亚马逊的排名一无所知。事实上,只要知道影响排名的因素,对于如何提升排名就有了一个大概的方向和体系。影响搜索
AI 春节掘金 6.0 超强进化版震撼来袭!聚焦爆款动图桌面、壁纸、屏保素材领域,借助 AI 智能一键创作神器,春节期间开启轻松躺赚模式。每日仅需投入轻松十分钟,即可月入 1W+,畅享智能创作带来的财
重要声明本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。本站一切资源不代表本站立场,并不代表本站赞同其观点和
Ubuntu
Ubuntu叫法很多(乌班图、优班图、友帮拓),因为笔者打算学习Django,所以安装Ubuntu进行学习。本次会
十大电脑视频剪辑软件排名 视频剪辑软件哪个好
坦率地说,视频正日益成为社交媒体和营销的重要组成部分。越来越多的人参与视频编辑,其中最关键的是视频编辑软件。而市场上的视
Optimizing Website Keywords for Improved SEO Performance
Abstra: Optimizing website keywords is a crucial aspe of improving SEO performance. By strategically choosing and implem
org域名代表什么 org域名是什么网站
域名是网站的标识,一个简单易记的域名可以让访问者更容易记住您的网站。网站域名后缀有很多,比如常见的.org、.com、.net等国际
全方位解析热门话题:深入探讨用户最关心的热点问题与解决方案
随着人工智能技术的发展其在医疗领域的应用日益广泛。算法可以在短时间内分析大量病例数据,辅助医生实行精准诊断,升级治疗效果
【增长】机构:预计2024年Mini LED背光产品出货增长至1379万台;天钰:AMOLED驱动芯片将于2024年Q2量产;大尺寸LCD/OLED面板供需情况改善
1.机构:预计2024年Mini LED背光产品出货增长至1379万台2.天钰:AMOLED驱动芯片将于2024年Q2量产3.京东方终止云南OLED项目10亿元
2025年百度广告投放最新实战指南
在数字化营销日益重要的今天,百度广告投放已成为众多企业推广品牌、吸引潜在客户的重要手段。然而,随着市场竞争的加剧,如何高
SEO优化站长如何提高搜索排名
在当今竞争激烈的数字市场中,提升网站的搜索排名是每位站长的主要目标。通过有效的SEO策略,不仅可以提高网站的可见性,还能吸