php网站https配置核心在于web服务器(apache/nginx)加载证书、启用tls并透传https状态给php,分四步:①用certbot获取let’s encrypt证书;②在服务器配置中绑定fullchain.pem和privkey.pem并启用443端口;③配置80端口301跳转https并修复混合内容;④通过fastcgi_param https on(nginx)或setenvif(apache)确保$_server['https']正确识别。

PHP网站搭建时HTTPS证书配置,核心不在PHP代码本身,而在于Web服务器(Apache或Nginx)能否正确加载证书、启用TLS加密,并把安全上下文准确传递给PHP。整个过程分四步走,每一步都直接影响是否显示锁图标、是否出现混合内容警告、以及PHP逻辑能否正确识别HTTPS。
获取并安装受信SSL证书
生产环境强烈推荐Let’s Encrypt免费证书,它被所有主流浏览器信任,且支持自动续期。
- 安装Certbot:
sudo apt install certbot python3-certbot-nginx(Nginx)或python3-certbot-apache(Apache) - 一键申请并自动配置(以Nginx为例):
sudo certbot --nginx -d example.com -d www.example.com - 证书默认存于
/etc/letsencrypt/live/example.com/,包含两个关键文件:fullchain.pem(证书链,含根证书和中间证书)privkey.pem(私钥,权限必须设为600:chmod 600 privkey.pem)
在Web服务器中绑定证书并启用HTTPS
PHP不读取证书,Web服务器才是实际执行TLS握手的一方。配置错误会导致443端口无法响应或证书不被信任。
-
Nginx:在server块中添加
listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
-
Apache:确认已启用mod_ssl(
a2enmod ssl),在虚拟主机中写入SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
- 配置后务必验证语法:
nginx -t或apachectl configtest,再重启服务。
强制HTTP全站跳转HTTPS并清理混合内容
仅开启443端口不够,用户仍可能通过HTTP访问,导致明文传输风险。
-
Nginx:新增一个80端口server块
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } -
Apache:在HTTP虚拟主机中加入重定向规则
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] - 同时检查前端资源(CSS、JS、图片、表单action等)是否仍含
http://链接——这些会触发浏览器“不安全内容”警告,需统一改为相对协议(//example.com/xxx)或硬编码https://
让PHP正确识别HTTPS上下文
很多PHP逻辑依赖$_SERVER['HTTPS']判断协议,但该变量不会自动生效,必须由Web服务器显式传递。
-
Nginx + PHP-FPM:在
location ~ \.php$块内添加fastcgi_param HTTPS on;
-
Apache:若使用反向代理(如CDN或Nginx前置),需补充
SetEnvIf X-Forwarded-Proto https HTTPS=on
- PHP中判断建议用双重校验:
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') || ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') === 'https';这样可兼容直连与代理场景,避免URL生成、Cookie标记(
secure)、重定向等出错。
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











