标签 Apache 下的文章

升级WampServer中Apache、PHP、MySQL版本

初到jjsj公司工作又近2个月。了解到公司从16年4月开始做EC的B2B商城。由于公司领导不懂技术。找到外包公司做了一个Java版本的系统短期快速上线后发现问题多多也找不到售后。功能修改的需求无法快速满足。又下线后重新采用PHP+ECShop重新开发了一套。前期Java版本在阿里云ECS CentOS上跑。后来ECShop上马又转到Windows Server 2008 R2 服务器环境用的是奇葩的IIS+PHP组合。确实是够折腾的。

三个月我把服务器上面的IIS卸载掉,转到WAMP环境(采用WampServer),我用的是WampServer2.0i.exe安装包,2009年发布的版本,包含:Apache2.2.11,PHP5.3.0,MySQL5.1.36。为什么要用这么老的版本?难道不怕security bug吗。非也非也。最新的ECShop源码2.7.3最高只能支持到PHP5.3。ECShop里面又很多引用新建对象代码:&new Object,这玩意儿在新版本PHP5.5及其以上的已经版本已经deprecated。

WampServer2.0i.exe里面的二进制都是采用VC6编译。而最新的一般都是VC9。这点需要注意。

虽然说AMP套件是跨平台开源软件,但实际上Windows平台一直都是被歧视的。所以找到对应版本的Win32 VC9 编译版确实是门学问。

这里:http://mirrors.cnnic.cn/apache//httpd/binaries/win32/ 有可以下载编译好的Win32版本。

Apache 2.2.11升级到2.2.31

到apachehaus下载 httpd-2.2.31-x86-r6.zip解压到D:\tunps.com\bin\apache\Apache2.2.31,将老版本(2.2.11)手动卸载。在cmd下运行:D:\tunps.com\bin\apache\Apache2.2.11\bin\httpd.exe -k uninstall,然后安装新版本:D:\tunps.com\bin\apache\Apache2.2.31\bin\httpd.exe -k install -n apache22,将老版本的conf目录覆盖到新版本的conf目录。修改PHP LoadModule的路径和ServerRoot:

ServerRoot "D:/tunps.com/bin/apache/apache2.2.31"

LoadModule php5_module "D:/tunps.com/bin/php/php5.3.29/php5apache2_2.dll"

然后重启Apahce让配置生效:D:\tunps.com\bin\apache\Apache2.2.31\bin\httpd.exe -k restart
注意:因为2.2.31用的是VC9编译,为了让httpd跑起来,必须确保服务器环境已经安装VC++ Redist 2008 SP1。

PHP 5.3.0升级到5.3.29

PHP也是同样的道理,官方php.net不提供win32而精致版,所以在apachelounge搜索到人家的编译版:

https://phpdev2.toolsforresearch.com/php-5.3.29-nts-Win32-VC9-x86.zip 
https://phpdev2.toolsforresearch.com/php-5.3.29-Win32-VC9-x86.zip 
https://phpdev2.toolsforresearch.com/php-5.3.29-nts-Win32-VC9-x64.zip 
https://phpdev2.toolsforresearch.com/php-5.3.29-Win32-VC9-x64.zip 

nts表示非线程安全,我们不需要这个。下载好之后解压到D:\tunps.com\bin\php\php5.3.29,将老版本PHP5.3.0的php.ini覆盖到5.3.29,并且覆盖一份到apache2.2.31\bin目录下。这样不用修改任何配置,可以直接使用。但是php.ini有一个地方还是要修改:

extension_dir = "D:/tunps.com/bin/php/php5.3.29/ext/"

MySQL 5.1.36升级到最新的5.7.16

因为PHP一般都是采用tcp socket和MySQL连接,所以兼容性要求并不高,哪怕PHP的MySQL扩展(php_mysqli.dll)还是5.0.8 2010年的版本,但还是可用。

到MySQL官网下载最新的MySQL win32压缩包(mysql-5.7.16-win32.zip),现在的MySQL安装包做得很大,有400MB左右,里面不仅仅包含二进制还是各种文档、各种语言的客户端连接library还有Visual Studio扩展等等。安装程序也不是十年那样的简陋,可以安装的过程中实现各种高级配置(端口、用户名、安全性设置 etc.)。

解压MySQL压缩包到D:\tunps.com\bin\mysql\mysql-5.7.16-win32,管理员cmd下安装MySQL:

mysqld --install mysql57

初始化数据:

mysqld --initialize

或者:

mysqld --initialize-insecure

没有加insecure的自动生成一个随机的root密码, root密码在:D:\tunps.com\bin\mysql\mysql-5.7.16-win32\data\<host name>.err 日志文件里面。加了insecure的,默认root没有密码。mysql -uroot -p登录后用

