好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

配置php支持nginx php7 nginx

很多站长朋友们都不太清楚配置php支持nginx,今天小编就来给大家整理配置php支持nginx,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 如何正确配置Nginx + PHP 2、 mac配置php-fpm,nginx运行多版本php 3、 云服务器如何配置nginx支持php? 4、 如何正确配置 Nginx + PHP 5、 如何正确配置Nginx+PHP 6、 如何搭建Nginx+PHP环境 如何正确配置Nginx + PHP

对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴。听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出代价。

假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由。

此时很多教程会教大家这样配置Nginx+PHP:

server {

listen 80;

server_name foo.com;

root /path;

location / {

index index.html index.htm index.php;

if (!-e $request_filename) {

rewrite . /index.php last;

}

}

location ~ .php$ {

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

}

这里面有很多错误,或者说至少是坏味道的地方,大家看看能发现几个。

…

我们有必要先了解一下Nginx配置文件里指令的继承关系:Nginx配置文件分为好多块,常见的从外到内依次是「http」、「server」、「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值(有例外,详见参考)。

参考:UNDERSTANDING THE NGINX CONFIGURATION INHERITANCE MODEL

…

让我们先从「index」指令入手吧,在问题配置中它是在「location」中定义的:

location / {

index index.html index.htm index.php;

}

一旦未来需要加入新的「location」,必然会出现重复定义的「index」指令,这是因为多个「location」是平级的关系,不存在继承,此时应该在「server」里定义「index」,借助继承关系,「index」指令在所有的「location」中都能生效。

参考:Nginx Pitfalls

…

接下来看看「if」指令,说它是大家误解最深的Nginx指令毫不为过:

if (!-e $request_filename) {

rewrite . /index.php last;

}

很多人喜欢用「if」指令做一系列的检查,不过这实际上是「try_files」指令的职责:

try_files $uri $uri/ /index.php;

除此以外,初学者往往会认为「if」指令是内核级的指令,但是实际上它是rewrite模块的一部分,加上Nginx配置实际上是声明式的,而非过程式的,所以当其和非rewrite模块的指令混用时,结果可能会非你所愿。

参考:IfIsEvil and How nginx “location if” works

…

下面看看「fastcgi_params」配置文件:

include fastcgi_params;

Nginx有两份fastcgi配置文件,分别是「fastcgi_params」和「fastcgi.conf」,它们没有太大的差异,唯一的区别是后者比前者多了一行「SCRIPT_FILENAME」的定义:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

注意:$document_root 和 $fastcgi_script_name 之间没有 /。

原本Nginx只有「fastcgi_params」,后来发现很多人在定义「SCRIPT_FILENAME」时使用了硬编码的方式,于是为了规范用法便引入了「fastcgi.conf」。

不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?这是因为「fastcgi_param」指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次「SCRIPT_FILENAME」,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。

参考:FASTCGI_PARAMS VERSUS FASTCGI.CONF – NGINX CONFIG HISTORY

此外,我们还需要考虑一个安全问题:在PHP开启「cgi.fix_pathinfo」的情况下,PHP可能会把错误的文件类型当作PHP文件来解析。如果Nginx和PHP安装在同一台服务器上的话,那么最简单的解决方法是用「try_files」指令做一次过滤:

try_files $uri =404;

参考:Nginx文件类型错误解析漏洞

…

依照前面的分析,给出一份改良后的版本,是不是比开始的版本清爽了很多:

server {

listen 80

server_name foo.com;

root /path;

index index.html index.htm index.php;

location / {

try_files $uri $uri/ /index.php;

}

location ~ .php$ {

try_files $uri =404;

include fastcgi.conf;

fastcgi_pass 127.0.0.1:9000;

}

}

实际上还有一些瑕疵,主要是「try_files」和「fastcgi_split_path_info」不够兼容,虽然能够解决,但方案比较丑陋,具体就不多说了,有兴趣的可以参考问题描述。

补充:因为「location」已经做了限定,所以「fastcgi_index」其实也没有必要.

mac配置php-fpm,nginx运行多版本php

1、brew 安装 php5.6 php5.7 nginx

2、配置php-conf

3、配置虚拟主机

安装好brew

用brew 命令安装,如果速度太慢或访问不了,自行goole brew 换源

brew search php  查看可用的php版本

brew install php@5.6  安装php5.6

brew install php@7.1 安装php5.6

brew install nginx       安装nginx

1、修改php5.6 php-fpm的端口为9056

    cd usr/local/etc/php/5.6 # 到php5.6的目录下

    vi    php-fpm.conf # 修改文件

        listen = 127.0.0.1:9056  # 修改此端口

        daemonize = yes # 修改为允许后台启动php-fpm

2、修改php5.6 php-fpm的端口为9070

    cd /usr/local/etc/php/7.1/php-fpm.d # 到php7.1的目录下

    vi # 修改端口

        listen = 127.0.0.1:9056  # 修改此端口    

    vi    php-fpm.conf  # 修改文件

         daemonize = yes # 修改为允许后台启动php-fpm

3、启动php-fpm

    cd /usr/local/sbin # 到此目录,建立两个软链接指向不同版本的php

切换到root用户

./php-fpm56 

./php-fpm71

启动后可看到php-fpm的进程,则成功

ps-ef | grep php-fpm

cd /usr/local/etc/nginx/  # 到nginx的目录下

复制默认的配置文件到server下(此目录用来存虚拟主机文件)

这里我在server创建了这两个

vi local.phpinfo56.com.conf # 修改本地域名和nginx代理到php-fpm端口,按照这种方法修改另一个

nginx # 启动nginx

nginx -s reload # 修改配置文件,重新加载nginx

vi /etc /hosts  # 修改host 加上映射关系

cd  /usr /local/var/www # 在此目录下建立一个index.php

echo "<?php phpinfo();" > index.php

在浏览器访问可看到

云服务器如何配置nginx支持php?

[root@redhat7 ~]# wget

[root@redhat7 ~]# tar xzvf php-7.1.2.tar.gz

[root@redhat7 ~]# cd php-7.1.2/

[root@redhat7 ~]# ./configure --prefix=/usr/local/php --enable-fpm

[root@redhat7 php-7.1.2]# makemake install

查看是否成功编译安装PHP

[root@redhat7 php-7.1.2]# php -v

PHP 7.1.2 (fpm-fcgi) (built: Apr 14 2017 20:21:53)

Copyright (c) 1997-2017 The PHP Group

Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

编译安装完成后PHP不具备配置文件php.ini,此时只需复制php.ini-production到 /usr/local/lib/php.ini即可,php.ini文件一般在/usr/local/lib/和/etc目录下

[root@localhost php-7.1.2]# cp php.ini-production /usr/local/lib/php.ini

[root@redhat7 php]# /usr/local/php/sbin/php-fpm

[14-Apr-2017 20:59:49] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)

