如题

下载 Apache windows 编译版

有两个网站提供 windows 环境的编译版下载

  1. Apache Haus Downloads
  2. Apache 2.4 VS16 Windows Binaries and Modules

本文下载的版本:httpd-2.4.46-win64-VS16

下载 PHP5.6.40

与 nginx 不一样,Apache 要下载线程安全版,即 ts 版。
在官方的下载页面,已经找不到5.x的版本了,只能到 php 所有版本下载列表页面 下载

本文下载的,php5.6.40 针对 Apache 的版本:php-5.6.40-Win32-VC11-x64

配置 PHP5.6.40

将 PHP 解压至目录:c:/dev/php5.6.40-TS
复制 php.ini-development 为 php.ini,修改配置。

以后如果需要修改 php.ini, 修改之后,重启 apache 服务即可生效。

常规配置

  1. 找到下面的配置项,并作相应的修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    error_log = c:/dev/php5.6.40-TS/logs/php_errors.log

    ; 以下配置,把前面的注释去掉
    extension_dir = "c:/dev/php5.6.40-TS/ext"
    date.timezone = "Asia/Shanghai"
    cgi.fix_pathinfo=1
    extension=php_gd2.dll
    extension=php_mysqli.dll
    extension=php_openssl.dll
    extension=php_pdo_mysql.dll
  2. 在 [opcache] 下面添加如下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ; 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

开启 curl

如果需要开启 curl,还需要做如下操作:

  1. 找到 extension=php_curl.dll,把前面的注释去掉。
  2. 把 PHP 根目录下的,下面三个文件放到 path 环境变量包含的目录下,或者直接复制到 Apache 下的 bin 目录下也行。
    • libeay32.dll
    • ssleay32.dll
    • libssh2.dll
  3. 重启 Apache

查看 puhInfo(),curl 如下:

配置 XDebug

下载列表,找到对应的版本,记得是针对 PHP 5.6 线程安全版(带 ts 的版本)

本文下载的版本:php_xdebug-2.5.5-5.6-vc11-x86_64.dll

扩展:PHPStorm 官方安装 debug 的帮助页面

下载之后,剪切至 PHP 的 ext 目录,在 php.ini 最后添加如下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[xdebug]
zend_extension = c:/dev/php5.6.40-TS/ext/php_xdebug-2.5.5-5.6-vc11-x86_64.dll
;开启远程调试
xdebug.remote_enable=1
xdebug.profiler_enable=1
;xdebug.profiler_enable=off
xdebug.profiler_enable_trigger=off
xdebug.profiler_output_name=cachegrind.out.%t.%p
xdebug.profiler_output_dir="tmp"
xdebug.show_local_vars=0
xdebug.remote_connect_back=1

;开启自动跟踪
xdebug.auto_trace=1
;开启异常跟踪
xdebug.show_exception_trace=1
;开启异常跟踪
xdebug.remote_autostart=1
;收集变量
xdebug.collect_vars=1
;收集参数
xdebug.collect_params=1
;trace输出路径
xdebug.trace_output_dir="tmp/xdebug"
;以下三个分别是主机、端口、句柄
xdebug.remote_host="localhost"
;注意,这里的端口,在 nginx 环境需要手动运行 php-cgi,而php-cgi 的商品默认为 9000,所以这里需要配置 xcebug 为不同的端口。
;但在 Apache 环境,不需要运行 php-cgi,所以,不存在端口冲突,用 xdebug 的默认端口 9000 即可,这样也不用修改 PHPStorm 的配置。
;xdebug.remote_port=9001
xdebug.remote_handler="dbgp"

配置 Apache 支持 PHP

nginx 支持 PHP 需要先运行 php-cgi,而 Apache 只要配置好就可自动支持 php。

  1. 在 http.conf 文件中 LoadModule 的最后一行添加如下内容:

    1
    2
    3
    4
    5
    6
    # added manual
    Define PHPROOT c:/dev/php5.6.40-TS
    LoadModule php5_module ${PHPROOT}/php5apache2_4.dll
    AddType application/x-httpd-php .php .html .htm
    PHPIniDir ${PHPROOT}
    LoadFile ${PHPROOT}/libssh2.dll
  2. #ServerName www.example.com:80,改为:ServerName localhost:80

  3. DirectoryIndex index.html 改为 DirectoryIndex index.php index.html

配置 Apache 的虚拟主机

找到下面的配置,去掉前面的#,配置虚拟主机需要用到 httpd-vhosts.conf

