winodws+apache+fastcgi_php环境搭建:(fastcgi_php指apache使用mod_fcgid.so模块加载php目录下php-cgi.exe文件方式支持php)
请注意环境搭建要求与版本环境支持:
Apache 2.2 win32 VC10 和mod_fcgid模块压缩包下载 :http://www.apachelounge.com/download/win32/
Apache 2.2 win64 VC10 和mod_fcgid模块压缩包下载 :http://www.apachelounge.com/download/win64/
VC10 需要Visual C++ 2010 支持:https://www.microsoft.com/en-us/download/details.aspx?id=13523
Apache 2.4 binaries VC11和mod_fcgid模块压缩包下载 :http://www.apachelounge.com/download/VC11/
Apache 2.4 binaries VC14和mod_fcgid模块压缩包下载 :http://www.apachelounge.com/download/
VC11需要Visual C++ Redistributable for Visual Studio 2012 支持 :https://www.microsoft.com/en-us/download/details.aspx?id=30679
VC14需要Visual C++ Redistributable for Visual Studio 2015 支持 :https://www.microsoft.com/en-us/download/details.aspx?id=53840
1.不同站点使用不同php版本需求
2.php>5.2加载Zend Guard Loader.
对于需求1.如果用mod方式加载php模块,每个站点是不能单独再重新加载的(php的dll只能加载一次),所以同一个apache下不同站点的php设置是一样的,这样就不能满足不同站点使用不同php版本。
对于需求2:php>5.2时Zend Guard Loader只能用到非线程安全php,所以在以前用php5_module加载线程安全的php就不能配置加载zend扩展。
在本文中使用mod_fcgid(http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html)模块来支持php.
我这里使用apche2.2+mod_fcgid-2.3.6. 下载地址:http://kmsoft.landui.com:81/apache/ 备用地址:http://archive.apache.org/dist/httpd/binaries/win32/
下载文件名为:httpd-2.2.25-win32-x86-no_ssl.msi、mod_fcgid-2.3.6-win32-x86.zip。
apache2.4和mod_fcgid2.3.9可以到https://www.apachelounge.com/download/下载,请注意apache版本、VC版本、32/64bit的区别下载对应mod_fcgid组件。如下图所示:
①中需要注意VC10需要Visual C++ 2010运行库的支持。如下图所示使用的是apache2.2 Win64 VC10,你未安装需要先安装Visual C++ 2010 64bit。
②中下载时请在apache对因下载页面下载配套相同位数、相同VC运行库版本编译组件进行安装,如果不配套,可能加载mod_fcgid模块后apache启动会引起版本不配套或不兼容的报错。
apache2.2有安装包和压缩包,可直接安装使用.或手动配置。Apache2.4是压缩包,需要注册服务。
ServerRoot "D:/Apache2.2"
httpd -k install #安装 httpd -k install -n "服务名" #指定服务名称的安装 httpd -k install -n "服务名" -f "c:\files\my.conf" #指定服务名称和配置文件的安装
Apache服务常用命令
httpd -n "服务名" -t #检查指定服务名称的配置文件的正确性 httpd -k stop #停止 httpd -k start #启动 httpd -k restart #重启 httpd -k uninstall #卸载
也可使用控制台命令:(不限定文件路径,但需要服务已注册)
net start apache2.2 #启动服务 net stop apache2.2 #停止服务 net restart apache2.2 #重启服务
cmd命令:service.msc 查看Apache服务是否正常启用
cmd命令:netstat -an | find “80” 查看80端口是否监听
添加Apache程序 防火墙例外
打开浏览器访问http://localhost 是否显示:It's Work。
httpd-mod_fcgid.conf文件内容如下:
#加载mod_fcgid LoadModule fcgid_module modules/mod_fcgid.so #设置apache如何处理php文件 AddHandler fcgid-script .fcgi .php #实例最大请求 FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 #每个进程的最大请求数 FcgidMaxRequestsPerProcess 1000 #启动的最大进程数 FcgidMaxProcesses 15 #进程超时时间 FcgidIOTimeout 120 FcgidIdleTimeout 120 #添加mime支持php AddType application/x-httpd-php .php #php配置文件路径 FcgidInitialEnv PHPRC "D:/PHP_NTS/5.2" #php-cgi.exe路径 FcgidWrapper "D:/PHP_NTS/5.2/php-cgi.exe" .php
注意:其中php配置文件路径和php-cgi.exe路径根据自己实际位置填写即可。
如果没有增加ExcecCGI,将会出现403错误,即没有权限访问。
<Directory /> Options FollowSymLinks ExecCGI AllowOverride None Order deny,allow Allow from all </Directory>
<Directory "D:/Apache2.2/htdocs"> Options Indexes FollowSymLinks ExecCGI AllowOverride None Order allow,deny Allow from all </Directory>
<IfModule dir_module> DirectoryIndex index.php index.html index.htm </IfModule>
在httpd.conf添加包含php mod_fcgid配置文件,这里包含之前配制好的httpd-mod_fcgid.conf文件。
#php mod_fcgid的加载文件 Include conf/extra/httpd-mod_fcgid.conf
[v_organge]1、时区设置:[/v_organge]
date.timezone = Asia/Shanghai
[v_organge]2、禁用函数:[/v_organge]
disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,dl,chmod
[v_organge]3、常用扩展开启[/v_organge]
;以下常用组件取消分号注释(开始) extension=php_bz2.dll extension=php_curl.dll extension=php_gd2.dll extension=php_mbstring.dll extension=php_mcrypt.dll extension=php_mysql.dll extension=php_mysqli.dll extension=php_openssl.dll extension=php_zip.dll
[v_organge]4、其他设置[/v_organge]
short_open_tag = On ;短标签开启 extension_dir = "D:\PHP_NTS\5.2\ext" ;组件存放路径更改 post_max_size = 20M ;POST发送最大数据包限制更改,且必须post_max_size ≥ upload_max_filesize 根据具体情况修改大小 upload_max_filesize = 20M ;上传文件大小限制更改,根据具体情况修改大小
引入apache虚拟主机配置文件,这里单独建立vhost文件夹为每个站点独立创建一个配置文件(便于后期维护)。
#虚拟主机站点配置文件加载 Include conf/vhost/*.conf
[v_organge]其中windows下虚拟主机配置模板如下:(longtao1为站点根目录文件夹)[/v_organge]
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "D:\wwwroot\longtao1" ServerName host1.longtao.pro ServerAlias www.host1.longtao.pro ErrorLog "logs/host1.longtao.pro-error.log" CustomLog "logs/host1.longtao.pro-access.log" common </VirtualHost>
[v_organge]不同站点使用不同php版本。需要把上面的httpd-mod_fcgid.conf文件中以下内容注释或删除:[/v_organge]
#php配置文件路径 FcgidInitialEnv PHPRC "D:/PHP_NTS/5.2" #php-cgi.exe路径 FcgidWrapper "D:/PHP_NTS/5.2/php-cgi.exe" .php
NameVirtualHost *:80 <VirtualHost *:80> #php配置文件路径 FcgidInitialEnv PHPRC "D:/PHP_NTS/5.2" #php-cgi.exe路径 FcgidWrapper "D:/PHP_NTS/5.2/php-cgi.exe" .php ServerAdmin [email protected] DocumentRoot "D:\wwwroot\longtao3" ServerName host3.longtao.pro ErrorLog "logs/dummy-host3.longtao.pro-error.log" CustomLog "logs/dummy-host3.longtao.pro-access.log" common </VirtualHost>
[v_organge]添加.user.ini 文件限制跨站访问。[/v_organge]
.user.ini 的文件内容如下:
open_basedir="D:\wwwroot\milworm.cn;C:\Windows\Temp;"
其中D:\wwwroot\milworm.cn更改为你当前站点的实际目录即可。
在设置好后修改.user.ini的权限为只读,并去掉apcche运行账户的删除、写入权限
net user apache apache_password /add net localgroup users apache /del
设置添加的用户属性为密码永不过期。
安装apache的D盘,apache用户仅仅需要读取权限
D:\Apache2.2作为apache的安装根目录需要“列出文件夹内容、读取”的权限
bin、cgi-bin、modules目录为:“列出文件夹内容、读取和执行、读取”的权限
conf、error、htdocs、icons、manual目录为:“列出文件夹内容、读取”的权限
logs目录为:“列出文件夹内容、读取、写入”的权限
D:\wwwroot为网站存放目录,apache用户需要“读取、写入”的权限。(如果需要不定时上传文件就需要写入权限,如果长期不上传可删除写入权限)
目录结构如图:
修改apache程序启动用户为apache后,如启动失败需要重新检测apache程序目录配置权限是否不够或遗漏配置的的情况。
具体无法正常启动可通过计算机管理的日志查看器进行检查。(如下图)
需要注意的问题:常见问题2和问题4
是因为LoadModule authz_host_module modules/mod_authz_host.so这个模块没有加载
原因:配置文件里面没有LoadModule php5_module modules/libphp5.so,而虚拟主机的配置文件中加载php_admin_value open_basedir /usr/vhome/x/y/z/xyz.com/:/usr/vhome/tmp 的设置。
cat access.log | grep -P '(01:5[7-9]|02:0[0-9]|02:1[0-8])'
Wrapper C:/Program cannot be accessed: (720002)\xcf\xb5\xcd\xb3\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xce\xc4\xbc\xfe\xa1\xa3
FcgidWrapper "C:/Program Files/PHPServer/Bin/PHP/php-cgi.exe"导致了这个错误的发生。
原因:如果FcgidWrapper 后面的路径有空格,会导致路径被截取到第1个空格的位置,从而无法正常运行。Apache 以fastcgi mod_fcgid方式PHP时出现 Wrapper D:/Program cannot be accessed: (720002)\xcf\xb5\xcd\xb3\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xce\xc4\xbc\xfe\xa1\xa3 是因为PHP的安装路径中包含空格,如D:\Program Files\PHPServer\Bin\PHP,这是Apache fastcgi mod_fcgid的一个Bug,只要将PHP安装到一个路径没有空格的目录即可,如F:\Web\PHPServer\Bin\PHP,也可以在每个空格前加反斜线\,如"C:\Program\ Files\php\php-cgi.exe",如果路径包含中文字符等非英文字符,那么必须将配置文件转码为utf-8,否则也会出错。详见:Apache facgid FcgidWrapper Wrapper cannot be accessed.
PHP安装路径如果包含空格,需要在每个空格前加一个\符号。(已实际测试该办法无效,强烈建议使用无空格的路径)
路径中的非英文字符时必须转码为utf-8。
原则上建议路径不要包含空格或中文字符。(强烈建议使用英文路径,本人使用英文路径,中文未尝试过)
请将以下配置中的路径修改为你电脑上面正确的路径。
参考文章:http://www.51-n.com/t-4335-1-1.html