• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    nginx配置支持https的示例代码

    1、简介

    你还在让你的网站裸奔在网络上吗?在这里我们将搭建 免费版 HTTPS,免费的,免费的,免费的,重要的事情说三遍。

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,

    因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息,

    为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

    2、 HTTPS的优点

    尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

    (1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

    (2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

    (3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

    (4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

    3、 HTTPS的缺点

    虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

    (1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

    (2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

    (3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

    (4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

    (5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

    4、 下载 certbot

    这里使用git下载,还没有安装git的查看如何安装

    切换目录

    cd /usr/local

    克隆git仓库

    git clone https: // github.com/certbot/certbot.git

    克隆完成将会在/usr/loca/  出现certbot目录

    5、 查看 certbot

    切换到certbot目录

    cd /usr/local/certbot

    如果目录是这样的说明安装成功了

    certbot常用命令 查看官方文档

    6、 安装nginx

    参看安装nginx文档

    7、 申请https证书

    查看当前证书

    ./certbot-auto certificates

    第一次执行将会安装一些依赖,中途有一次确认询问,输入Y即可

    开始申请证书(证书有效期3个月,过期需要重新申请) 方式一:使用DNS方式验证,该方式需要你能配置域名,我个人喜欢这种方式 ./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d  你的域名 --manual --preferred-challenges dns-01 certonly  如:

    配置泛域名

    复制代码 代码如下:
    ./certbot-auto --server https: // acme-v02.api.letsencrypt.org/directory -d *.nl166.com --manual --preferred-challenges dns-01 certonly

    配置制定域名

    复制代码 代码如下:
    ./certbot-auto --server https: // acme-v02.api.letsencrypt.org/directory -d api.nl166.com --manual --preferred-challenges dns-01 certonly

    配置二级泛域名

    复制代码 代码如下:
    ./certbot-auto --server https: // acme-v02.api.letsencrypt.org/directory -d *.api.nl166.com --manual --preferred-challenges dns-01 certonly

    如上图所示,第一次会让你输入一个邮箱,按要求输入就可以了,到时候会发送一个邮件给你,需要点击确认邮箱,所以务必填写真实邮箱,然后按要求确认就可,不确认是执行不下去的。

    接下来会让你验证域名,按要求解析个TXT类型的记录

    保存确认以后再回到服务器中确认

    上面这两个文件就是配置https用到的证书了

    方式二:使用插件方式

    我们先看看官方怎么说的

    这里我使用的是nginx(申请完会自动帮你重启nginx) 这种方式配置不了泛域名,只能一个一个添加

    ./certbot-auto --nginx -d api2.nl166.com

    解决上述报错,请注意,/usr/local/nginx 请替换为你的nginx实际安装位置安装LNMP

    ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
    
    ln -s /usr/local/nginx/conf/ /etc/nginx

    再次执行申请

    中途会询问你请选择是否将HTTP流量重定向到HTTPS,删除HTTP访问。可根据自己的需求选择,我这里是c取消选择(实际上这一步可以直接不理,经测试,这一步没有选择前,访问网址https已经可以访问了。)

    如果想省略询问这一步,可以添加certonly 该种方式只会生成证书,不做其余操作,证书配置需要自己手动添加 如下:

    ./certbot-auto certonly --nginx -d api2.nl166.com

    如上图所示,如果你配置了监听443端口的server,他会帮你自动找到对应域名的配置文件,并添加下面两行,还把我格式打乱了,}号与上面{的缩进不对应了,不过不影响功能,这里不知道会不会根据nginx的版本选择是否添加ssl on;

    因为我这个nginx版本是不需要这个的,较低版本需要添加ssl on;才能开启https访问。

    如没有监听该域名的443端口,则会在如下位置添加信息

    其他方式请自行摸索

    8、配置nginx支持https

    # HTTPS server
     #
     server {
     listen 443 ssl;
     server_name api2.nl166.com;
     root /data/web/im.nl166.com;
    
     location / {
     index index.php;
     }
    
     #auth_basic "hello world";
     #auth_basic_user_file /usr/local/nginx/conf/auth/nl166.auth;
    
     location ~ \.php$ {
     include fastcgi_params;
     fastcgi_pass unix:/tmp/php-fcgi.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     }
     location ~ .*.(svn|git|cvs) {
     deny all;
     }
    
     ssl_certificate /etc/letsencrypt/live/api2.nl166.com/fullchain.pem; # managed by Certbot
     ssl_certificate_key /etc/letsencrypt/live/api2.nl166.com/privkey.pem; # managed by Certbot
     }

    较低版本需要增加ssl on;才能开启https访问。

    9、使用shell脚本与定时任务定时续期证书

    注意:为避免遇到操作次数的限制,加入 --dry-run 参数,可以避免操作限制,等执行无误后,再去掉进行真实的renew 操作。 方式一的续期

    其中域名为/etc/letsencrypt/renewal/目录下的****.conf ,****就是你要填写的域名,比如我生成的时候是*.nl166.com,但是在实际生成的时候是没有*号的

    /home/certbot-sh/au.sh 替换成你自己更新DNS的脚本

    如下:

    复制代码 代码如下:
    ./certbot-auto renew --cert-name nl166.com --manual-auth-hook /data/shell/crontab/auto_update_httpscert. sh --dry-run

    把更新命令放到一个文件,我这里是放在了/data/shell/crontab/auto_update_httpscert.sh 内容如下 ,原来的auto_update_httpscert.sh 更改到/data/shell/cnl_update_httpscert.sh

    增加系统定时任务

    crontab -e

    #每个星期天凌晨5点执行更新https证书操作

    0 5 * * 0 sh /data/shell/crontab/auto_update_httpscert.sh

    方式二的续期 如下:

    ./certbot-auto certonly --renew-by-default --nginx -d api2.nl166.com --dry-run 

    增加系统定时任务操作参考方式一

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:基于Docker的Etcd分布式部署的方法步骤
    下一篇:linux安装git的方法步骤
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    nginx配置支持https的示例代码 nginx,配置,支持,https,的,