windows下 php环境部署 nginx+php-nts+fcgi

部署前准备

1.apache2.4  nginx/Windows-1.11.8      下载网站

2.php5.5.38  php-5.5.38-Win32-VC11-x64.zip  下载网站 更多版本下载地址

 

php线程安全 和 非线程安全 的区别 TS和NTS的区别

TS:Thread Safe 线程安全, 执行时会进行线程(Thread)安全检查

NTS:Non Thread Safe 非线程安全, 在执行时不进行线程(Thread)安全检查

 

安装步骤

1.解压NGINX和PHP到你自己安装位置。这里我在C盘新建一个文件夹:www,把下面的软件安装到这个文件夹里面。

NGINX目录C:\www\tools\nginx-1.10.2

PHP目录C:\www\tools\php-5.6.29-nts-Win32-VC11-x64

2.打开C:\nginx目录,运行该文件夹下的nginx.exe

3.测试是否启动nginx。打开浏览器访问http://localhost 或 http://127.0.0.1,看看是否出现“Welcome to nginx!”,出现的证明已经启动成功了。没有启动的话,看看80端口有占用没。

注意:该网站的默认目录在“C:\www\tools\nginx-1.10.2\htm”l下

 

PHP配置步骤

1.将C:\www\tools\php-5.6.29-nts-Win32-VC11-x64\php.ini-production 复制一份,并重命名为php.ini;

2.用记事本打开C:\www\tools\php-5.6.29-nts-Win32-VC11-x64\php.ini将; extension_dir = "ext"修改为 extension_dir = "ext" (去掉extension前面的分号)

3.将;extension=php_mbstring.dll 修改为 extension=php_mbstring.dll(去掉extension前面的分号,这是php多字节字符串扩展) 需要用到的ext都可以开起来

 

extension=php_bz2.dll
extension=php_curl.dll
;extension=php_fileinfo.dll
extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_exif.dll      ; Must be after mbstring as it depends on it
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll
;extension=php_pdo_sqlsrv_55_ts.dll

; The MIBS data available in the PHP distribution must be installed. 
; See http://www.php.net/manual/en/snmp.installation.php 
;extension=php_snmp.dll

;extension=php_soap.dll
;extension=php_sockets.dll
extension=php_sqlite3.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_xmlrpc.dll
extension=php_xsl.dll

 

其他设置

4.时间 搜索“date.timezone”,找到:;date.timezone = 先去前面的分号再改为 date.timezone = PRC

测试

 

date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海
date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆”
date_default_timezone_set('PRC');//其中PRC为“中华人民共和国”

 5.搜索“cgi.force_redirect” ;cgi.force_redirect = 1 先去前面的分号再改为 cgi.force_redirect = 0

; PHP页面的根路径, 只有非空时有效.
; 如果PHP没有使用FORCE_REDIRECT来编译, 如果你将php作为CGI运行在任何web服务器下(除了IIS)的话,你必须设置doc_root
; 针对安全问题查看文档. 一种替代方案是使用下面的cgi.force_redirect
doc_root =

; 在绝大多数web服务器下,cgi.force_redirect 对于提供安全执行PHP作为CGI来说是很有必要的.
; 没有配置的情况下,PHP会默认打开此项.
; 你可以在这里关闭此项并且自己承担风险
; **你可以在IIS安全的关闭此项,事实上,你必须关闭此项.**
; cgi.force_redirect = 1

; 如果 cgi.nph 被打开,就会强制CGI在每个请求时发送Status: 200.
; cgi.nph = 1

; 如果cgi.force_redirect被打开,并且你没有在Apache或者Netscape(iPlanet) web服务器下运行,
; 你也许需要设置一个环境变量名让PHP来查找让其可以获取后继续执行. 设置此变量可能引起安全问题, 在设置之前请先了解可能引起的后果.

 

6.设置上传文件大小

表单post提交最大内容4G

post_max_size = 4096M

设置最大上传文件大小

 

 

upload_max_filesize = 1024M

  

