在 Ubuntu 上给 PHP 项目配置 HTTPS,通常不是直接“配置 PHP”,而是配置 Web 服务器(Apache 或 Nginx)使用 HTTPS,然后 PHP 自然就在 HTTPS 下运行了。
下面分别说明 Apache 和 Nginx 的常见做法。
sudo apt update
sudo apt install certbot
sudo apt install python3-certbot-apache
sudo certbot --apache
sudo apt install python3-certbot-nginx
sudo certbot --nginx
Certbot 会自动:
✅ 完成后访问 https://你的域名 即可,PHP 已运行在 HTTPS 下。
sudo a2enmod ssl
sudo systemctl restart apache2
sudo mkdir -p /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/apache2/ssl/apache.key \
-out /etc/apache2/ssl/apache.crt
编辑站点配置:
sudo nano /etc/apache2/sites-available/your-site.conf
示例:
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
</VirtualHost>
启用站点:
sudo a2ensite your-site.conf
sudo systemctl restart apache2
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
sudo nano /etc/nginx/sites-available/your-site
示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
root /var/www/html;
index index.php index.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
启用并重启:
sudo ln -s /etc/nginx/sites-available/your-site /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
echo "HTTPS";
}
if (empty($_SERVER['HTTPS'])) {
header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit;
}
如果你能告诉我:
我可以给你一份完全对应的配置文件。