部署前准备
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
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 |
PHP 5.5
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 |
PHP 5.4
5.4 Non Thread Safe (NTS) x86 5.4 Thread Safe (TS) x86 |
PHP 5.3
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