配置PHP网站HTTPS需先获取SSL证书(如Let's Encrypt),再在Apache或Nginx中启用SSL并绑定证书文件,最后设置HTTP自动跳转至HTTPS,PHP程序通常无需修改,但应注意安全Cookie设置与协议判断。

给PHP网站配置HTTPS,核心是安装SSL证书并启用SSL支持。只要服务器正确配置,PHP程序无需修改就能通过HTTPS安全传输数据。下面介绍完整流程。
获取SSL证书
要启用HTTPS,必须先拥有SSL证书。常见方式有:
-
• 免费证书:推荐使用Let's Encrypt,有效期90天,可自动续期。
• 商业证书:从阿里云、腾讯云、DigiCert等机构购买,适合企业级应用。
• 自签名证书:开发测试可用,浏览器会提示不安全,不适合生产环境。
以Let's Encrypt为例,使用Certbot工具申请:
sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com执行后会在/etc/letsencrypt/live/yourdomain.com/生成证书文件:fullchain.pem(公钥)和privkey.pem(私钥)。
立即学习“PHP免费学习笔记(深入)”;
配置Web服务器启用HTTPS
PHP运行依赖Web服务器,常见为Apache或Nginx。需在服务器中加载SSL模块并绑定证书。
Apache 配置:
LoadModule ssl_module modules/mod_ssl.so编辑虚拟主机配置(通常在/etc/apache2/sites-available/default-ssl.conf):
ServerName yourdomain.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
启用SSL站点并重启:
a2ensite default-sslsystemctl restart apache2
Nginx 配置:
编辑站点配置文件(如/etc/nginx/sites-available/php-site):
server {listen 443 ssl;
server_name yourdomain.com;
root /var/www/html;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
检查配置并重启:
nginx -tsystemctl reload nginx
强制HTTP跳转到HTTPS
为确保所有请求都加密,建议将HTTP自动重定向到HTTPS。
Apache:在80端口的虚拟主机中添加:
RewriteEngine OnRewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Nginx:新增一个HTTP服务器块:
server {listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
PHP程序中的适配建议
大多数PHP程序无需修改代码即可运行在HTTPS下。但以下几点需要注意:
-
• 使用相对路径或协议无关URL(如//yourdomain.com/image.jpg)避免混合内容警告。
• 检查
$_SERVER['HTTPS']判断是否处于安全连接。• 设置Cookie时添加
secure和httponly属性:setcookie('name', 'value', 0, '/', '', true, true);• 若后端通过反向代理(如CDN),可能需根据
HTTP_X_FORWARDED_PROTO判断协议:if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') $_SERVER['HTTPS'] = 'on';
基本上就这些。证书安装后记得设置自动续期(Let's Encrypt推荐用cron定时执行renew命令),保持网站长期安全可用。











