美文网首页
全站HTTPS升级系列(三)nginx配置全站HTTPS

全站HTTPS升级系列(三)nginx配置全站HTTPS

作者: 删我丶 | 来源:发表于2019-07-31 13:57 被阅读0次

    前言

    上篇,我们介绍了HTTPS的SSL证书,以及如何通过acme.sh生成并自动更新SSL证书。 本篇,我们介绍如何通过nginx配置配置全站https,以及容易踩的坑

    环境

    • linux服务器,操作系统为 centos7.2
    • nginx 1.10.1
    • acme.sh v2.8.0

    本文以msh.com的域名证书为例

    一、给nginx安装ssl模块

    想要nginx支持https,必须安装http_ssl_module模块。该模块如果未安装或安装失败,在配置nginx的https时会报unknown directive "ssl"的错

    首先切换到nginx的安装包目录,然后执行如下命令

    ####### 下载你当前版本的nginx包,并且解压 进到目录
    ./configure --with-http_ssl_module
    ####### 切记千万不要make install 那样就覆盖安装了
    make
    ####### 将原来的nginx备份 备份之前先关闭当前正在执行的nginx
    /usr/local/nginx/sbin/nginx -s stop
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    ####### make之后会在当前目录生成 objs 目录
    cp objs/nginx /usr/local/nginx/sbin/nginx
    ####### 然后重新启动nginx
    /usr/local/nginx/sbin/nginx
    复制代码
    

    二、告知nginx你的证书存放的位置

    本人指定的证书存放位置为/mycertify/ssl

    打开nginx安装目录的nginx.conf配置文件。因为是泛域名证书,所以当前域名以及当前域名下的所有次级子域名可以共用一个证书

    
    # 第一个子域名
    server {
        # https默认监听的是443 端口
        listen       443 ssl;
        server_name b.msh.com  ;
        # 指定证书位置
        ssl_certificate /mycertify/ssl/msh.com.cer;  
        ssl_certificate_key /mycertify/ssl/msh.com.key;
    
        # 下方的5个配置项是和https无关的,如果想让nginx能正常代理websocket,则必须加上
        # 防止nginx代理websocket时,每隔75秒自动中断
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
        # 防止nginx代理websocket 报错
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
        location / {
            proxy_pass http://localhost:8585;
        }
    }
    
    # 其他的同级域名的证书配置,也可以照搬同上这样配置
    
    复制代码
    

    三、强制将HTTP请求转到HTTPS请求

    网站虽然升级成为了https,但是客户端可能会依然通过原先的http协议访问。这就需要通过nginx做重定向到https

    假如访问路径为 http://b.msh.com ,重定向后的实际访问路径为 https://b.msh.com

    server {
        listen       80;
        server_name b.msh.com  www.b.msh.com ;
        rewrite ^(.*) https://$host$1 permanent;
    
    }
    复制代码
    

    三、 重启nginx,使以上配置生效

    /usr/local/nginx/sbin/nginx  -s reload
    复制代码
    

    注意:到这一步,配置还没有完成!!!。十个人里面有九个到这一步就以为大功告成了,然而却漏掉了不起眼但是最重要的一步,也是很多教程里面所没有提到的,那就是开启防火墙443端口

    四、使防火墙放开443端口

    开启443端口

    firewall-cmd --zone=public --add-port=443/tcp --permanent
    复制代码
    

    重启防火墙,切记!!!!!!!!

    firewall-cmd --reload
    复制代码
    

    至此,大功告成,可以在浏览器里面输入地址测试了

    系列文章

    全站HTTPS升级系列(一)升级前的科普工作

    全站HTTPS升级系列(二)基于 acme.sh从Letsencrypt生成免费的泛域名证书

    全站HTTPS升级系列(三)nginx配置全站HTTPS

    全站HTTPS升级系列(四)项目代码升级改造

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    https://juejin.im/post/5c385c0a6fb9a049ac7960be

    相关文章

      网友评论

          本文标题:全站HTTPS升级系列(三)nginx配置全站HTTPS

          本文链接:https://www.haomeiwen.com/subject/vwnzrctx.html