php模式-Nginx

1-1:Nginx + PHP + FastCGI 加速模式

第二步:nginx会根据用户访问的URI和后缀来判断恳求

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

root@json:/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;
    }

}

.php用户

访问索引,它将匹配 location~.php$,这意味着用户通过 URI 访问的资源与可分辨大小匹配php模式,并且访问的资源是.php。

nginx根据用户请求的资源匹配具体位置后,会执行该位置对应的动作php模式,该位置中动作的含义为:

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

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

fastcgi_pass127.0.0.1:9000;# 表示 nginx 将用户请求的资源发送到 127.0.0.1:9000 进行fastcgi_pass解析,其中 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 脚本解析服务器的包装器

第 5 步:在 Wrapper 收到来自 PHP-FPM 的请求后,Wrapper 会生成一个新线程来调用 PHP 动态程序解析服务器

如果用户请求读取 MySQL 数据库,将触发读取操作;

如果用户请求图像/附件,PHP 会触发对前端存储服务器的查询,例如通过 NFS 存储的存储集群;

第 6 步:PHP 会将查询结果返回给 nginx

步骤7:nginx构造响应包,将结果返回给用户

这只是nginx之一,用户的恳求和返回用户的请求结果是异步的,即为用户请求的资源在nginx中传输,并且nginx

可以同步,即对于解析后的资源,服务端直接将资源返回给用户,而不在nginx中进行传输。

二、相关疑惑

1. 用户每次请求动态资源时,是否需要触发完整的动态资源解析过程?

不,有两种方法可以解决此问题:首先,启用nginx

本身的缓存功能,缓存动态资源分析结果,用户最后一次访问对应的资源时,nginx执行此缓存查询,如果查询成功,动态资源直接解析后的静态资源将返回给用户;

其次,部署缓存

nginx前端的机器,比如部署清漆缓存集群,缓存资源,用户请求的资源可以先在缓存集群上搜索;

2. 使用 nginx 进行缓存是否可行?纵观实际情况,如果在整个 Web 架构中,nginx 不是进退两难的,nginx 可以作为缓存,不建议这样做,因为 nginx 是用户恳求和回答用户请求的唯一方式,如果 nginx 有两难境地,前端其他如存储集群性能也没用, 所以在实际部署中,不建议启用 nginx 的缓存功能(在 nginx 作为 httpserver 的情况下)。由于启用了nginx缓存功能,nginx的性能将得到提升,并且将消耗nginx中部署的相应服务器的硬件资源。

3. 假设你用一个图来表示nginxfastcgiwrapperphp之间的关系

4. 到底什么是快速CGI

CGI 代表 CommmonGatewayInterface

thinkphp 和 laravel 的区别

主要区别:(thinkPHP更适合中国人的编码习惯)

1、渲染模板的不同方法:

在Laravel框架中,使用returnview()来渲染模板;

在ThinkPHP中,$this->display()方法用于渲染模板;

2.在Laravel框架中,由于考虑到跨站请求伪造,如果使用form表单以post的形式传值,如果不在表单中添加{{csrf_field()}}表单中,TokenMethodnotfound语句会报类型错误;

TP框架需要自动补全代码,避免跨站攻击;

3. Laravel 是一个重路由框架(5.4)。 所有功能均由路由发起。 即使没有控制器方法,也只有写完路由后才能访问。 thinkPHP(3.2)必须有一个控制器方法才能正常工作。 使用权;

4. Laravel 拥有强大的社区扩展(composer 扩展手动加载);

5.Laravel拥有强大的Blade模板引擎;

6.中间件,Laravel特性,可以实现访问前后的处理,如请求与返回、授权认证等;

7、条件判断句书面形式的差异:

在Laravel框架中,ifelse判断语句和foreach语句必须以@if开头,以@endif结束。 如果没有语句类型错误php区别,@foreach@endforeach是一样的;

TP框架与PHP语句规则的使用一致,直接ifesle语句判断和foreach循环遍历

Laravel 有大量的外部方法供开发者使用。 在实际应用中,更接近“让对象做一切”的开发思想。 例如,在后台验证表单时php区别,Laravel 有大量的外部验证方法,例如对于用户名的验证:我们使用 'username'=>'required' (不能为空)|alpha_dash (必须是数字,字母和逗号)| Between: 6,18(多少位数字之间)可以在validate方法中使用; 设置email;same:数组名;diff:数组名等大量方法大大提升了开发速度;

加密方法在TP框架中,我们使用md5(); 方法对用户名和密码进行加密,但是md5的缺点是可以被反向破解,并且在相同的规则下,相同密码的md5加密后的字符串是有效的。 同样的情况也可能发生,这增加了其安全性;

但 Laravel 框架外部安装了“hash”Hash 加密双向加密方式,同一个参数加密的字符串绝不会出现相同的情况,增强了安全性;

在实际开发中,我们经常会遇到这样的问题,那就是开发位置不固定,导致我们频繁修改数据库配置,给开发工作带来麻烦,TP依然没有避免这场“灾难”; 在 laravel 框架中 .env 环境文件的出现解决了这个麻烦。 我们只需要在不同的工作场所配置.env文件,不需要再次配置,因为无论是git还是svn“.env都不会与文件一起提交到服务器的”;

本文来自ThinkPHP框架技术文章专栏: