安装与配置nginx+php:windows篇

安装与配置nginx+php:windows篇

1. 下载安装包

1.PNG

2. 配置nginx

在D盘建一个目录D:\PHPServer\。

将下载的nginx包解压到该目录至D:\PHPServer\nginx-1.5.6。

运行nginx.exe,此时查看任务管理器,会发现多了两个nginx进程。如下:

捕获.PNG

在浏览器中输入 http://127.0.0.1/

看到下图则表示nginx已经正常启动。

捕获.PNG

备注:如果在任务管理器中未发现nginx进程,则可能是nginx无法绑定到80端口(估计已经被iis绑定了)。这时可以打开nginx-1.5.6\conf\nginx.conf文件。找到如下行

捕获.PNG

将其中的listen 80; 修改为listen 9100,或其他任意端口。

然后再次启动nginx.exe,这时浏览器访问的地址就该是 http://127.0.0.1:9100/ 了。

尝试给nginx配置一个静态网站。新建目录D:\PHPServer\test_site。在该目录下新建一个index.html文件,文件内容如下:

捕获.PNG

然后修改nginx.conf文件中的

捕获.PNG

将root html; 修改为root D:/PHPServer/test_site; 使nginx能够找到网站根目录

捕获.PNG

然后重新加载nginx,在命令行中输入捕获.PNG

这时再访问网站 http://127.0.0.1:9100/ ,可以看到首页变成index.html的内容了。

停止nginx可以在命令行中输入捕获.PNG

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网页的目录:1.PNG

指定php拓展的目录:捕获.PNG

更改时区:捕获.PNG

因为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的命令为:捕获.PNG。表示一句php.ini的配置来启动php-cgi,并监听9000端口。

注,到现在为止,我们配置了两个端口:

一个是nginx的监听端口9100

一个是php-cgi的监听端口9000

Nginxphp的工作原理可以简单理解如下:

nginx服务器监听9100端口来获得用户的http请求;

对静态html页面的请求直接由nginx返回,

php的请求的话,nginx会将该请求发送给9000端口的php-cgi进程(这个在第5步配置),然后由php-cgi来处理用户对php的请求,再返回给nginx

4. 添加一个php测试页面

在我们的测试网站目录D:\PHPServer\test_site下,新建一个index.php,内容为:

捕获.PNG

注:php文件的文件名或者文件路径不能有中文,否则会导致php-cgi无法识别。将返回”No input file specified”

捕获.PNG

5. 配置nginx使其能将用户对php的请求交由php-cgi来处理

在nginx.conf文件中,找到如下地方:

1.PNG

将前面的注释#号去掉,然后修改两处标识的地方为如下:

捕获.PNG

(注:$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 两个页面了:

1.PNG

2.png

如果要想让 http://localhost:9100/ 默认访问的是index.php。那么就要在nginx.conf的server里面添加index.php,设为默认的首页。同时把网站目录下的index.html文件(或者index.htm)删除。

QQ截图20131119225445.png

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{}标签复制一份来修改就好了。

捕获.PNG

表示这个新建的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。

然后只需要修改其中的捕获.PNG即可。

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:9100http://localhost:9101 两个网站了。

9.5 此时我们的D:/PHPServer目录如下:

捕获.PNG

Leave a Reply

Your email address will not be published. Required fields are marked *

TOC