zoukankan      html  css  js  c++  java
  • Nginx 配置 HTTPS 完整过程(阿里云申请免费版一年ssl证书)

    1. nginx 的 ssl 模块安装

    • 查看 nginx 是否安装 http_ssl_module 模块。
    $ /usr/local/nginx/sbin/nginx -V

      如果出现 configure arguments: --with-http_ssl_module, 则已安装(下面的步骤可以跳过,进入 nginx.conf 配置)。

    # 下载安装包到 src 目录

    $ cd /usr/local/src
    $ wget http://nginx.org/download/nginx-1.14.1.tar.gz
    • 解压安装包。
    $ tar -zxvf nginx-1.14.1.tar.gz
    • 配置 ssl 模块。
    $ cd nginx-1.14.1
    $ ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    • 使用 make 命令编译(使用make install会重新安装nginx),此时当前目录会出现 objs 文件夹。
    • 用新的 nginx 文件覆盖当前的 nginx 文件。
    $ cp ./objs/nginx /usr/local/nginx/sbin/
    • 再次查看安装的模块(configure arguments: --with-http_ssl_module说明ssl模块已安装)。
    $ /usr/local/nginx/sbin/nginx -V
    
    nginx version: nginx/1.14.1
    ...
    configure arguments: --with-http_ssl_module

    2. ssl 证书部署

      这里使用的是阿里云的免费证书,期限为1年,申请地址

    • 下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。
    • 在 nginx 目录新建 cert 文件夹存放证书文件。
    $ cd /usr/local/nginx
    $ mkdir cert
    • 将这两个文件上传至服务器的 cert 目录里。
      这里使用 mac 终端上传至服务器的 scp 命令(这里需要新开一个终端,不要使用连接服务器的窗口):
    $ scp /Users/yourname/Downloads/ssl.pem root@xxx.xx.xxx.xx:/usr/local/nginx/cert/
    $ scp /Users/yourname/Downloads/ssl.key root@xxx.xx.xxx.xx:/usr/local/nginx/cert/

    scp [本地文件路径,可以直接拖文件至终端里面] [<服务器登录名>@<服务器IP地址>:<服务器上的路径>]

    3. nginx.conf 配置

      编辑 /usr/local/nginx/conf/nginx.conf 配置文件:

    • 配置 https server。
      注释掉之前的 http server 配置,新增 https server:
    server {
        # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
        listen       443 ssl;
        # 域名,多个以空格分开
        server_name  baidu.com www.baidu.com;
        
        # ssl证书地址
        ssl_certificate     /usr/local/nginx/cert/ssl.pem;  # pem文件的路径
        ssl_certificate_key  /usr/local/nginx/cert/ssl.key; # key文件的路径
        
        # ssl验证相关配置
        ssl_session_timeout  5m;    #缓存有效期
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
        ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
    
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
    • 将 http 重定向 https
    server {
        listen       80;
        server_name  baidu.com www.baidu.com;
        return 301 https://$server_name$request_uri;
    }

    4. 重启 nginx

    $ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

      如果 80 端口被占用,用kill [id]来结束进程:

    # 查看端口使用
    $ netstat -lntp
    
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      21307/nginx: master 
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3072/sshd           
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      21307/nginx: master 
    
    # 结束 80 端口进程
    $ kill 21307

      再次重启 nginx :

    $ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    5.  我的nginx.conf

    user  root;
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        
        server {
            listen       80;
            
            # 域名,多个以空格分开
            server_name  jstudy.top www.jstudy.top;
            
            # 强制http跳转到https(必须配置俩个server一个server无法跳转 启动会提示重定向次数过多)
            return 301 https://www.jstudy.top$request_uri;
            
        }
    
        server {
            # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
            listen       443 ssl;
            
            # 域名,多个以空格分开
            server_name  jstudy.top www.jstudy.top;
            
            # ssl证书地址
            ssl_certificate     /usr/local/nginx/cert/ssl.pem;  # pem文件的路径
            ssl_certificate_key  /usr/local/nginx/cert/ssl.key; # key文件的路径
            
            # ssl验证相关配置
            ssl_session_timeout  5m;    #缓存有效期
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
            ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
    
            location / {
                root   /root/nginx/dist;
                try_files $uri $uri/ /index.html;
                index  index.html index.htm;
            }
            
            location /prod-api/{
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://47.98.184.17:8080/;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
  • 相关阅读:
    Linux数据库还原备份
    loadrunner遇到的问题
    Maven基础入门与核心知识
    数据去中心化的场景与流程
    设计模式:灵活编程(观察者模式)
    使用Mycat构建MySQL读写分离、主从复制、主从高可用
    设计模式:灵活编程(装饰模式)
    设计模式:灵活编程(组合模式)
    Laravel5:重定向 redirect 函数的详细使用
    设计模式:对象生成(单例、工厂、抽象工厂)
  • 原文地址:https://www.cnblogs.com/-wanglei/p/13523832.html
Copyright © 2011-2022 走看看