7.开启代码加速

1、打开php.ini文件

2、找到:[opcache],设置为:

 

[opcache]
; dll地址
zend_extension=php_opcache.dll
; 开关打开
opcache.enable=1
; 开启CLI
opcache.enable_cli=1
; 可用内存, 酌情而定, 单位为:Mb
opcache.memory_consumption=528
; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
opcache.interned_strings_buffer=8
; 对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值
opcache.max_accelerated_files=10000
; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒
opcache.revalidate_freq=1
; 打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高
opcache.fast_shutdown=1
 

8.memcached的配置

Memcached是一个高并发的内存键值对缓存系统,它的主要作用是将数据库查询结果,内容,以及其它一些耗时的计算结果缓存到系统内存中,从而加速Web应用程序的响应速度。

Memcached最开始是作为Linux应用程序被安装在Linux服务器上来使用的,不过自从开源之后,它又被重新编译以适用于Windows环境。Jellycan和Northscale两个站点都提供了Windows的二进制可执行文件下载,下面是下载的地址:

     http://code.jellycan.com/files/memcached-1.2.5-win32-bin.zip

  http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip

  http://downloads.northscale.com/memcached-win32-1.4.4-14.zip

  http://downloads.northscale.com/memcached-win64-1.4.4-14.zip

  http://downloads.northscale.com/memcached-1.4.5-x86.zip

  http://downloads.northscale.com/memcached-1.4.5-amd64.zip

 

https://pecl.php.net/package/memcache/3.0.8/windows

DLL List PHP 5.6 PHP 5.5 PHP 5.4 PHP 5.3
5.6 Non Thread Safe (NTS) x86
5.6 Thread Safe (TS) x86
5.6 Non Thread Safe (NTS) x64
5.6 Thread Safe (TS) x64
5.5 Non Thread Safe (NTS) x86
5.5 Thread Safe (TS) x86
5.5 Non Thread Safe (NTS) x64
5.5 Thread Safe (TS) x64
5.4 Non Thread Safe (NTS) x86
5.4 Thread Safe (TS) x86
5.3 Non Thread Safe (NTS) x86
5.3 Thread Safe (TS) x86

       php7+版本 dll下载 https://github.com/nono303/PHP7-memcache-dll

在1.4.5版本之前,memcached可以被安装成一个服务,但之后的版本中该功能被移除了。因此memcached的安装可以分为两类,第一类是1.4.5之前的版本,另一类是1.4.5之后的版本。

安装memcached < 1.4.5:

  1. 将下载的文件解压到任意目录。

 

  2. 1.4.5之前版本的memcached会被安装成一个服务,以administrator打开控制台,运行下面的命令:

 

c:\memcached\memcached.exe -d install
       注意将路径c:\memcached\memcached.exe替换成你本地的安装路径。

  3. 然后使用下面的命令启动或停止memcached服务:

 

c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
     4. 通过注册表键值来修改memcached的配置项。在运行中输入regedit.exe,然后导航到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached"。修改其中的键值。例如你想增加memcached所使用的最大内存限制,可以修改ImagePath的值:

 

"c:\memcached\memcached.exe" -d runservice -m 512
    * 除了参数'-m 512'之外,你还可以使用其它的参数。通过“c:\memcached\memcached.exe -h”可以查看所有能使用的参数。

  5. 如果要卸载memcached服务,可以使用下面的命令:

 

c:\memcached\memcached.exe -d uninstall
  安装memcached >= 1.4.5

  1. 将下载的文件解压到任意目录。

  2. 1.4.5之后版本的memcached不能作为Windows服务来运行,必须使用Windows计划任务来运行它。要将memcached配置成当Windows启动时自动运行,在命令行运行下面的命令:

schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"
       * 注意将路径c:\memcached\memcached.exe替换成你本地的安装路径。

       ** 除了参数'-m 512'之外,你还可以使用其它的参数。通过“c:\memcached\memcached.exe -h”可以查看所有能使用的参数。

  3. 通过下面的命令将memcached从Windows计划任务中移除:

 

