Nginx 配置HTTPS
HTTPS 是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
在 Nginx 中,配置 HTTPS 也非常的简单,我们首先需要准备好与我们域名关联的 HTTPS 证书,接着,再配置对应的证书目录即可。
Nginx配置HTTPS的详细过程涉及多个步骤,包括准备SSL证书、编辑Nginx配置文件、重启Nginx服务等。以下是对这些步骤的详细解析及案例:
一、准备SSL证书
-
获取证书:
-
可以从证书颁发机构(CA)购买SSL证书。
-
也可以使用免费证书服务,如Let's Encrypt,通过自动化工具(如Certbot)获取和续期证书。
-
证书文件:
-
SSL证书通常包括一个公钥证书文件(如
yourdomain.crt
或fullchain.pem
)和一个私钥文件(如yourdomain.key
或privatekey.pem
)。
二、编辑Nginx配置文件
-
定位配置文件:
-
Nginx的配置文件通常位于
/etc/nginx/nginx.conf
,或者可以在/etc/nginx/sites-available/
目录下创建新的配置文件,并通过链接到/etc/nginx/sites-enabled/
目录来启用。 -
编辑HTTPS服务器块:
示例配置如下:
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /path/to/your/fullchain.pem; # 证书文件路径
ssl_certificate_key /path/to/your/privatekey.pem; # 私钥文件路径
ssl_protocols TLSv1.2 TLSv1.3; # 推荐的TLS协议
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384';
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 其他配置...
}证书文件会作为公用实体發送到每台连接到服务器的客戶端,私钥文件作为安全实体,应该被存放在具有一定权限限制 的目录文件,并保证 Nginx 主进程有存取权限。
-
在Nginx配置文件中,添加一个或多个
server
块来监听443端口(HTTPS的默认端口)。 -
配置SSL证书和私钥的路径,以及其他SSL相关指令。
-
(可选)配置HTTP到HTTPS的重定向:
示例配置如下:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
} -
在Nginx中添加另一个监听80端口的
server
块,将所有HTTP请求重定向到HTTPS。
三、测试并重启Nginx
-
测试配置:
-
使用
nginx -t
命令测试Nginx配置文件的语法是否正确。 -
重启Nginx:
-
如果配置测试通过,使用
sudo systemctl reload nginx
(对于使用systemd的系统)或sudo service nginx reload
命令来重新加载Nginx配置。
四、验证HTTPS
-
在浏览器中输入你的域名(如
https://yourdomain.com
),检查是否成功通过HTTPS连接,并且没有显示任何证书错误。
五、Nginx HTTPS优化
减少CPU运算量
SSL 的运行计算需要消耗额外的 CPU 资源,一般多核处理器系统会运行多个工作进程,进程的数量不会少于可用的 CPU 核数。SSL 通讯过程中 “握手” 阶段的运算最占用 CPU 资源,有两个方法可以减少每台客户端的运算量:
-
激活 keepalive 长连接,一个连接发送更多个请求
-
复用 SSL 会话参数,在并行并发的连接数中避免进行多次 SSL 握手
这些会话会存储在一个 SSL 会话缓存里面,通过命令 ssl_session_cache 配置,可以使缓存在机器间共享,然后利用客戶端在握手阶段使用的 seesion id 去查询服务端的 session cathe(如果服务端设置有的话),简化握手阶段。
1M 的会话缓存大概包含 4000 个会话,默认的缓存超时时间为 5 分钟,可以通过使用 ssl_session_timeout 命令设置缓存超时时间。下面是一个拥有 10M 共享会话缓存的多核系统优化配置例子:
worker_processes auto;
http {
#配置共享会话缓存大小
ssl_session_cache shared:SSL:10m;
#配置会话超时时间
ssl_session_timeout 10m;
server {
listen 443 ssl;
server_name www.haicoder.net;
#设置长连接
keepalive_timeout 70;
ssl_certificate www.haicoder.net.crt;
ssl_certificate_key www.haicoder.net.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
#...
六、注意事项
-
SSL/TLS协议和加密套件:确保配置了强密码套件和安全的TLS协议版本。
-
HSTS(HTTP Strict Transport Security):可以启用HSTS来提高安全性,通过HTTP响应头告诉浏览器只能通过HTTPS访问网站。
-
证书续期:定期检查和续期SSL证书,以确保网站的安全性。
通过以上步骤,你可以在Nginx上成功配置HTTPS,为网站提供安全的HTTPS访问。