Nginx07

Nginx07 目录 写在前面使用https的步骤单纯使用https负载均衡和web均用https负载均衡https,web用http(外网访问https,内网互访http)部分加密时&#xff0c

目录

如果您使用的是纯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

Like (0)
CSDN的头像CSDN
Previous 2024年6月24日
Next 2024年6月24日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注