schtasks /delete /tn memcached
 

修改php.ini文件 底部追加如下代码

 

[memcache]
extension=php_memcache.dll
;一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
;它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
;是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = 0
;接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。
memcache.max_failover_attempts = 20
;数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
;如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192
;连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211
;控制将key映射到server的策略。默认值"standard"表示使用先前版本的老hash策略。
;设为"consistent"可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
memcache.hash_strategy = "consistent"
;控制将key映射到server的散列函数。默认值"crc32"使用CRC32算法,而"fnv"则表示使用FNV-1a算法。
;FNV-1a比CRC32速度稍低,但是散列效果更好。
memcache.hash_function = "crc32"
;以下2个设置见上上面的[session]
;当值为memcache时标记使用memcache作为session处理器
;session.save_handler = "files"
;定义用于通话存储的各服务器链接的分隔符号,例如:“tcp://host1:11211, tcp://host2:11211”
;每服务器个链接可以包含被接受于该服务器的参数,比较类似使用 Memcache::addServer() 来添加的服务器
;例如:“tcp://host1:11211?persistent=1&weight=1&timeout=1& amp;retry_interval=15”
;session.save_path = ""
 重启php

 

打开cmd 运行 C:\www\tools\php-5.6.29-nts-Win32-VC11-x64\php.exe 看看是否正常 

 

 

nginx配置

1.安装php(这里主要讲nginx配置启动php,以cgi运行php)

nginx配置文件是conf文件夹里的nginx.conf

2.修改大概第43~45行之间的 如果使用的是虚拟目录可以不改这里

 

 location /{
            root   html;
            index  index.html index.htm;
}

修改网站文件的路径,以及添加index.php的默认页。

 

 

location / {
            root   "C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/html";
            index  index.html index.htm inde.php;
        }

或者
location / {
            root   html;
            index  index.html index.htm inde.php;
        }

 3.支持php的设置

修改大概在第63-71行的

 

        # 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  C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/html;。再把“/scripts”改为“$document_root”,这里的“$document_root”就是指前面“root”所指的站点路径,这是改完后的:

 

修正原文的错误,应该去掉下列几行的“#”以使其生效

 

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

 

 

其他配置

4.开启压缩,插入如下代码,在http{} 里

 

    #gzip  on;
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    gzip_disable "MSIE [1-6].";

 

5.配置fast_cgi 插入如下代码 在http{}里

 

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;

 

6.配置 PHP FastCGI

Nginx 需要和 FastCGI Server 配合才能处理请求。

先说FastCGIServer如何运行,有两种方式运行 PHP FastCGI Server:

一种就是使用 PHP 内置的 FastCGI 管理器

C:/php5/php-cgi.exe -b 127.0.0.1:9000 -c C:/php5/php.ini

 另外一种方式是使用第三方工具: 

比如 PHP-FPM 、cgi-fcgi 等。显然!要在 Windows 中使用这些工具是件极其痛苦的事情,你可能需要 Cygwin 之类的东西才行,的确有人这么做了,虽然我觉得那是自寻烦恼。 

再说nginx.conf关于FastCgi的连接配置 

location ~ \.php$ {
  root           html;
  # 连接到本机 9000 端口,这里的端口是指 PHP FastCGI Server 开启的端口,
  # 请与 php-cgi.exe 开启的端口保持一致
  # 当 Nginx 收到 php 文件的请求时,会自动转发到 PHP FastCGI Server
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  
  # Nginx 默认是不支持 CGI PATH_INFO,SCRIPT_NAME 的值也不标准(糅合了 PATH_INFO)
  # 下面的两行指令,可以从 SCRIPT_NAME 中剥离出 PATH_INFO
  fastcgi_split_path_info     ^(.+\.php)(.*)$;
  fastcgi_param PATH_INFO     $fastcgi_path_info;
  # 包含另一个配置文件 fastcgi_params
  include        fastcgi_params;
}

