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 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
解析php如何将日志写进syslog
Jun 28 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
PHP开发注意事项总结
Feb 04 PHP
PHP单例模式详细介绍
Jul 01 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
学习PHP Cookie处理函数
Aug 09 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 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
jsPDF导出pdf示例
2014/05/02 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python抓取网页中链接的静态图片
2018/01/29 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python保留小数位的三种实现方法
2020/01/07 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
北承题目(C++)
2012/05/16 面试题
民主评议政风行风整改方案
2014/09/17 职场文书
2014年幼师工作总结
2014/11/22 职场文书
七年级语文教学反思
2016/03/03 职场文书
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python