windows平台中配置nginx+php环境


Posted in PHP onDecember 06, 2015

刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是"引擎x",一般引"擎代"表了性能,而"x"大多出现是表示"xtras(额外的效果)",那么整个词的意思就是类似"极致效果","额外性能"。当然这里不是要来唠嗑,以上是题外话。

nginx相较于我们熟悉的apache,IIS的优势,就我浅入浅出的了解,在于"反向代理"和"负载均衡"。因此考虑到能够为Web服务器节省资源,它可以代替apache来提供Web服务。那么上正题了,nginx有这么多优势,那在windows下如何来配置nginx+php环境?网上看到还是那么多转载来转载去的文章。这里就我配置的过程,来介绍一下:

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

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

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

实际中,可能还要开启

extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_mcrypt.dll
extension=php_mhash.dll
extension=php_msql.dll
extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_snmp.dll
extension=php_sockets.dll
extension=php_sqlite.dll
extension=php_xsl.dll
extension=php_zip.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;加上index.php,即:

location / {
  root D:/wnmp/www;  #这里是站点的根目录 
  index index.php index.html index.htm;
}

这里需要注意,路径分隔符请使用/而不要使用Windows中的\以防歧义。
再往下,找到

# 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;
}

设定error.log的存放目录,将#error_log logs/error.log;的#去处,默认error.log是存放在Nginx安装目录中logs目录下。

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

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

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

来启动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:/phpsetup/php-5.4.45-nts-Win32-VC9-x86/php-cgi.exe -b 127.0.0.1:9000 -c D:/phpsetup/php-5.4.45-nts-Win32-VC9-x86/php.ini
 
echo Starting nginx...
RunHiddenConsole D:/phpsetup/nginx-1.6.0/nginx.exe -p D:/phpsetup/nginx-1.6.0

再另外创建一个名为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();
?>

保存后,打开浏览器输入http://localhost/phpinfo.php,如果看到

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

Nginx 403 forbidden的解决办法

常见的,引起nginx 403 forbidden有二种原因,一是缺少索引文件,二权限问题。

1、缺少index.html或者index.php文件

代码如下:

server { 
 listen 80; 
 server_name localhost; 
 index index.php index.html; 
 root /var/www;
}

如果在/var/www下面没有index.php,index.html的时候,直接访问域名,找不到文件,会报403 forbidden。
例如:你访问www.test.com而这个域名,对应的root指定的索引文件不存在。

权限问题

对于PHP而言,如果nginx用户没有web目录的权限,则会导致该错误。
解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重起一下就能解决。 如:
代码如下(Linux下):

chown -R nginx_user:nginx_user /htdocs
PHP 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
Fatal error: Call to undefined function curl_init()解决方法
Apr 09 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
php校验表单检测字段是否为空的方法
Mar 20 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 #PHP
PHP扩展Memcache分布式部署方案
Dec 06 #PHP
PHP微信红包API接口
Dec 05 #PHP
php实现微信发红包
Dec 05 #PHP
详解php比较操作符的安全问题
Dec 03 #PHP
thinkPHP模型初始化实例分析
Dec 03 #PHP
ZF框架实现发送邮件的方法
Dec 03 #PHP
You might like
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
检察官就职演讲稿
2014/01/13 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
网管求职信
2014/03/03 职场文书
大学生英语演讲稿
2014/04/24 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
关于童年的读书笔记
2015/06/26 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript