nginx 1.26.2 与 php 8.4.1 共撑 https 站点需三步:编译启用 --with-http_ssl_module;配置 server { listen 443 ssl; ssl_certificate ...; } 并正确指向 pem 证书与私钥;通过 fastcgi_pass 将 php 请求转发至 php-fpm(如 unix:/run/php/php8.4-fpm.sock),由 nginx 完成 tls 解密后以明文 http 交予 php 处理。

要让 Nginx 1.26.2 和 PHP 8.4.1 共同支撑一个 HTTPS 站点,核心是三件事:Nginx 编译时启用 SSL 模块、正确配置 HTTPS server 块、确保 PHP-FPM 正常接收并处理经由 HTTPS 转发的请求。PHP 本身不直接处理 TLS,所有加密解密由 Nginx 完成,它只负责把解密后的 HTTP 请求安全地交给 PHP-FPM。
编译安装 Nginx 1.26.2 并启用 HTTPS 支持
源码安装是最可控的方式,尤其在生产环境。注意必须显式开启 http_ssl_module,否则无法解析 ssl 相关指令:
- 先装好依赖(Ubuntu/Debian):
sudo apt update && sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev - 下载并解压:
wget https://nginx.org/download/nginx-1.26.2.tar.gz && tar -zxvf nginx-1.26.2.tar.gz && cd nginx-1.26.2 - 配置编译参数(关键含 SSL 和常用模块):
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre - 编译并安装:
make && sudo make install
准备证书并验证格式
Nginx 要求证书为 PEM 格式,私钥不能带密码。若你已有商业证书或 Let’s Encrypt 证书,确认以下两点:
- 证书文件(如 fullchain.pem)应包含:域名证书 + 所有中间 CA 证书(按顺序拼接)
- 私钥文件(如 privkey.pem)开头必须是 -----BEGIN RSA PRIVATE KEY----- 或 -----BEGIN PRIVATE KEY-----,且无密码保护
(可用 openssl rsa -in privkey.pem -check 验证) - 测试证书与私钥是否匹配:
openssl x509 -noout -modulus -in fullchain.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
两个输出的 MD5 值必须一致
Nginx 配置 HTTPS + PHP 8.4.1 代理
编辑 /usr/local/nginx/conf/nginx.conf 或在 conf/conf.d/ 下新建站点配置(如 myapp.conf):
- 监听 443 端口,启用 HTTP/2,指定证书路径:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
- 将 PHP 请求交由本地 PHP-FPM 处理(假设 PHP 8.4.1 已通过 fpm 方式运行):
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000; # 或 unix:/run/php/php8.4-fpm.sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
} - 可选:强制 HTTP 跳转 HTTPS:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
检查与启动
每一步修改后都建议验证,避免服务启动失败:
- 检查语法:
/usr/local/nginx/sbin/nginx -t - 重载配置(不中断服务):
/usr/local/nginx/sbin/nginx -s reload - 确认 PHP-FPM 已运行且监听端口或 socket(例如:sudo systemctl status php8.4-fpm)
- 用浏览器访问 https://example.com,或命令行验证:
curl -I https://example.com --insecure(忽略证书验证)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











