从0配置Apache+PHP+SSL开发环境

安装包准备

PHP安装与配置

php下载

PHP官网下载地址

  • 解压到安装目录,复制一份php.ini-production并重命名php.ini

修改配置

  • 指定扩展路径

  • 开启开发常用扩展(根据开发需求自行删掉注释符号;即可)

安装第三方拓展

第三方拓展官方收录地址

安装redis

redis下载地址


安装Xdebug

xdebug下载地址

bash 复制代码
[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.idekey=PHPSTORM

Apache

下载

httpd.conf配置

修改 SRVROOT 改成当前软件实际存放目录

增加默认解析文件

加载PHP

bash 复制代码
# 加载PHP模块(根据PHP版本调整,如php8.2)
LoadModule php_module "D:/MySoft/php/82/php8apache2_4.dll"

# 指定PHP配置文件路径(好像php8以上可以不用这行)
PHPIniDir "D:/MySoft/php/82"

# 关联PHP文件解析
AddType application/x-httpd-php .php

注意如果是php8以下,则LoadModule php_module需要修改为LoadModule php7_module如php7.4,则应该是
LoadModule php7_module "D:/MySoft/php/74/php7apache2_4.dll"

开启url重写功能

bash 复制代码
LoadModule rewrite_module modules/mod_rewrite.so

开启ssl以及缓存支持

bash 复制代码
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

配置ssl缓存

bash 复制代码
# 优化HTTPS性能:会话缓存
SSLSessionCache        shmcb:${SRVROOT}/logs/ssl_scache(512000)
SSLSessionCacheTimeout 300

你想知道配置 SSLSessionCache 和不配置它的核心区别,简单来说:配置后能大幅提升 HTTPS 访问性能、降低服务器负载;不配置则 HTTPS 仍能正常使用,但每次连接都要重新完成 TLS 握手,性能和体验会变差

一、先理解 TLS 握手的核心成本

当浏览器访问 HTTPS 网站时,客户端和 Apache 之间必须完成「TLS 握手」:

  1. 双方协商加密算法、验证 SSL 证书、生成会话密钥;
  2. 这个过程需要消耗 CPU 算力(尤其是证书验证),且单次握手耗时约 100-300ms;
  3. 如果没有缓存,同一客户端每次访问(甚至刷新页面)都要重新握手
二、配置 vs 不配置 SSLSessionCache 的核心区别
维度 配置 SSLSessionCache 不配置 SSLSessionCache
TLS 握手方式 首次完整握手,后续复用缓存的「会话票证/ID」,仅需"简化握手"(耗时 < 10ms) 每次访问都要完整 TLS 握手(耗时 100-300ms)
服务器 CPU 负载 低(仅首次握手消耗算力) 高(每次连接都要做证书验证、密钥协商)
客户端访问速度 快(简化握手减少延迟) 慢(每次都要等完整握手)
高并发表现 稳定(缓存复用降低资源消耗) 易卡顿(大量完整握手占用 CPU)
功能可用性 HTTPS 正常,且性能优化 HTTPS 功能正常,但无性能优化
三、通俗举例(帮你理解)
  • 配置了缓存:就像你去咖啡店办了会员卡,第一次进店需要实名登记(完整握手),之后每次进店只需出示会员卡(简化握手),不用重复登记;
  • 没配置缓存:每次进店都要重新实名登记、填信息,虽然也能进店消费(HTTPS 能访问),但每次都要花额外时间,咖啡店也需要反复核对信息(服务器耗资源)。
四、补充说明(新手易忽略)
  1. 不配置也不会报错 :Apache 只是会报 AH01873: Init: Session Cache is not configured 警告,但 HTTPS 核心功能不受影响;
  2. 缓存只对"同一客户端"生效:缓存的是客户端和服务器的会话信息,不同客户端之间不共享;
  3. 缓存大小建议(512000) 表示 512KB 缓存空间,足够支撑几千个并发会话,普通网站无需调整;如果是高并发场景(比如每秒数百次 HTTPS 请求),可适当调大(如 1024000)。
总结
  1. 核心区别 :配置 SSLSessionCache 是对 HTTPS 连接的性能优化,而非功能必需------不配置 HTTPS 也能用,但性能差、服务器负载高;配置后能复用 TLS 会话,大幅降低握手耗时和 CPU 消耗;
  2. 使用建议 :只要启用了 HTTPS(mod_ssl),就建议配置该指令,几乎无成本却能显著提升 HTTPS 体验;
  3. 关键规则 :该指令必须放在全局配置中(如 httpd.conf),不能放在 <VirtualHost> 内,否则会报语法错误。

配置虚拟主机

增加443端口监听(https)

加载虚拟主机配置

配置虚拟主机

conf/extra/httpd-vhosts.conf

bash 复制代码
# 1. 80端口http
<VirtualHost *:80>
    DocumentRoot "E:/wwwroot/www.test.com"
    ServerName www.test.com
    ErrorLog "logs/www.test.com-error.log"
    CustomLog "logs/www.test.com-access.log" common
</VirtualHost>

# 2. 80端口(HTTP)配置:仅做强制HTTPS跳转,不处理业务
<VirtualHost *:80>
    DocumentRoot "E:/wwwroot/www.thinkphp.com/public"
    ServerName www.thinkphp.com
    ErrorLog "logs/www.thinkphp.com-error.log"
    CustomLog "logs/www.thinkphp.com-access.log" common

    # 核心:开启重写引擎 + 强制HTTPS跳转规则
    RewriteEngine On
    # 匹配非HTTPS的请求
    RewriteCond %{HTTPS} off
    # 跳转到HTTPS地址(301永久重定向,SEO友好)
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]
</VirtualHost>