1
Include conf/extra/httpd-vhosts.conf

修改 httpd-vhosts.conf,添加如下内容
建议:将 php 项目都放到变量 devProjectRoot 指定的目录下,这个目录下的子目录不用单独配置访问权限,否则需要单独配置目录访问权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
Define devProjectRoot "C:/workspace/php"

<Directory "${devProjectRoot}">
AllowOverride None
Require all granted
</Directory>

<VirtualHost *:80>
DocumentRoot "${devProjectRoot}/dz"
ServerName dz.dev.com
ErrorLog "logs/dz.dev.com-error.log"
CustomLog "logs/dz.dev.com-access.log" common
</VirtualHost>

完整配置一个虚拟主机

以一个静态网站为例

1
2
3
4
5
6
7
8
9
10
11
12
Define 5k8Root "C:/workspace/5k8.top"
<Directory "${5k8Root}/public">
AllowOverride None
Require all granted
</Directory>

<VirtualHost *:80>
DocumentRoot "${5k8Root}/public"
ServerName docs.5k8.top
ErrorLog "logs/docs.5k8.top-error.log"
CustomLog "logs/docs.5k8.top-access.log" common
</VirtualHost>

一个网站多个域名

nginx 可以直接绑定多个域名,用空格隔开即可,Apache 需要通过 ServerAlias 来添加额外的域名,如下:

1
2
3
4
5
6
7
<VirtualHost *:80>
DocumentRoot "${5k8Root}/public"
ServerName docs.5k8.top
ServerAlias www.5k8.top doc.5k8.top
ErrorLog "logs/docs.5k8.top-error.log"
CustomLog "logs/docs.5k8.top-access.log" common
</VirtualHost>

安装 VC11 运行库

暂时没有找到官网下载地址,请自行百度并下载,或者从这里下载:链接:https://pan.baidu.com/s/1qSSk4AzcaEQxWxjCTVVWEQ 提取码:8fu2

安装 Apache 作为 windows 服务

以管理员身份运行 cmd,进入 Apache 的解压目录下的 bin 目录,执行命令 httpd -k install -n Apache

1
2
3
4
5
C:\dev\Apache24\bin>httpd -k install -n Apache
Installing the 'Apache' service
The 'Apache' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.

对应的卸载命令:httpd -k uninstall -n Apache

请忽略最后一行带 Errors 的提示: Errors reported here must be corrected before the service can be started.,这一行只是一个提示,意思是在服务启动前,必须把这里显示的错误改好,如果下面没有别的提示,则表示配置已经成功了。

启动 apache 服务:

1
2
3
C:\dev\Apache24\bin>net start apache
Apache 服务正在启动 ...
Apache 服务已经启动成功。

检查 Apache 的配置是否正确

使用命令:httpd.exe -n "apache" -t

1
2
C:\dev\Apache24\bin>httpd.exe -n "apache" -t
Syntax OK

c:\dev\Apache24\bin\httpd.exe -n "apache" -t

配置 ssl 站点(https 开头,非 http 开头)

  1. 准备好针对 Apache 的证书,建议放到 Apache 根目录下的 cert 目录,后面的配置信息会指到这个目录下
  2. 修改 httpd.conf,去掉下面配置项前面的注释,就是去掉前面的 #

    1
    2
    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
    LoadModule ssl_module modules/mod_ssl.so
  3. conf/extra 目录添加一个用于配置 ssl 站点的文件,比如:httpd-vhosts-ssl.conf

  4. 在 httpd.conf 下添加一行:Include conf/extra/httpd-vhosts-ssl.conf
  5. 修改 httpd-vhosts-ssl.conf,添加站点配置,例子:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Listen 443
    Define devProjectRoot "C:/workspace/php"
    Define certRoot "C:/dev/Apache24/cert"

    <Directory "${devProjectRoot}/">
    AllowOverride all
    Require all granted
    </Directory>

    <VirtualHost *:443>
    DocumentRoot "${devProjectRoot}/wkb-oms-client"
    ServerName pdd.wangkebao.net:443
    SSLEngine on
    SSLCertificateFile ${certRoot}/5973377_pdd.wangkebao.net_public.crt
    SSLCertificateKeyFile ${certRoot}/5973377_pdd.wangkebao.net.key
    SSLCertificateChainFile ${certRoot}/5973377_pdd.wangkebao.net_chain.crt
    ErrorLog "logs/pdd.wangkebao.net-error.log"
    CustomLog "logs/pdd.wangkebao.net-access.log" common
    </VirtualHost>