广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Nginx+PHP+FastCGI加速模式怎么实现
  • 292
分享到

Nginx+PHP+FastCGI加速模式怎么实现

2024-04-02 19:04:59 292人浏览 薄情痞子
摘要

本篇内容介绍了“Nginx+PHP+FastCGI加速模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

本篇内容介绍了“Nginx+PHP+FastCGI加速模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、用户对动态php网页访问过程

用户浏览器发起对网页的访问:Http://192.168.1.103/index.php

用户和nginx服务器进行三次握手进行tcp连接(忽略包括nginx访问控制策略、nginx防火墙等访问控制策略)

第一步:用户将http请求发送给nginx服务器

第二步:nginx会根据用户访问的URI和后缀对请求进行判断

1.例如用户访问的index.php,nginx则会根据配置文件中的location进行匹配,例如:

[email protected]:/data/WEB# cat /etc/nginx/conf.d/blog.conf  server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } }

用户访问的是index.php,则会匹配到location ~ \.php$,这个的含义是对用户通过URI访问的资源进行区分大小的匹配,并且访问的资源是以.php结尾的。

nginx根据用户请求的资源匹配到具体的location后,会执行location对应的动作,location中动作的含义是:

include /etc/nginx/fastcgi_params; #表示nginx会调用fastcgi这个接口

fastcgi_intercept_errors on; #表示开启fastcgi的中断和错误信息记录

fastcgi_pass 127.0.0.1:9000; # 表示nginx通过fastcgi_pass将用户请求的资源发给127.0.0.1:9000进行解析,这里的nginx和php脚本解析服务器是在同一台机器上,所以127.0.0.1:9000表示的就是本地的php脚本解析服务器。

根据nginx服务器的配置,可以看出,用户访问的是动态的php资源,nginx会调用php相关脚本解析程序对用户访问的资源进行解析。

第三步:通过第二步可以看出,用户请求的是动态内容,nginx会将请求交给fastcgi客户端,通过fastcgi_pass将用户的请求发送给php-fpm

如果用户访问的是静态资源呢,那就简单了,nginx直接将用户请求的静态资源返回给用户。

第四步:fastcgi_pass将动态资源交给php-fpm后,php-fpm会将资源转给php脚本解析服务器的wrapper

Nginx+PHP+FastCGI加速模式怎么实现

 Nginx+PHP+FastCGI加速模式怎么实现

第五步:wrapper收到php-fpm转过来的请求后,wrapper会生成一个新的线程调用php动态程序解析服务器

如果用户请求的是需要读取例如Mysql数据库等,将会触发读库操作;

如果用户请求的是如图片/附件等,PHP会触发一次查询后端存储服务器如通过NFS进行存储的存储集群;

第六步:php会将查询到的结果返回给nginx

第七步:nginx构造一个响应报文将结果返回给用户

这只是nginx的其中一种,用户请求的和返回用户请求结果是异步进行,即为用户请求的资源在nginx中做了一次中转,nginx可以同步,即为解析出来的资源,服务器直接将资源返回给用户,不用在nginx中做一次中转。

二、相关疑问

1.是不是每次用户对动态资源的请求都需要触发一次完整的动态资源解析过程?

不是,可以有两种方法解决这个问题:

第一,启用nginx本身具备的缓存功能,将动态资源解析结果缓存起来,下次用户进行对应资源访问时,nginx进行本次缓存查询,如果查询成功,则直接动态资源被解析后的静态资源返回给用户;

第二,在nginx后端部署缓存机器,如部署varnish缓存集群,对资源进行缓存,用户请求的资源,可以先在缓存集群上进行查找;

2.用nginx做缓存是否可行?看实际情况,如果在整个web架构中,nginx不是瓶颈的前提下,nginx可以用来做缓存,但是不建议这么做,因为nginx是用户请求和应答用户请求的必经之路,如果nginx出现了瓶颈,后端的其他如存储集群等性能再好也没用,所以在实际的部署中,不建议启用nginx的缓存功能(在将nginx作为http server的情况下)。因为启用nginx缓存功能,一是会降低nginx性能,二是会消耗部署nginx的对应服务器的硬件资源。

3.如果用一张图表示nginx fastcgi wrapper php之间的关系

Nginx+PHP+FastCGI加速模式怎么实现

4.fastcgi具体是个什么东西

CGI全称通用网关接口 Commmon Gateway Interface

用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上。

传统CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序需要重启解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发时,几乎是不可能的,因此诞生了FastCGI。另外传统的CGI接口方式安全性也很差

一个可伸缩地。高速地在HTTP服务器和动态脚本语言间通信的接口

接口在linux下是Socket(这个socket可以是文件socket也可以是ip socket)

主要优点把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FsatCGI包括Apache/Nginx/lighttpd等

支持语言比较流行的是PHP,接口方式采用C/S架构,可以将HTTP服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。

当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

5.具体的nginx + php的nginx相关配置

