• Ubuntu Nginx 配置 SSL 证书


    首先需要在 Ubuntu安装 Nginx 服务, 打开终端执行以下命令:

    $ sudo apt update
    $ sudo apt install nginx -y
    
    • 1
    • 2

    然后启动 Nginx 服务并设置为开机时自动启动, 执行以下命令:

    $ sudo systemctl start nginx
    $ sudo systemctl enable nginx
    
    • 1
    • 2

    最后再验证一下 Nginx 服务的当前状态, 执行以下命令:

    $ sudo systemctl status nginx
    $ sudo systemctl is-active nginx
    
    • 1
    • 2

    下载证书

    从云服务提供商处下载适用 NginxSSL 证书文件, 以腾讯云为例, 如果有一个 xxx.xxx 的域名, 下载到本地的文件夹名称为 xxx.xxx_nginx, 文件夹内包含下面四个证书文件:

    • xxx.xxx_bundle.crt
      • 根证书交叉文件
    • xxx.xxx_bundle.pem
      • 使用pem编码的证书文件
    • xxx.xxx.csr
      • 证书签名请求文件
    • xxx.xxx.key
      • 私钥公钥对文件

    进入到 Nginx 服务的配置目录下, 创建一个 xxx.xxx_nginx 目录并进入该目录下, 然后以管理员身份下载证书文件:

    $ cd /etc/nginx
    $ sudo mkdir xxx.xxx_nginx
    $ cd xxx.xxx_nginx
    $ sudo [证书下载请求地址]
    
    • 1
    • 2
    • 3
    • 4

    证书文件下载完成后可以通过 ls -l 查看一下刚刚下载好的证书文件。

    配置代理

    进入到 Nginx 配置目录下 conf.d 目录, 创建一个 xxx.xxx_nginx.conf 配置文件, 并开始编辑配置文件:

    cd /etc/nginx/conf.d
    sudo touch xxx.xxx_nginx.conf
    sudo vim xxx.xxx_nginx.conf
    
    • 1
    • 2
    • 3

    假设 XXX 为当前服务的名称, 开始配置代码。

    动态服务配置

    upstream XXX {
        # 本地服务地址
        server 127.0.0.1:10086;
    }
    
    server {
        listen 80;
        server_name xxx.xxx;
        # 把 HTTP 的域名请求转成 HTTPS
        return 301 https://$host$request_uri;
    }
    
    server {
        # SSL 访问端口号为 443
        listen 443 ssl;
        # 填写绑定证书的域名
        server_name xxx.xxx;
        # 证书文件名称
        ssl_certificate xxx.xxx_nginx/xxx.xxx_bundle.crt;
        # 私钥文件名称
        ssl_certificate_key xxx.xxx_nginx/xxx.xxx.key;
        ssl_session_timeout 5m;
        # 请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3;
        # 请按照以下套件配置, 配置加密套件, 写法遵循 openssl 标准
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
            # 网站主页路径. 此路径仅供参考, 具体请您按照实际目录操作
            # 例如, 您的网站运行目录在/etc/www下, 则填写/etc/www
            # root html;
            # index  index.html index.htm;
            proxy_pass http://XXX;
            proxy_http_version 1.1;
            proxy_redirect off;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_send_timeout 120s;
            proxy_read_timeout 240s;
            # 最大允许上传 10~20000 MB 的内容
            client_max_body_size 10m;
            # 解决 HTTPS 站点里面引用 HTTP 资源的异常
            add_header Content-Security-Policy upgrade-insecure-requests;
        }
    }
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    静态服务配置

    server {
        # SSL 访问端口号为 443
        listen 443 ssl; 
        # 填写绑定证书的域名
        server_name xxx.xxx; 
        # 证书文件名称
        ssl_certificate xxx.xxx_nginx/xxx.xxx_bundle.crt;
        # 私钥文件名称
        ssl_certificate_key xxx.xxx_nginx/xxx.xxx.key;
        ssl_session_timeout 5m;
        # 请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3; 
        # 请按照以下套件配置,配置加密套件, 写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        location / {
            # 网站主页路径。此路径仅供参考, 具体请您按照实际目录操作。
            # 例如,您的网站运行目录在/etc/www下, 则填写/etc/www。
            root /.../.../.../app;
            index index.html;
        }
        location /static {
            alias /.../.../.../static;
        }
    }
    
    • 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

    代理到目标服务

    server {
        listen 80;
        server_name xxx.xxx;
        # 把 HTTP 的域名请求转成 HTTPS
        return 301 https://$host$request_uri;
    }
    
    server {
        # SSL 访问端口号为 443
        listen 443 ssl;
        # 填写绑定证书的域名
        server_name xxx.xxx;
        # 证书文件名称
        ssl_certificate xxx.xxx_nginx/xxx.xxx_bundle.crt;
        # 私钥文件名称
        ssl_certificate_key xxx.xxx_nginx/xxx.xxx.key;
        ssl_session_timeout 5m;
        # 请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3;
        # 请按照以下套件配置, 配置加密套件, 写法遵循 openssl 标准
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
            # 网站主页路径. 此路径仅供参考, 具体请您按照实际目录操作
            # 例如, 您的网站运行目录在/etc/www下, 则填写/etc/www
            # root html;
            # index  index.html index.htm;
            # https://api.n.n.com/ 为目标服务
            proxy_pass https://api.n.n.com/;
            proxy_ssl_server_name on;
            proxy_set_header Host api.n.n.com;
            # 保证 stream 请求时 EventSource 类型响应的输出
            proxy_set_header Connection '';
            proxy_http_version 1.1;
            chunked_transfer_encoding off;
            proxy_buffering off;
            proxy_cache off;
        }
    }
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    重启服务

    为了使上面的配置生效, 需要检测配置文件的有效性, 并且重启 Nginx 服务:

    $ sudo nginx -t
    $ sudo nginx -s reload
    
    • 1
    • 2

    最后就可以验证一下 https://xxx.xxx 是否可以成功访问。

  • 相关阅读:
    微信第三方平台开发重点概念流程梳理
    CSS绘制各种三角形
    芯天下在创业板过会:预计全年收入将达到10亿元,净利润约2亿元
    写在前面(ShenYu)
    蓝牙资讯|Q2中国蓝牙耳机市场发布,搭载苹果Find My的蓝牙耳机正逐步推出
    【Redis】事务和锁机制
    微信小程序template界面模板导入
    Kafka开发环境搭建
    java毕业设计艾灸减肥管理网站Mybatis+系统+数据库+调试部署
    2022-8-24 华为秋招笔试
  • 原文地址:https://blog.csdn.net/hekaiyou/article/details/132919652