[14-Apr-2017 20:59:49] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'

[14-Apr-2017 20:59:49] ERROR: FPM initialization failed

启动php-fpm发现缺乏配置文件/usr/local/php/etc/php-fpm.conf

此时只需复制php-fpm的配置文件在安装php时提供的配置文件的模版/usr/local/php/etc/php-fpm.conf.default到相应/usr/local/php/etc/php-fpm.conf即可

[root@redhat7 etc]# /usr/local/php/sbin/php-fpm

[14-Apr-2017 21:14:32] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/﹡.conf' from /usr/local/php/etc/php-fpm.conf at line 125.

[14-Apr-2017 21:14:32] ERROR: No pool defined. at least one pool section must be specified in config file

[14-Apr-2017 21:14:32] ERROR: failed to post process the configuration

[14-Apr-2017 21:14:32] ERROR: FPM initialization failed

[root@redhat7 etc]# cp php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

[root@redhat7 etc]# cp /usr/local/php/etc/php-fpm.d/ /usr/local/php/etc/php-fpm.d/

[root@redhat7 etc]# /etc/init.d/php-fpm

[14-Apr-2017 21:23:02] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)

[14-Apr-2017 21:23:02] ERROR: FPM initialization failed

[root@redhat7 etc]# netstat -nldp|grep 9000

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

