分享好友 最新资讯首页 最新资讯分类 切换频道
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 说指定变量的值;我们查看缓存项里的内容很可能出现乱码,原因是缓存的内容有二进制,或者其他字符编码的内容;

最新文章
聚焦 | 为校园公众号“降温”
本刊记者李薇薇随着信息化时代的到来,在微信公众号上发布校园新闻、展示学校动态,成为不少学校的宣传“标配”。然而,从今年上
宝塔搭建GPT+MJ+GPTs程序
目录准备 1.云服务器 2.支持ChatGPT+Midjourney的服务的秘钥 需要准备的软件(能进行ssh连接的都行) Windows版
异构计算+高性能低功耗NPU,高通正在推动终端侧生成式AI发展
9月6日,2024全球AI芯片峰会在北京召开。全球AI芯片峰会至今已成功举办六届,现已成为国内规模最大、规格最高、影响力最强的产业
均安SEO优化攻略,揭秘全方位网站排名提升秘诀
均安SEO优化策略,全方位提升网站排名秘诀:优化关键词、提高内容质量、加强外链建设、优化网站结构、提升用户体验。通过这些方
北交所科技成长产业跟踪第三期:华为Mate品牌盛典发布鸿蒙AI新品,关注北交所鸿蒙%26星闪相关公司.pdfVIP
源引金融活水润泽中华大地内容目录1.华为Mate品牌盛典如期举行,多款AI终端亮相51.1.Mate70蕴含九大AI功能,MateX6首发星闪关机
一、智能创作平台的全方位解决方案
在数字化时代的浪潮中内容创作已成为企业竞争和塑造的核心环节。传统的内容创作方法往往耗时耗力,且难以保证内容的品质和一致性
【GPT-4】GPT-4 是否已经显示出通用人工智能的迹象?——微软已经为 OpenAI 的 GPT-4 创建了一系列测试,它声称表明人工智能模型已经显示出通用智能的“火花”
目录 GPT-4 是否已经显示出通用人工智能的迹象? Is GPT-4 already showing signs of artificial general intelligence? "We bel
惠普和rog哪个好(6000买惠普还是华硕)
在操作系统选择方面,ROGGU604和HP暗影精灵9/光精灵9均支持流行的Windows和Linux系统,提供灵活的使用环境。 ROGGU604 的快速充
【HM1SUC浏览器下载】小米HM1SUC浏览器17.1.6.1347免费下载
UC专注16年,成就全球第三方手机浏览器全球6亿人上网必备APP,群众的眼睛是雪亮的头条视频小说网盘小游戏,想你之所想一应俱全UC
如何有效获取视频号微信搜索流量(实用技巧,让你的视频号获得更多关注)
视频号微信已经成为了许多人获取流量的何有号获平台、随着社交媒体的效获发展。如何让自己的取视视频号在微信搜索中获得更多的流