# 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

一个 server 是可以监听多个端口的,上面将 http 的请求重定向到 https。