目录
如果您使用的是纯https负载均衡,且web部分使用http加密(外网访问https,内网互访http),则适用上一节介绍的使用https的步骤,就会出现问题。访问动态资源。
创建脚本来优化和监控本地证书到期日期、获取最终到期脚本并计算到期日期。
写在前面
这是关于Nginx 的第七篇文章,解释了如何在Nginx 中使用https,以及优化和监控https。
上一篇文章笔记Nginx06-rewrite模块详解与实验
使用https的步骤
申请https证书(ca证书)
您可以使用公有云(AWS、华为云等)申请https证书。个人用户每年有权获得20张免费证书。 (前提:域名已注册,并且证书中使用的域名必须相同)我使用openssl手动创建证书,但是证书无法识别,并且会收到提示说它不安全(您可以可以忽略或信任您的浏览器主机颁发的证书)
#创建私钥
openssl genrsa -idea -out server.key 2048
#根据私钥创建证书
openssl req -days 36500 -x509 -sha256 -nodes -newkey
rsa:2048 -keyout 服务器.key -out 服务器.crt
在nginx服务器模块中调用证书
443 监听SSL。
ssl_certificate /etc/nginx/ssl_keys/server.pem;
ssl_certificate_key /etc/nginx/ssl_keys/server.key;
如果您有跳转或负载平衡,请根据需要进行更改。
单纯使用https
# 将http请求重定向到https。 $request_uri 包含URI
服务器{
听80。
服务器名称ssl.test.cn;
返回值301 https://ssl.test.cn$request_uri;
# 另一种写法
# 永久重写^(.*)$ https://ssl.test.cn$1
}
服务器{
Listen 443 ssl #指定通过SSL 传输的443。
#ssl on ; nginx1.15.0之前必须启用,但之后不需要。
服务器名称ssl.test.cn;
根/应用程序/代码/ssl;
#SSL密钥调用
ssl_certificate /etc/nginx/ssl_keys/ssl.test.cn.pem;
ssl_certificate_key /etc/nginx/ssl_keys/ssl.test.cn.key;
位置/{
索引index.html;
}
}
负载均衡和web均用https
在整个过程中,lb必须转换http请求并将其重定向到https。 Web 只需要处理https 请求。
#网络
[root@web01 ~]# cat /etc/nginx/conf.d/ssl.test.cn.conf
服务器{
443 监听SSL。
服务器名称ssl.test.cn;
根/应用程序/代码/ssl;
ssl_certificate /etc/nginx/ssl_keys/ssl.test.cn.pem;
ssl_certificate_key /etc/nginx/ssl_keys/ssl.test.cn.key;
位置/{
索引index.html;
}
}
磅
[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.test.cn.conf
上游ssl_pools {
server 192.168.100.148:443; # 由于是使用https访问,所以指定端口为443
}
服务器{
听80。
服务器名称ssl.test.cn;
返回值301 https://ssl.test.cn$request_uri;
}
服务器{
443 监听SSL。
服务器名称ssl.test.cn;
ssl_certificate /etc/nginx/ssl_keys/ssl.test.cn.pem;
ssl_certificate_key /etc/nginx/ssl_keys/ssl.test.cn.key;
位置/{
proxy_path https://ssl_pools;
proxy_set_header 主机$http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
}
负载均衡https,web用http(外网访问https,内网互访http)
#网络
[root@web01 ~]# cat /etc/nginx/conf.d/ssl.test.cn.conf
服务器{
听80。
服务器名称ssl.test.cn;
根/应用程序/代码/ssl;
位置/{
索引index.html;
}
}
磅
[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.test.cn.conf
上游ssl_pools {
server 192.168.100.148:80; # 内网使用http相互访问,所以upstream只使用指定的80端口。
}
服务器{
听80。
服务器名称ssl.test.cn;
返回值301 https://ssl.test.cn$request_uri;
}
服务器{
Listen 443 ssl http2 # 如果你想使用http2,只需添加此参数即可。
服务器名称ssl.test.cn;
ssl_certificate /etc/nginx/ssl_keys/ssl.test.cn.pem;
ssl_certificate_key /etc/nginx/ssl_keys/ssl.test.cn.key;
位置/{
proxy_path https://ssl_pools;
proxy_set_header 主机$http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
}
部分加密时,访问动态资源会出现问题
在PHP动态资源模块上添加fastcgi_param HTTPS,表示前面的请求部分是https。
服务器{
听80。
服务器名称blog.test.cn;
根/应用程序/代码/博客;
error_log /var/log/nginx/blog-error.log 通知;
access_log /var/log/nginx/blog-access.log main;
位置/{
索引index.php;
}
位置~* \\.(html|js|css|jpg|png|jpeg)$ {
最长有效期已过。
}
位置~ \\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_param HTTPS on # 添加此项。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
包含fastcgi_params。
}
}
优化
服务器{
443 监听SSL。
# 会话保留时间
保活超时70;
#指定SSL加密协议版本
ssl_协议TLSv1 TLSv1.1 TLSv1.2;
#加密算法必须排除后才能使用。
#排除null算法和md5算法
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5:aNULL:eNULL:EXPORT:DES:RC4:MD5;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/cert.key;
#设置https会话缓存为10MB缓存空间
ssl_session_cache 共享:SSL:10m;
#超时10分钟
ssl_session_timeout 10 分钟;
.
}
监控
监控https证书是否过期
本地证书过期时间
openssl x509 -in 证书文件路径-nnout -dates
任意url的证书
如何获得过期时间
# | 默认标准输出打印正确的内容,但curl进程信息不被认为是正确的。
# | 错误输出。将会打印正确的错误信息,并且可以查看curl进程信息。
curl -vL https://www.baidu.com | grep \’过期日期\’
* 到期日期: 八月6 01:51:05 2024 GMT
#仅限日期信息
[root@e ~]#curl -vL https://www.baidu.com grep \’过期\’ | awk -F\’: \'{print $2}\’
8 月6 日01:51:05 2024 年格林尼治标准时间
编写脚本,获取过期时间
#写一个脚本
[root@ecm-98ce ~]# vim /server/scripts/check_ssl.sh
#!/bin/bash
url=https://www.baidu.com
expire_date_ori=`curl -vL https://www.baidu.com | grep \’过期日期\’ awk -F\’date:|GMT\’ \'{print $2}\’ `
expire_date_opt=`日期-d \’$expire_date_ori\’ +%F`
echo 原始格式过期日期$expire_date_ori
echo 处理后的到期日期$expire_date_opt
测试
[root@ecm-98ce ~]# sh /server/scripts/check_ssl.sh
原始格式有效期2024 年8 月6 日01:51:05
加工后有效期2024-08-06
最终脚本,计算过期时间
#写一个脚本
[root@ecm-98ce ~]# cat /server/scripts/check_ssl.sh
#!/bin/bash
#author: 流苏
# desc: 请检查指定URL和https证书的过期日期
url=https://www.baidu.com
expire_date_ori=`curl -vL https://www.baidu.com | grep \’过期日期\’ awk -F\’date:|GMT\’ \'{print $2}\’ `
expire_date_opt=`日期-d \’$expire_date_ori\’ +%F`
echo 原始格式过期日期$expire_date_ori
echo 处理后的到期日期$expire_date_opt
#过期时间-距离当前时间的秒数
expire_date_opt=`日期-d \’$expire_date_ori\’ +%s`
date_now_second=`日期+%s`
expire_days=`echo \'($expire_date_opt – $date_now_second )/(60*60*24)\’|bc`
回显\’———-\’
echo \’网站$url 证书到期倒计时为:还剩$expire_days 天\’
echo \’网站于: 到期`date -d \’$expire_date_ori\’ +%F`\’
测试
[root@ecm-98ce ~]# sh /server/scripts/check_ssl.sh
原始格式有效期2024 年8 月6 日01:51:05
加工后有效期2024-08-06
——————-
网址https://www.baidu.com 证书过期倒计时: 还剩43天
网站有效期为:2024-08-06
以上#Nginx07相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91860.html