[email protected]:/data/web# cat /etc/nginx/nginx.conf|egrep -v "#|^$" user www-data; worker_processes 4; pid /var/run/nginx.pid; events {     worker_connections 768; } http {     sendfile on;     tcp_nopush on;     tcp_nodelay on;     keepalive_timeout 65;     types_hash_max_size 2048;     include /etc/nginx/mime.types;     default_type application/octet-stream;     access_log /var/log/nginx/access.log;     error_log /var/log/nginx/error.log;     gzip on;     gzip_disable "msie6";     include /etc/nginx/conf.d/*.conf;     include /etc/nginx/sites-enabled/*; } [email protected]:/data/web#
[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         #include /usr/local/etc/nginx/fastcgi.conf;         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } } [email protected]:/data/web#

“Nginx+PHP+FastCGI加速模式怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Nginx+PHP+FastCGI加速模式怎么实现

本文链接: https://www.lsjlt.com/news/93677.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Nginx+PHP+FastCGI加速模式怎么实现
    本篇内容介绍了“Nginx+PHP+FastCGI加速模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
  • php单例模式怎么实现
    PHP单例模式可以通过以下步骤实现:1. 创建一个类,并将构造函数设为私有,以防止外部直接实例化该类。2. 在类内部创建一个静态私有...
    99+
    2023-09-29
    php
  • 怎么实现php策略模式
    小编给大家分享一下怎么实现php策略模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 策略模式:就是把算法和对象分离...
    99+
    2022-10-19
  • PHP设计模式之工厂模式怎么实现
    在PHP中,工厂模式可以通过以下步骤来实现:1. 创建一个接口或抽象类,定义工厂所要创建的对象的公共方法。```phpinterfa...
    99+
    2023-08-14
    PHP
  • 怎么在php中实现CGI模式
    这期内容当中小编将会给大家带来有关怎么在php中实现CGI模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、说明是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据...
    99+
    2023-06-15
  • PHP设计模式之解释器模式怎么实现
    这篇文章主要介绍“PHP设计模式之解释器模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP设计模式之解释器模式怎么实现”文章能帮助大家解决问题。解释器模式(Interpreter Pa...
    99+
    2023-07-05
  • PHP设计模式之中介者模式怎么实现
    这篇“PHP设计模式之中介者模式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP设计模式之中介者模式怎么实现”文...
    99+
    2023-07-05
  • PHP结构型模式之享元模式怎么实现
    这篇文章主要讲解了“PHP结构型模式之享元模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP结构型模式之享元模式怎么实现”吧!享元模式(Flyweight Pattern)是什...
    99+
    2023-07-05
  • PHP结构型模式之外观模式怎么实现
    这篇文章主要讲解了“PHP结构型模式之外观模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP结构型模式之外观模式怎么实现”吧!外观模式(Facade Pattern)是什么外观...
    99+
    2023-07-05
  • PHP结构型模式之组合模式怎么实现
    今天小编给大家分享一下PHP结构型模式之组合模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。组合模式(Compos...
    99+
    2023-07-05
  • PHP设计模式之观察者模式怎么实现
    这篇文章主要介绍“PHP设计模式之观察者模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP设计模式之观察者模式怎么实现”文章能帮助大家解决问题。PHP观察者模式(Observer Pa...
    99+
    2023-07-05
  • PHP设计模式之迭代器模式怎么实现
    本篇内容主要讲解“PHP设计模式之迭代器模式怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP设计模式之迭代器模式怎么实现”吧!迭代器模式迭代器模式(Iterator Pattern)...
    99+
    2023-07-05
  • PHP结构型模式之代理模式怎么实现
    这篇文章主要讲解了“PHP结构型模式之代理模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP结构型模式之代理模式怎么实现”吧!代理模式的优点代理模式可以保护原对象,控制对原对象...
    99+
    2023-07-05
  • Nginx隐藏式跳转怎么实现
    这篇文章主要介绍“Nginx隐藏式跳转怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Nginx隐藏式跳转怎么实现”文章能帮助大家解决问题。Nginx的隐藏式跳转可以实现将请求跳转到另一个网站...
    99+
    2023-06-29
  • PHP结构型模式之装饰器模式怎么实现
    今天小编给大家分享一下PHP结构型模式之装饰器模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。装饰器模式(Deco...
    99+
    2023-07-05
  • PHP行为设计模式之策略模式怎么实现
    这篇“PHP行为设计模式之策略模式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP行为设计模式之策略模式怎么实现...
    99+
    2023-07-06
  • PHP行为型模式之责任链模式怎么实现
    本篇内容介绍了“PHP行为型模式之责任链模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言责任链模式(Chain of Resp...
    99+
    2023-07-05
  • PHP中怎么实现访问者模式
    PHP中怎么实现访问者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Gof类图及解释GoF定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提...
    99+
    2023-06-20
  • CDN怎么实现网络加速
    这篇文章主要为大家展示了“CDN怎么实现网络加速”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CDN怎么实现网络加速”这篇文章吧。CDN全称是Content Delivery Network,其...
    99+
    2023-06-28
  • nginx中怎么实现一个事件模块
    nginx中怎么实现一个事件模块,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. ngx_events_block()----events配置块解析  &...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作