第一种方法使用内置的FastCGI管理器

先在http{

        插入如下代码

      server{}

}

    #这里最好多个,否则会有curl localhost不成功的情况
    upstream phpfastcgi_proxy {  
      server 127.0.0.1:9000 weight=1;
      server 127.0.0.1:9001 weight=1;
      server 127.0.0.1:9002 weight=1;
      server 127.0.0.1:9003 weight=1;
    }

再把所有

fastcgi_pass 127.0.0.1:9000; 
 改为
fastcgi_pass phpfastcgi_proxy; 
 

开启脚本 多开几个RunHiddenConsole C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9001 -c C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php.ini

@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=5

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000
 
echo Starting PHP FastCGI...
RunHiddenConsole C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9000 -c C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php.ini
RunHiddenConsole C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9001 -c C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php.ini
RunHiddenConsole C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9002 -c C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php.ini
RunHiddenConsole C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9003 -c C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php.ini

echo Starting nginx...
RunHiddenConsole C:/www/tools/nginx-1.10.2/nginx.exe -p C:/www/tools/nginx-1.10.2

 

7.开启虚拟目录配置,在http{}里插入如下代码

 

include "vhost/vhosts.conf";

 然后在C:\www\tools\nginx-1.10.2\conf目录下 新建文件夹vhost

 

然后在vhost新建文件vhost.conf

打开这个文件写入虚拟目录配置内容比如:

 

server
    {
        listen 8080;
        #listen [::]:80;
        server_name 127.0.0.1;
        index index.html index.htm index.php default.html default.htm default.php;
        root  "C:/www/php/ccthink5/public";

        include "C:/www/php/ccthink5/public/nginx.conf";
        #error_page   404   /404.html;
        location ~ [^/]\.php(/|$)
        {
            # comment try_files $uri =404; to enable pathinfo
            try_files $uri =404;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
            #include pathinfo.conf;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        access_log logs/ccthink5.log  access;

    }

 

 

 

最后编写快速开启脚本

下载工具 RunHiddenConsole

新建文件输入如下代码 并保存为start.bat。开启php-cgi和nginx.exe,修改好路径哦

 

@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=5

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000
 
echo Starting PHP FastCGI...
RunHiddenConsole C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9000 -c C:/www/tools/php-5.6.29-nts-Win32-VC11-x64/php.ini
 
echo Starting nginx...
RunHiddenConsole C:/www/tools/nginx-1.10.2/nginx.exe -p C:/www/tools/nginx-1.10.2

 

 

新建文件输入如下代码保存为stop.bat,停止php-cgi和nginx.exe

@echo off
echo Stopping nginx...  
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul
exit

 

参考文献

windows+nginx+php运行环境部署

http://blog.csdn.net/lsm135/article/details/51812240

 

PHP_php.ini_说明详解

https://my.oschina.net/miaowang/blog/299546

 

php.ini详解(转)

http://www.cnblogs.com/bizhu/archive/2012/12/02/2797959.html

 

Windows下nginx+fastcgi+php的并发阻塞问题

http://www.tuicool.com/articles/Jv6NRj3

安装windows 下 php7+nginx+fastcgi

https://my.oschina.net/xming4321/blog/542752

Nginx - Windows下Nginx + PHP配置

http://koda.iteye.com/blog/601231

Nginx配置文件(nginx.conf)配置详解

http://blog.csdn.net/tjcyjd/article/details/50695922

Nginx 高并发负载均衡配置详解

http://www.codeweblog.com/nginx-%E9%AB%98%E5%B9%B6%E5%8F%91%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE%E8%AF%A6%E8%A7%A3/

nginx服务器安装及配置文件详解

https://segmentfault.com/a/1190000002797601

PHP开启opcache方法

http://www.cnblogs.com/HD/p/4554455.html

在Windows中安装Memcached

http://www.cnblogs.com/jaxu/p/5196811.html

猜你喜欢

转载自nbczw8750.iteye.com/blog/2354468