Nginx+php配置文件及原理解析


Posted in PHP onDecember 09, 2020

采用nginx+PHP作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。这一步对新手而言一般需要网上查资料,对于一般的熟手而言,也有不少同学并没有搞透彻为何要如此这般配置。本文的主要内容为如何在nginx server中正确配置php调用方法,以及配置的基本原理。

一、nginx+php运行原理:

首先简单的讲一讲原理,目前主流的nginx+php的运行原理如下:

1、nginx的worker进程直接管理每一个请求到nginx的网络请求。

2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。

3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令 netstat -nlpt|grep php-fpm 会得到:

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1057/php-fpm

这里的127.0.0.1:9000 就是监听本机9000端口的意思。

4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种:fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

我们可以打开fastcgi_parames文件加上上述行,也可以在要使用配置的地方动态添加。使得该配置生效。

5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php。
了解了上面的这五个简单原理,在nginx中配置php调用方法就变得易如反掌。

二、配置文件:

直接贴上代码逐行进行讲解,此处贴出一个能正常启动php脚本的最简nginx vhost配置:

server { 
  listen    8011; 
  server_name test.cn; 
  location ~ \.php?.*$ { 
    root      /share/test; 
    fastcgi_pass  127.0.0.1:9000; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include    fastcgi_params; 
  } 
}

1、第一个大括号 server{ }:不必多说,代表一个独立的server,

2、listen 8011:代表该server监听8011端口

3、location ~ \.php?.*${ }:代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请求,例如:http://192.168.244.128:8011/test.php/asdasd http://192.168.244.128:8011/index.php等

4、root /share/test:请求资源根目录,告诉匹配到该location下的uri到/share/teset文件夹下去寻找同名资源。

5、fastcgi_pass 127.0.0.1:9000:这行开始是本文的重点:这行代码的意思是,将进入到该location内的uri请求看做是cgi程序,并将请求发送到9000端口,交由php-fpm处理。

6、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; :这行配置意思是:动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,告知管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具体值,就必须要动态的添加这行配置。

7、include fastcgi_params; 引入fastcgi配置文件

以上就是最简洁版的nginx启动php脚本的最简配置,当重启nginx之后,在/share/test目录下创建一个xx.php文件,输入<?php echo "hello world"; ?>保存,然后在浏览器中访问localhost:8011/xx.php 就可以在网页上显示hello world了。

三、总结:

其实对于调用php这类cgi脚本程序,只要理解了我开头提到的5点原理,然后结合5-7行配置讲解,完全可以较清晰的明白为什么需要这样配置了。对于新手而言,往往被fastcgi,php-fpm cgi程序搞得一头雾水,胡乱配置已通,跑通上线,也不去深究其原理。所以希望写在这里的东西能对读者带来一点点的帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
php数组删除元素示例
Mar 21 PHP
php图像处理类实例
Jul 28 PHP
php判断当前操作系统类型
Oct 28 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
分析php://output和php://stdout的区别
May 06 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 #PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 #PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 #PHP
PHP大文件分割分片上传实现代码
Dec 09 #PHP
PHP rsa加密解密算法原理解析
Dec 09 #PHP
PHP如何解决微信文章图片防盗链
Dec 09 #PHP
PHP sdk文档处理常用代码示例解析
Dec 09 #PHP
You might like
PHP循环结构实例讲解
2014/02/10 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP实现搜索相似图片
2015/09/22 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python实现处理管道的方法
2015/06/04 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python: 传递列表副本方式
2019/12/19 Python
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
培训主管岗位职责
2014/02/01 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
银行贷款收入证明
2014/10/17 职场文书
业务员岗位职责
2015/02/03 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
全国助残日活动总结
2015/05/11 职场文书
遗嘱格式范本
2015/08/07 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
python自动化之如何利用allure生成测试报告
2021/05/02 Python
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
mysql数据库隔离级别详解
2022/06/16 MySQL