# 3. 443端口(HTTPS)配置:处理实际业务,必须配置证书
<VirtualHost *:443>
    DocumentRoot "E:/wwwroot/www.thinkphp.com/public"
    ServerName www.thinkphp.com
    ErrorLog "logs/www.thinkphp.com-ssl-error.log"
    CustomLog "logs/www.thinkphp.com-ssl-access.log" common

    # HTTPS核心配置(替换为你的证书实际路径)
    SSLEngine on
    # 证书文件(.crt 或 .pem)
    SSLCertificateFile "${SRVROOT}/conf/ssl/www.thinkphp.com+3.pem"
    # 私钥文件(.key)
    SSLCertificateKeyFile "${SRVROOT}/conf/ssl/www.thinkphp.com+3-key.pem"
    # 可选:CA证书链(如果是第三方证书,比如Let's Encrypt需要)
    # SSLCertificateChainFile "${SRVROOT}/conf/ssl/chain.pem"

    # 可选:TP框架需要的重写规则(如果框架伪静态失效可加)
    <Directory "E:/wwwroot/www.thinkphp.com/public">
        AllowOverride All
        Require all granted
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php/$1 [L]
    </Directory>
</VirtualHost>

开始安装Apache

管理员打开控制台切换到Apache目录

bash 复制代码
# 安装
httpd -k install
# 启动
httpd -k start
# 停止
httpd -k stop
# 重启
httpd -k restart

## 访问虚拟域名

注意虚拟域名还需要在C:\Windows\System32\drivers\etc\hosts添加解析127.0.0.1 www.thinkphp.com

相关推荐
JaguarJack17 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo17 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe2 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
longxiangam3 天前
Composer 私有仓库搭建
php·composer
上海云盾-高防顾问3 天前
DNS异常怎么办?快速排查+解决指南
开发语言·php
james的分享3 天前
大数据领域核心 SQL 优化框架Apache Calcite介绍
大数据·sql·apache·calcite
莫寒清3 天前
Apache Tika
java·人工智能·spring·apache·知识图谱