从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

相关推荐
L1624762 小时前
nmcli 命令和手动修改网卡配置文件详细讲解(最后附带配置脚本参考学习)
服务器·网络·php
lkbhua莱克瓦242 小时前
Apache Maven全面解析
java·数据库·笔记·maven·apache
catchadmin2 小时前
PHP 应用性能分析 从假设到数据与修复优先级
php
Root_Hacker13 小时前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
码农水水14 小时前
京东Java面试被问:HTTP/2的多路复用和头部压缩实现
java·开发语言·分布式·http·面试·php·wpf
_童年的回忆_16 小时前
【PHP】关于守护进程报错:SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
开发语言·oracle·php
edisao17 小时前
六、 读者高频疑问解答 & 架构价值延伸
大数据·开发语言·人工智能·科技·架构·php
catchadmin17 小时前
Laravel12 + Vue3 的免费可商用 PHP 管理后台 CatchAdmin V5.1.0 发布 新增 AI AGENTS 配置
开发语言·php
xfan_me19 小时前
SSL证书与HTTPS:为什么你的网站必须启用加密连接?
网络协议·https·ssl