实现LNMP(Linux + Nginx + MySQL + PHP/Perl/Python)环境下全站HTTPS访问,主要包括以下几个步骤:
1. 获取SSL证书
首先,你需要获取有效的SSL证书。你可以通过以下途径获取:
- 权威证书颁发机构(CA):如Comodo、GlobalSign、Let’s Encrypt等,其中Let’s Encrypt提供免费的SSL证书,但需要每隔一段时间手动更新。
- 自签名证书:仅适用于内部测试环境,生产环境不推荐使用。
2. 配置Nginx
-
安装SSL模块:
确保Nginx已安装并启用了SSL模块。大多数情况下,Nginx在编译时就已经包含了SSL模块,如果没有,需要重新编译并启用。 -
配置HTTPS服务器块:
在Nginx的配置文件(通常是/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
)中,配置一个监听443端口(HTTPS默认端口)的服务器块。
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
# SSL证书配置
ssl_certificate /path/to/your/certificate.pem; # 证书文件路径
ssl_certificate_key /path/to/your/private.key; # 私钥文件路径
# SSL配置选项
ssl_protocols TLSv1.2 TLSv1.3; # 支持的SSL/TLS协议版本
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; # 加密套件
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# HTTP严格传输安全(HSTS)配置
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
# 其他配置,如location、root、index、proxy_pass等
# ...
}
- 强制HTTP跳转到HTTPS:
创建或修改监听80端口的HTTP服务器块,将所有HTTP请求重定向到HTTPS。
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
3. 重启Nginx服务
保存并退出配置文件后,执行以下命令重启Nginx服务以应用配置变更。
sudo systemctl restart nginx
4. 测试和验证
打开浏览器,输入https://yourdomain.com
,若能正常显示网页且浏览器地址栏显示锁图标(表示连接已加密),则说明HTTPS配置成功。
5. 验证证书有效性
在浏览器中查看证书详情,确保证书信息无误且由受信任的CA颁发。对于Let’s Encrypt证书,可以在证书详情中查看是否过期,并关注自动续期提醒。
至此,你已经在LNMP环境下实现了全站HTTPS访问。当然,具体的配置可能因业务需求有所不同,例如,你可能还需要配置SSL会话缓存、OCSP stapling、以及其他安全相关的设置。