# Nginx教程 - 8 https配置
HTTPS 在HTTP的基础上增加了SSL/TLS(安全套接字层/传输层安全性)协议,用于在浏览器和服务器之间建立加密连接。这意味着所有通过HTTPS传输的数据(包括请求和响应)都会被加密,以防止数据在传输过程中被窃取或篡改。
HTTP 的 URL以 http://
开头,默认访问的是 80 端口,HTTPS 的 URL以 https://
开头,默认访问的是 443 端口。
HTTP 请求不需要证书,但是要进行 https 配置,首先得有 https 证书,要 https 证书,需要先有个域名,例如在阿里云上购买域名,然后可以在阿里云上创建免费的证书(有效期3个月,收费证书真的很贵),然后将证书下载下来,配置到 Nginx 中。
如何在阿里云上购买域名,创建免费的 https 证书,这里就不介绍了,因为还要涉及备案等操作。
下载 Nginx 的证书是一个压缩包,解压文件,其中包含一个 .key
秘钥文件和 .pem
证书文件。
将两个文件上传到 Nginx 的服务器,然后在 Nginx 的配置文件中的 server 中进行配置,我以我的 www.doubibiji.com
为例:
server {
listen 80; # 监听http的80端口
listen 443 ssl; # https默认使用443端口,请求的URL可以不写端口
server_name www.doubibiji.com; # 域名
# HTTP 重定向到 HTTPS
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
# SSL证书和私钥配置
ssl_certificate /home/doubi/www.doubibiji.com.pem; # 指定证书的路径
ssl_certificate_key /home/doubi/www.doubibiji.com.key; # 指定私钥的路径
# 其他SSL相关配置(可选)
# 配置SSL会话缓存,有助于减少SSL握手次数,从而提高性能
ssl_session_cache shared:SSL:1m;
# 会话参数在5分钟内是有效的,超过这个时间后,客户端需要发起一个新的SSL握手来获取新的会话参数。
ssl_session_timeout 5m;
# 自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# 这个指令用于指定在SSL握手过程中,如果客户端和服务器都支持多个加密套件,那么应该优先使用服务器配置的加密套件,默认开启
ssl_prefer_server_ciphers on;
#...其他配置
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
一个 server
是可以监听多个端口的,上面将 http 的请求重定向到 https。