set password = password('tunps.com');

设置为新密码。

然后重新导入SQL文件即可。

如果不初始化mysql直接启动mysql服务会启动不起来,事件查看器eventvwr.msc报错:

failed to set datadir to D:\tunps.com\bin\mysql\mysql-5.7.16-win32\data\

phpMyAdmin 3.2.0.1升级到4.6.5.1

更炫的ajax操作,效率大为提升,下载后解压缩到D:\tunps.com\apps\phpMyAdmin-4.6.5.1-all-languages,修改D:\tunps.com\alias\phpmyadmin.conf里面Alias路径。

注意:以上所有的软件都是x86的。

Apache 2.4的httpd.conf模版

可以基于此文件按照你的需求进行修改。此配置是WampServer的默认配置加上了我自己的一些虚拟主机配置。一共176行。

ServerSignature On
ServerTokens Full
ServerRoot "D:/wamp/bin/apache/apache2.4.9"
Define APACHE24 Apache2.4
Listen 0.0.0.0:80
Listen [::0]:80

LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so

LoadModule php5_module "D:/wamp/bin/php/php5.5.12/php5apache2_4.dll"
#PHPIniDir D:/wamp/bin/php/php5.5.12

ServerAdmin admin@tunps.com
ServerName localhost:80
HostnameLookups Off
DocumentRoot "D:/wamp/www/"

<Directory />
AllowOverride none
Require all denied
</Directory>

<Directory "D:/wamp/www/">
Options Indexes FollowSymLinks
AllowOverride all
Require local
</Directory>

<IfModule dir_module>
DirectoryIndex index.php index.php3 index.html index.htm
</IfModule>

<Files ".ht*">
Require all denied
</Files>

ErrorLog "D:/wamp/logs/apache_error.log"
LogLevel warn

<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "D:/wamp/logs/access.log" combined
</IfModule>

<IfModule alias_module>
ScriptAlias /cgi-bin/ "D:/wamp/bin/apache/apache2.4.9/cgi-bin/"
</IfModule>


<Directory "D:/wamp/bin/apache/apache2.4.9/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>

<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-httpd-php .php
</IfModule>

#alias
Alias /phpmyadmin "D:/wamp/apps/phpmyadmin4.1.14/"
<Directory "D:/wamp/apps/phpmyadmin4.1.14/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
<IfDefine APACHE24>
Require local
</IfDefine>
<IfDefine !APACHE24>
Order Deny,Allow
Deny from all
Allow from localhost ::1 127.0.0.1
</IfDefine>
php_admin_value upload_max_filesize 128M
php_admin_value post_max_size 128M
php_admin_value max_execution_time 360
php_admin_value max_input_time 360
</Directory>

Alias /phpsysinfo "D:/wamp/apps/phpsysinfo3.1.12/"
<Directory "D:/wamp/apps/phpsysinfo3.1.12/">
Options Indexes FollowSymLinks
AllowOverride all
<IfDefine APACHE24>
Require local
</IfDefine>
<IfDefine !APACHE24>
Order Deny,Allow
Deny from all
Allow from localhost ::1 127.0.0.1
</IfDefine>
</Directory>

Alias /sqlbuddy "D:/wamp/apps/sqlbuddy1.3.3/"
<Directory "D:/wamp/apps/sqlbuddy1.3.3/">
Options Indexes FollowSymLinks
AllowOverride all
<IfDefine APACHE24>
Require local
</IfDefine>
<IfDefine !APACHE24>
Order Deny,Allow
Deny from all
Allow from localhost ::1 127.0.0.1
</IfDefine>
</Directory>

Alias /webgrind "D:/wamp/apps/webgrind1.0/"
<Directory "D:/wamp/apps/webgrind1.0/">
Options Indexes FollowSymLinks
AllowOverride all
<IfDefine APACHE24>
Require local
</IfDefine>
<IfDefine !APACHE24>
Order Deny,Allow
Deny from all
Allow from localhost ::1 127.0.0.1
</IfDefine>
</Directory>

#virtualhost
<VirtualHost *:80>
<Directory "d:/www/pagedown">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
ServerAdmin me@tunps.com
DocumentRoot "d:/www/pagedown"
ServerName pagedown
ServerAlias pagedown
ErrorLog "logs/pagedown-error.log"
CustomLog "logs/pagedown-access.log" common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin me@tunps.com
<Directory "d:/www/diary">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
DocumentRoot "d:/www/diary"
ServerName diary
ServerAlias diary
ErrorLog "logs/diary-error.log"
CustomLog "logs/diary-access.log" common
</VirtualHost>

我的httpd.conf模版,适用于Apache 2.2

