从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

相关推荐
zx2859634008 小时前
Laravel 8.x 核心特性全面解析
php·laravel
Gh0st_Lx10 小时前
【6】为什么有了 HTTP/1.1 ,还要 HTTP/2 和 HTTP/3
网络协议·http·php
xingpanvip10 小时前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
灰子学技术12 小时前
Envoy TCP 层面的 Metric 指标分析
开发语言·网络·网络协议·tcp/ip·php
Johnstons13 小时前
TCP Reset(RST)异常是什么?一文讲透连接被动中断的识别方法、适用场景、与超时断开的边界及排查清单
网络协议·tcp/ip·php·es·抓包分析
REDcker1 天前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
运维全栈笔记1 天前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
KnowSafe1 天前
自动化+智能化:证书生命周期管理的双重革命
ssl·itrustssl·trustasia·证书自动化
REDcker1 天前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
云云只是个程序马喽1 天前
AI漫剧创作系统开发定制指南
人工智能·小程序·php