OpenResty 使用 lua-resty-auto-ssl 配置 https 证书
OpenResty Let's Encrypt HTTPS About 4,927 wordslua-resty-auto-ssl 开源地址
https://github.com/auto-ssl/lua-resty-auto-ssl
lua-resty-auto-ssl 介绍
自动注册 Let's Encrypt 账号,以及自动更新https
证书(Let's Encrypt
颁发的证书3
个月过期)。
支持OpenResty 1.9.7.2
及以上版本(目前最新版本openresty-1.19.3.1
)。
lua-resty-auto-ssl 安装
使用luarocks
安装。
luarocks install lua-resty-auto-ssl
可能出现的错误
mkdir -p /tmp/luarocks_lua-resty-auto-ssl-0.13.1-1-K27taA/lua-resty-auto-ssl/build
rm -f /tmp/luarocks_lua-resty-auto-ssl-0.13.1-1-K27taA/lua-resty-auto-ssl/build/stamp-dehydrated-*
mkdir -p /tmp/luarocks_lua-resty-auto-ssl-0.13.1-1-K27taA/lua-resty-auto-ssl/build/bin
curl -sSLo /tmp/luarocks_lua-resty-auto-ssl-0.13.1-1-K27taA/lua-resty-auto-ssl/build/bin/dehydrated "https://raw.githubusercontent.com/lukas2511/dehydrated/05eda91a2fbaed1e13c733230238fc68475c535e/dehydrated"
curl: (7) Failed connect to raw.githubusercontent.com:443; Connection refused
make: *** [/tmp/luarocks_lua-resty-auto-ssl-0.13.1-1-K27taA/lua-resty-auto-ssl/build/stamp-dehydrated-2-05eda91a2fbaed1e13c733230238fc68475c535e] Error 7
Error: Build error: Failed building.
解决方法
到网站:https://www.ipaddress.com 输入域名查询到对应的最新IP
。
/etc/hosts
文件中添加IP Address
上查到的ip
和域名。
199.232.96.133 raw.githubusercontent.com
创建自签名证书
用于Nginx
启动。
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
-subj '/CN=sni-support-required-for-valid-ssl' \
-keyout /usr/local/openresty/ssl/resty-auto-ssl-fallback.key \
-out /usr/local/openresty/ssl/resty-auto-ssl-fallback.crt
可能出现的错误
找不到ssl
文件夹。
[root@localhost ~]# openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
> -subj '/CN=sni-support-required-for-valid-ssl' \
> -keyout /usr/local/openresty/ssl/resty-auto-ssl-fallback.key \
> -out /usr/local/openresty/ssl/resty-auto-ssl-fallback.crt
Generating a 2048 bit RSA private key
.........+++
.........................................+++
writing new private key to '/usr/local/openresty/ssl/resty-auto-ssl-fallback.key'
/usr/local/openresty/ssl/resty-auto-ssl-fallback.key: No such file or directory
139709433280400:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/usr/local/openresty/ssl/resty-auto-ssl-fallback.key','w')
139709433280400:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
解决方法
创建文件夹
mkdir -p /usr/local/openresty/ssl
创建保存签名的文件夹
更改归属用户为nginx worker
进程用户。
make -p /usr/local/openresty/ssl/resty-auto-ssl
chown nobody /usr/local/openresty/ssl/resty-auto-ssl
chgrp nogroup /usr/local/openresty/ssl/resty-auto-ssl
更改配置文件
events {
worker_connections 1024;
}
http {
# auto_ssl 共享内存用于处理证书数据。1MB大约能处理约 100 个单独的域名
lua_shared_dict auto_ssl 1m;
# auto_ssl_settings 共享内存用于临时存储各种设置,比如认证任务用到的密钥等,不能改变或去掉这个配置。
lua_shared_dict auto_ssl_settings 64k;
resolver 8.8.8.8;
# 初始化设置任务
init_by_lua_block {
auto_ssl = (require "resty.auto-ssl").new()
-- 用于保存配置、临时文件和证书文件的文件夹,文件夹必须保证 nginx worker 进程可写,默认/etc/resty-auto-ssl
auto_ssl:set("dir", "/usr/local/openresty/ssl/resty-auto-ssl")
-- 认证任务监听端口,默认8999
auto_ssl:set("hook_server_port", 8999)
-- 更新检查评率,单位秒,默认86400(一天)
auto_ssl:set("renew_check_interval", 172800)
-- 定义一个函数用于决定哪个域名自动处理和注册新证书。默认是不允许任务域名。所以该配置也是必须项。
-- 替换 example.com 为自己的域名,直接返回 true 表示所有请求进来的域名都颁发证书
auto_ssl:set("allow_domain", function(domain)
return ngx.re.match(domain, "(example.com|example.net)$", "ijo")
-- ^()& 是只能指定的域名,无法为二级域名颁发证书
-- return ngx.re.match(domain, "^(example.com|example.net)$", "ijo")
-- example.com$ 可以为所有 example.com 子域名颁发证书
-- return ngx.re.match(domain, "example.com$", "ijo")
-- return true
end)
auto_ssl:init()
}
init_worker_by_lua_block {
auto_ssl:init_worker()
}
# HTTPS server
server {
listen 443 ssl;
# 为 SNI 域名动态处理颁发或返回证书
ssl_certificate_by_lua_block {
auto_ssl:ssl_certificate()
}
# 定义静态的 ssl 证书文件用于 nginx 的启动
#
# 生成备用的自签名证书
#
# openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
# -subj '/CN=sni-support-required-for-valid-ssl' \
# -keyout /usr/local/openresty/ssl/resty-auto-ssl-fallback.key \
# -out /usr/local/openresty/ssl/resty-auto-ssl-fallback.crt
ssl_certificate /usr/local/openresty/ssl/resty-auto-ssl-fallback.crt;
ssl_certificate_key /usr/local/openresty/ssl/resty-auto-ssl-fallback.key;
}
# HTTP server
server {
listen 80;
# 该节点路径用于 Let's Encrypt 域名校验
location /.well-known/acme-challenge/ {
content_by_lua_block {
auto_ssl:challenge_server()
}
}
location / {
return 301 https://$host$request_uri;
}
}
# 内部开启一个监听8999的服务用于处理认证任务
server {
listen 127.0.0.1:8999;
# 增加 body buffer size 以保证所有的 POST 请求能正常解析返回的 POST 报文并保存到内存中
client_body_buffer_size 128k;
client_max_body_size 128k;
location / {
content_by_lua_block {
auto_ssl:hook_server()
}
}
}
}
启动 OpenResty
先检查一下配置是否正常。
nginx -t
如果返回test is successful
,则可以启动了。
nginx
Views: 7,122 · Posted: 2021-05-06
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...