适用于windows版本

  • 监听80端
  • 支持php
  • 支持虚拟主机
  • 支持Alias别名
  • 支持FancyIndex,支持Index的时根据文件类型显示图标。

适用于Apache 2.2。

ServerRoot "D:/wamp/bin/apache/apache2.2.17"

Listen 80

LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule php5_module "D:/wamp/bin/php/php5.2.11/php5apache2_2.dll"

ServerAdmin admin@localhost

ServerName localhost:80

DocumentRoot "D:/www/"

<Directory />
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
<Directory>

<IfModule dir_module>
DirectoryIndex index.php index.php3 index.html index.htm
<IfModule>

<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
<FilesMatch>

ErrorLog "D:/wamp/logs/apache_error.log"
LogLevel info


DefaultType text/plain

<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#very important!!
AddType application/x-httpd-php .php
<IfModule>

<IfModule mod_php5.c>
PHPINIDir "../../php/php5.3.5/"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule>

#autoindex
Alias /icons "D:/wamp/bin/apache/Apache2.2.17/icons/"
<Directory "D:/wamp/bin/apache/Apache2.2.17/icons/">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
<Directory>
IndexOptions FancyIndexing VersionSort

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif



#virutal hosting
NameVirtualHost *

<VirtualHost *>
DocumentRoot "D:/www"
ServerName default:80
ErrorLog logs/default-error_log
<VirtualHost>

<VirtualHost *>
<Directory "D:/www/terminalmap">
Options -Indexes FollowSymLinks
Allow from all
AllowOverride All
<Directory>
ServerAdmin admin@terminalmap
DocumentRoot "D:/www/terminalmap"
ServerName terminalmap:80
ServerAlias terminalmap
ErrorLog logs/terminalmap-error_log
<VirtualHost>

<VirtualHost *>
<Directory "D:/www/zencart">
Options -Indexes FollowSymLinks
Allow from all
AllowOverride All
<Directory>
ServerAdmin admin@zencart
DocumentRoot "D:/www/zencart"
ServerName zencart:80
ServerAlias zencart
ErrorLog logs/zencart-error_log
<VirtualHost>

<VirtualHost *>
<Directory "D:/www/wp">
Options -Indexes FollowSymLinks
Allow from all
AllowOverride All
<Directory>
ServerAdmin admin@wp
DocumentRoot "D:/www/wp"
ServerName wp:80
ServerAlias wp
ErrorLog logs/wp-error_log
<VirtualHost>

#phpmyadmin Alias
Alias /phpmyadmin "D:/wamp/apps/phpmyadmin3.3.9/"
<Directory "D:/wamp/apps/phpmyadmin3.3.9/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order Deny,Allow
Allow from all
<Directory>

#sqlbuddy Alias
Alias /sqlbuddy "D:/wamp/apps/sqlbuddy1.3.2/"
<Directory "D:/wamp/apps/sqlbuddy1.3.2/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order Deny,Allow
Allow from all
<Directory>

#webgrind Alias
Alias /webgrind "D:/wamp/apps/webgrind1.0/"
<Directory "D:/wamp/apps/webgrind1.0/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order Deny,Allow
Allow from all
<Directory>

mod_rewrite引起的internal server error

虚拟主机网站根目录下有.htaccess。而虚拟主机的配置是:

<VirtualHost *>
    <Directory "D:/www/xxx">
        Options -Indexes FollowSymLinks
        Allow from all
        AllowOverride All
    </Directory>
    ServerAdmin admin@xxx
    DocumentRoot "D:/www/xxx"
    ServerName xxx:80
    ServerAlias xxx
    ErrorLog logs/xxx-error_log
</VirtualHost>

因为是AllowOverride是All,可以.htaccess文件重载了这个虚拟主机的配置。然后.htaccess里面有Rewrite模块的指令。而httpd.conf并没有LoadModule mod_rewrite.so。所有出现了500 Internal Server Error。

解决方法要么AllowOverride修改为None,要么删除.htaccess,要么,将mod_rewrite加载进来。

关于apache Alias斜杠/的实验

Alias /icons/ "D:/wamp/bin/apache/Apache2.2.17/icons/"

访问http://localhost/icons/正常,访问http://localhost/icons 404

Alias /icons "D:/wamp/bin/apache/Apache2.2.17/icons"

访问http://localhost/icons自动加上后面的/,正常。

Alias /icons "D:/wamp/bin/apache/Apache2.2.17/icons/"

访问http://localhost/icons自动加上后面的/,正常。

Alias /icons/ "D:/wamp/bin/apache/Apache2.2.17/icons"

访问http://localhost/icons/xx.gif,404,访问http://localhost/icons 404 Not Found。

所以结论是Alias的两个路径加不加斜杠必须前后匹配。