在 Ubuntu 上,“php-fpm 加密”通常不是指“加密 php-fpm 本身”,而是指保护 php-fpm 的通信或访问。常见场景和做法如下:
php-fpm 默认通过 Unix Socket 或 TCP 端口 与 Web 服务器通信。
php-fpm 默认就是 Unix socket,不走网络,无需加密:
listen = /run/php/php8.2-fpm.sock
权限控制:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
✅ 安全性高
❌ 不能跨机器
php-fpm 本身不支持 TLS,你需要:
sudo apt install stunnel4
示例(php-fpm 监听 9000,stunnel 加密):
[php-fpm]
accept = 9443
connect = 127.0.0.1:9000
cert = /etc/ssl/certs/php-fpm.pem
Web 服务器连接 9443 端口。
ssh -L 9000:remote:9000 user@remote
Web 服务器连 127.0.0.1:9000
php-fpm 有 status 和 ping,建议:
pm.status_path = /status
ping.path = /ping
Nginx 中限制访问:
location ~ ^/(status|ping)$ {
allow 127.0.0.1;
deny all;
}
或加 Basic Auth + HTTPS。
php-fpm 不处理 HTTPS,由 Nginx 负责:
server {
listen 443 ssl;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
如果你是指“php-fpm 配置文件加密”:
❌ php-fpm 不支持配置加密
✅ 正确做法:
640root:www-data| 问题 | 真相 |
|---|---|
| php-fpm 能直接 TLS 吗 | ❌ 不能 |
| 需要加密 socket 吗 | 本机不需要 |
| HTTPS 由谁负责 | Nginx / Apache |
| php 代码能加密吗 | 可用 Swoole/ionCube(非 php-fpm 功能) |
用户
↓ HTTPS
Nginx
↓ Unix Socket
php-fpm
↓
MySQL (TLS)
如果你能具体说一下:
我可以给你精确命令级配置。