1. 下载安装包
2. 配置nginx
在D盘建一个目录D:\PHPServer\。
将下载的nginx包解压到该目录至D:\PHPServer\nginx-1.5.6。
运行nginx.exe,此时查看任务管理器,会发现多了两个nginx进程。如下:
在浏览器中输入 http://127.0.0.1/
看到下图则表示nginx已经正常启动。
备注:如果在任务管理器中未发现nginx进程,则可能是nginx无法绑定到80端口(估计已经被iis绑定了)。这时可以打开nginx-1.5.6\conf\nginx.conf文件。找到如下行
将其中的listen 80; 修改为listen 9100,或其他任意端口。
然后再次启动nginx.exe,这时浏览器访问的地址就该是 http://127.0.0.1:9100/ 了。
尝试给nginx配置一个静态网站。新建目录D:\PHPServer\test_site。在该目录下新建一个index.html文件,文件内容如下:
然后修改nginx.conf文件中的
将root html; 修改为root D:/PHPServer/test_site; 使nginx能够找到网站根目录
然后重新加载nginx,在命令行中输入
这时再访问网站 http://127.0.0.1:9100/ ,可以看到首页变成index.html的内容了。
停止nginx可以在命令行中输入
3. 配置php
解压php-5.5.4-nts-Win32-VC11-x86.zip到D:\PHPServer\php-5.5.4目录。
将该目录下的php.ini-development或php.ini-production拷贝一份并重命名为php.ini。具体development与production有什么区别,自己百度。
修改php.ini文件:
指定php网页的目录:
指定php拓展的目录:
更改时区:
因为nginx需要的是cgi方式的php,所以如下几个地方是重点,否则nginx无法打开php文件:
enable_dl = On
cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1
为了让php支持mysql,还需要去掉如下几句的注释:
;extension=php_gd2.dll,去掉前面分号
;extension=php_mbstring.dll,去掉前面分号
;extension=php_mysql.dll,去掉前面分号
;extension=php_mysqli.dll,去掉前面分号
;extension=php_pdo_mysql.dll,去掉前面分号
启动php-cgi的命令为:。表示一句php.ini的配置来启动php-cgi,并监听9000端口。
注,到现在为止,我们配置了两个端口:
一个是nginx的监听端口9100,
一个是php-cgi的监听端口9000。
Nginx与php的工作原理可以简单理解如下:
nginx服务器监听9100端口来获得用户的http请求;
对静态html页面的请求直接由nginx返回,
对php的请求的话,nginx会将该请求发送给9000端口的php-cgi进程(这个在第5步配置),然后由php-cgi来处理用户对php的请求,再返回给nginx。
4. 添加一个php测试页面
在我们的测试网站目录D:\PHPServer\test_site下,新建一个index.php,内容为:
注:php文件的文件名或者文件路径不能有中文,否则会导致php-cgi无法识别。将返回”No input file specified”
5. 配置nginx使其能将用户对php的请求交由php-cgi来处理
在nginx.conf文件中,找到如下地方:
将前面的注释#号去掉,然后修改两处标识的地方为如下:
(注:$document_root不要写成了 /$document_root,加了前面这个反斜杠会导致http对php响应的返回code为404,而content又有东西)
(另外:我们将php-cgi的端口改成9200了)
6. 编写启动脚本
将RunHiddenConsole解压后放D:\PHPServer目录下。
然后在该目录下新建start_php_nginx.bat脚本,脚本内容如下:
@echo off echo Starting PHP FastCGI... RunHiddenConsole php-5.5.4/php-cgi.exe -b 127.0.0.1:9200 -c php-5.5.4/php.ini echo Starting Nginx... cd nginx-1.5.6 D:/PHPServer/RunHiddenConsole nginx.exe pause
运行该脚本,即能打开一个php-cgi进程。和两个nginx进程。
此时就可以访问: http://localhost:9100/ 与 http://localhost:9100/index.php 两个页面了:
如果要想让 http://localhost:9100/ 默认访问的是index.php。那么就要在nginx.conf的server里面添加index.php,设为默认的首页。同时把网站目录下的index.html文件(或者index.htm)删除。
7. 编写停止脚本
在D:\PHPServer目录下新建stop_php_nginx.bat脚本,内容如下:
@echo off echo Stopping nginx... taskkill /F /IM nginx.exe > nul echo Stopping PHP FastCGI... taskkill /F /IM php-cgi.exe > nul pause
运行该脚本即可将php-cgi进程以及nginx进程全部关闭。
8. 完善版的启停脚本
::关闭回显 @echo off set WNMP_HOME=C:/wnmp set NGINX_HOME=C:/wnmp/nginx-1.14.0 ::set PHP_HOME=C:/wnmp/php-5.4.32-nts-Win32-VC9-x86 set PHP_HOME=C:/wnmp/php-5.6.37-nts-Win32-VC11-x64 ::set PHP_HOME=C:/wnmp/php-7.2.7-nts-Win32-VC15-x64 echo Starting mysql...(password is my phone number) set status=1 (tasklist|find /I "mysqld.exe" || set status=0) 2>nul 1>nul if %status% equ 1 ( echo mysqld.exe already exists ) else ( ::net start 命令必须用管理员权限才能运行 net start mysql ) ::输出换行 echo. echo Starting php-cgi... set status=1 (tasklist|find /I "php-cgi.exe" || set status=0) 2>nul 1>nul if %status% equ 1 ( echo php-cgi.exe already exists ) else ( %WNMP_HOME%/RunHiddenConsole.exe %PHP_HOME%/php-cgi.exe -b 127.0.0.1:9000 -c %PHP_HOME%/php.ini echo php-cgi.exe start! ) ::输出换行 echo. echo Starting nginx... set status=1 (tasklist|find /I "nginx.exe" || set status=0) 2>nul 1>nul if %status% equ 1 ( echo nginx.exe already exists ) else ( %WNMP_HOME%/RunHiddenConsole.exe %NGINX_HOME%/nginx.exe -p %NGINX_HOME% echo nginx.exe start! ) ::输出换行 echo. pause
::关闭回显 @echo off echo Stopping nginx... taskkill /F /IM nginx.exe > nul echo. echo Stopping php-cgi... taskkill /F /IM php-cgi.exe > nul echo. ::echo Stopping mysql... ::net stop mysql echo. pause
9. 再配置一个php网站
9.1 新建一个网站目录D:/PHPServer/test_site2
在该目录下建立新的index.html和php文件。
9.2 修改nginx
在nginx的nginx.conf文件,再添加一个新的server{…… }标签。直接从原server{}标签复制一份来修改就好了。
表示这个新建的nginx server负责监听9101端口(用户访问的就要用 http://localhost:9101 )。该网站的root目录在test_site2下面,该端口的php请求递交给9201端口的php-cgi。
(其实,为了能在9100与9101端口分别监听对web0与web1的请求,只需要nginx绑定这两个端口就好了,然后都交给一个php-cgi即可,并不需要让php-cgi监听不同端口。)
9.3 新建一个php_site2.ini
可以将原来的php.ini直接复制一份为php_site2.ini。
然后只需要修改其中的即可。
9.4 修改启动脚本
@echo off echo Starting PHP FastCGI... RunHiddenConsole php-5.5.4/php-cgi.exe -b 127.0.0.1:9200 -c php-5.5.4/php.ini RunHiddenConsole php-5.5.4/php-cgi.exe -b 127.0.0.1:9201 -c php-5.5.4/php_site2.ini echo Starting Nginx... cd nginx-1.5.6 D:/PHPServer/RunHiddenConsole nginx.exe pause
Nginx还是只需要一个,但php-cgi就需要针对每个网站各来一个。然后运行该脚本,我们就能访问 http://localhost:9100 和 http://localhost:9101 两个网站了。