[root@redhat7 php-7.1.2]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@redhat7 php-7.1.2]# chmod a+x /etc/init.d/php-fpm

[root@redhat7 php-7.1.2]# ll /etc/init.d/php-fpm

-rwxr-xr-x 1 root root 2401 4月 14 21:26 /etc/init.d/php-fpm

[root@redhat7 php-7.1.2]# /etc/init.d/php-fpm start

Starting php-fpm [14-Apr-2017 21:28:09] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)

[14-Apr-2017 21:28:09] ERROR: FPM initialization failed

failed

[root@redhat7 php-7.1.2]# netstat -nldp |grep 9000

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

[root@redhat7 php-7.1.2]# kill 3721

[root@redhat7 php-7.1.2]# netstat -nldp |grep 9000

[root@redhat7 php-7.1.2]# /etc/init.d/php-fpm start

Starting php-fpm done

[root@redhat7 php-7.1.2]# service php-fpm status

php-fpm (pid 3927) is running...

[root@redhat7 php-7.1.2]# chkconfig --add php-fpm

[root@redhat7 php-7.1.2]# chkconfig php-fpm --level 345 on

配置nginx支持PHP

修改nginx的配置文件,支持php文件的解析,找到location的添加位置,在后面添加下面这个location

location ~ .php$ {

root /usr/share/nginx/html; #指定php的根目录

fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

如何正确配置 Nginx + PHP

1. php用php-fpm启动,然后nginx

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

这样就可以了

2.安装一个集成的软件phpstudy

如何正确配置Nginx+PHP

其实没多复杂

1. 将nginx和php都装好了

2. 然后配置nginx,将php请求分发给php-fpm处理

linux下的配置文件一般在/usr/local/nginx/conf/nginx.conf

找到下面字样,并取消注释,且注意这个$document_root这个地方(原本应为$script***的,改成$document_root)

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

3.启动nginx和php-fpm,然后写个phpinfo脚本测试下成功与否就可以了

如何搭建Nginx+PHP环境

1、首先需要准备的应用程序包。

nginx:nginx/Windows-1.0.4

php:php-5.2.16-nts-Win32-VC6-x86.zip (nginx下php是以FastCGI的方式运行,所以我们下载非线程安全也就是nts的php包)

(还会用到)RunHiddenConsole:RunHiddenConsole.zip

2、安装与配置。

1)php的安装与配置。

直接解压下载好的php包,到D盘wnmp目录(D:\wnmp),这里把解压出来的文件夹重命名成php5。进入文件夹修改php.ini-recommended文件为php.ini,并用Editplus或者Notepad++打开来。找到

extension_dir = "./ext"

更改为

extension_dir = "D:/wnmp/php5/ext"

往下看,再找到

;extension=php_mysql.dll

;extension=php_mysqli.dll

前面指定了php的ext路径后,只要把需要的扩展包前面所对应的“;”去掉,就可以了。这里打开php_mysql.dll和php_mysqli.dll,让php支持mysql。当然不要忘掉很重要的一步就是,把php5目录下的libmysql.dll文件复制到C:\Windows目录下,也可以在系统变量里面指定路径,当然这里我选择了更为方便的方法^_^。

到这里,php已经可以支持mysql了。

接下来我们来配置php,让php能够与nginx结合。找到

;cgi.fix_pathinfo=1

我们去掉这里的封号。

cgi.fix_pathinfo=1

这一步非常重要,这里是php的CGI的设置。

2)nginx的安装与配置。

把下载好的nginx-1.0.4的包同样解压到D盘的wnmp目录下,并重命名为nginx。接下来,我们来配置nginx,让它能够和php协同工作。进入nginx的conf目录,打开nginx的配置文件nginx.conf,找到

location / {

root html;#这里是站点的根目录

index index.html index.htm;

}

将root html;改为root D:/wnmp/www;

再往下,找到

复制代码

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# include fastcgi_params;

#}

复制代码

先将前面的“#”去掉,同样将root html;改为root D:/wnmp/www;。再把标记为红色的/scripts改为“$document_root”,这里的“$document_root”就是指前面“root”所指的站点路径,这是改完后的:

复制代码

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

location ~ \.php$ {

root D:/wnmp/www;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

复制代码

保存配置文件,就可以了。

nginx+php的环境就初步配置好了,来跑跑看。我们可以输入命令

来启动php,并手动启动nginx,当然也可以利用脚本来实现。

首先把下载好的RunHiddenConsole.zip包解压到nginx目录内,RunHiddenConsole.exe的作用是在执行完命令行脚本后可以自动关闭脚本,而从脚本中开启的进程不被关闭。然后来创建脚本,命名为“start_nginx.bat”,我们在Notepad++里来编辑它

复制代码

@echo off

REM Windows 下无效

REM set PHP_FCGI_CHILDREN=5

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量

set PHP_FCGI_MAX_REQUESTS=1000

echo Starting PHP FastCGI...

RunHiddenConsole D:/wnmp/php5/php-cgi.exe -b 127.0.0.1:9000 -c D:/wnmp/php5/php.ini

echo Starting nginx...

RunHiddenConsole D:/wnmp/nginx/nginx.exe -p D:/wnmp/nginx

复制代码

再另外创建一个名为stop_nginx.bat的脚本用来关闭nginx

@echo off

echo Stopping nginx...

taskkill /F /IM nginx.exe > nul

echo Stopping PHP FastCGI...

taskkill /F /IM php-cgi.exe > nul

exit

做好后,是这样的

这样,我们的服务脚本也都创建完毕了。双击start_nginx.bat看看进程管理器是不是有两个nginx.exe的进程和一个php-cgi.exe的进程呢?

这样nginx服务就启动了,而且php也以fastCGI的方式运行了。

到站点目录下,新建一个phpinfo.php的文件,在里面编辑

<?php

phpinfo();

?>

保存后,打开浏览器输入“”,如果看到

就说明,nginx+php的环境已经配置好了,呵呵~

关于配置php支持nginx的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于配置php支持nginx php7 nginx的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did167563
更新时间:2023-03-29   阅读:38次

上一篇: php图片加入类型 php怎么显示图片

下一篇:php简易计数器 php实现简易计算器

相关资讯

最新资料更新

  • 1.DedeCMS图集中缩略图不显示的解决方法
  • 2.DEDECMS教程:去除列表页文章标题加粗标签的方法
  • 3.DedeCMS编辑器fck更换成eWebEditor编辑器具体步骤
  • 4.织梦如何让channelartlist标签支持limit属性
  • 5.dede中统计栏目文章数的两种方法
  • 6.dedecms5.7联动类型无法显示的解决方法
  • 7.DedeCMS Error Warning!提示信息的修改方法
  • 8.批量删除织梦dedecms文档搜索关键词的方法
  • 9.织梦手机站关闭自动生成首页index.html的方法
  • 10.删除织梦所有待审核稿件sql语句(未审核数据将全部删除)
  • 11.dedecms各模板调用自定义字段的方法
  • 12.织梦后台卡死(点击栏目无反应导致浏览器崩溃)的解决方法
  • 13.DEDECMS后台无法登陆并跳转回登陆界面的解决方法
  • 14.织梦DedeCMSv5.7安装初始化数据体验包失败的解决方法
  • 15.防止Dedecms入侵、漏洞问题的4点安全防范建议
  • 16.dedecms模板标签如何做判断示例代码
  • 17.dedecms列表页上一页下一页翻页单独调用的方法
  • 18.Dedecms文章设置推荐后列表页标题自动加粗的解决方法
  • 19.dede中调用文章属性的名称(调用自定义属性名称)
  • 20.dedecms图片集添加水印的方法

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]