月度归档:2016年09月

Window 7 下部署Nginx PHP7环境

在Window下做开发,一般会选择使用集成安装包来安装环境,比如wamp, xamp。 由于仅仅是一个开发环境,又希望和生产环境保持一致(Nginx+PHP),在Windows下可以手动配置,实际上不会比一键安装包来得的更复杂。

#下载Nginx  http://nginx.org/
#下载PHP http://windows.php.net/download

如果下载的是PHP 7.x,需要安装VC14,下载地址:http://www.microsoft.com/zh-CN/download/details.aspx?id=48145。注意:这里提供的两个包,分别针对32为和64位的机器。

把下载的Nginx和PHP压缩释放到一个目录(E:/wnmp):

E:\wnmp\nginx
E:\wnmp\php

Nginx配置:

# 1
E:\wnmp\nginx\conf\nginx.conf

#user  nobody;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    ##配置一个默认虚拟主机
    server {
        listen       80;
        server_name  localhost;

	root E:/var/www/default;
    	index index.html index.htm index.php;

        location ~ \.php$ {
            root           E:/var/www/default;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

    ##把其它的虚拟主机放入conf/vhosts中
    include vhosts/*.conf;
}


###############################################
#vhosts/*.conf模子
server {
    listen 80;

    server_name php.dev;

    root D:\wamp\www\php.dev\public;
    index index.html index.htm index.php;

    if (!-e $request_filename) {
        rewrite ^/(.+)$ /index.php last;
        break;
    }

    location / {
	root D:\wamp\www\php.dev\public;
	try_files $uri $uri/ /index.php?$query_string;
    }

    location ~* ^.+\.(js|css|jpeg|jpg|gif|png|ico|eot|ttf|woff|svg)$ {
        expires 5d;
    }

    location ~ \.php$ {
	client_max_body_size 	100M;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 	300;
        fastcgi_read_timeout 	300;
        fastcgi_buffer_size 	32k;
        fastcgi_buffers 	256 32k;

        fastcgi_pass   		127.0.0.1:9000;
        fastcgi_index  		index.php;

        fastcgi_param  		HTTPS $https if_not_empty;

        fastcgi_param  		SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        		fastcgi_params;
   }
}
###############################################


# 2 测试配置文件正确
E:\wnmp\nginx\nginx.exe -t

# 3 启动
E:\wnmp\nginx\nginx.exe

Nginx启动关闭脚本:

# 启动
nginx_start.bat

@echo off
set NGINX_HOME=E:\wnmp\nginx
start /D %NGINX_HOME%\ %NGINX_HOME%\nginx.exe
pause

# 关闭
nginx_stop.bat

@echo off
set NGINX_HOME=E:\wnmp\nginx
cd %NGINX_HOME%
nginx.exe -s quit
pause

PHP配置:

# 对php.ini文件做一些修改
# 拷贝E:\wnmp\php\php.ini-development为php.ini
# 修改或确认如下参数:

#设置时区
date.timezone = Asia/Shanghai

#允许用户在运行时加载PHP扩展
enable_dl = On           #默认为Off 

#CGI相关参数,实际上建议修改的是force_redirect,其它均保留默认值
cgi.force_redirect = 0   #默认为1,改为0
cgi.fix_pathinfo = 1     #默认是1,保留
fastcgi.impersonate = 1  #默认是1,保留
cgi.rfc2616_headers = 0  #默认是0,保留

#扩展目录
extension_dir = "ext"

#加载扩展 根据需要调整
extension=php_bz2.dll
extension=php_curl.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_intl.dll
extension=php_mbstring.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_mysql.dll

#扩展opcache是否加载,开发环境可以忽略
[opcache]
zend_extension=php_opcache.dll
opcache.enable=1
opcache.enable_cli=1

#其它参数调整,根据实际情况调整
upload_max_filesize = 64M
max_execution_time = 1200
max_input_time = 600
max_input_nesting_level = 128
max_input_vars = 2048
memory_limit = 1024M

post_max_size = 64M

PHP启动关闭脚本:

#启动x个php-cgi进行(注意,这里没有PHP-FPM管理器,无法动态管理CGI进程,开发环境就无所谓了)
php_start.vbs

createobject("wscript.shell").run "E:\wnmp\php\php-cgi.exe -b 127.0.0.1:9000",0,false
createobject("wscript.shell").run "E:\wnmp\php\php-cgi.exe -b 127.0.0.1:9000",0,false
createobject("wscript.shell").run "E:\wnmp\php\php-cgi.exe -b 127.0.0.1:9000",0,false

#关闭php-cgi进行
php_stop.bat

@echo off
taskkill /fi "imagename eq php-cgi.exe"
pause

启动时,点击nginx_start.bat和php_start.vbs,关闭时点击nginx_stop.bat和php_stop.bat。如果要切换到不同版本的PHP,很简单,直接替换就可以,或者建立多个启动脚本,比如:

start_php5.5.vbs
start_php5.6.vbs
start_php7.0.vbs
start_php7.1.vbs

关闭脚本就不需要建立多个了。

然后修改一下path环境变量:
winpath

phpenv

windowphp

在Linux下,PHP的fpm模块是可用的,但是在Windows下不支持,看起来也没有支持的计划。目前在Windows下也看到有类似实现的,不过一般是监控php-cgi进程数量,死掉重启,如此而已,一般认为没有什么价值。开发环境,直接运行一个脚本,启动几个php-cgi进程即可。

在widows下,可以配置为开启运行这些脚本,避免每次都要点击:
cmd-gpedit-msc

gpedit-window

这样设置就可以开机启动了。

另外,在开发环境下,如果觉得引入Nginx太麻烦,还有更加简便的方法,PHP 5.4以后,引入了一个内置的CLI Http Server,启动方式:

D:\wnmp\php-7.0.11\php.exe -S 127.0.0.1:6060 -t D:\var\www\xx\public

可以监听同一个端口,根据不同的名称来区分不同的项目。也使用IP地址,使用不同端口来区分不同的项目。(相同端口和相同主机名,可以启动多次的)
[sehll]
#基于端口,IP一样,端口不一样
D:\wnmp\php-7.0.11\php.exe -S 127.0.0.1:6060 -t D:\var\www\xx\public
D:\wnmp\php-7.0.11\php.exe -S 127.0.0.1:6061 -t D:\var\www\yy\public

#基于主机名(先做hosts绑定),端口一样,主机名不一样
D:\wnmp\php-7.0.11\php.exe -S vfeelit.local:6060 -t D:\var\www\xx\public
D:\wnmp\php-7.0.11\php.exe -S ifeeline.local:6060 -t D:\var\www\yy\public
[/shell]

为了方便,可以对不同项目编写独立的VBS文件,需要哪个点哪个,这也是一个不错的办法:

createobject("wscript.shell").run "D:\wnmp\php-7.0.11\php.exe -S ifeeline.local:6060 -t D:\var\www\yy\public",0,false