安装
按照官网教程, Ubuntu Server可以使用PPA源安装
配置
使用apt
安装之后, 官方dpk会建立一个软链接/etc/openresty指向/usr/local/openresty/nginx/conf. 可以把原来的Nginx配置文件移动到这里, 当然可能还需要修改亿点点东西.
[可选]在conf.d/下新建init.conf, 添加如下内容:
#lua_package_path "/usr/local/openresty/site/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/openresty/site/init.lua;
access_by_lua_file /usr/local/openresty/site/access.lua;
如此一些需要全局作用域内运行的lua模块即可在init.lua和access.lua中统一引用了.
安装luarocks
OPM还是缺点意思的啦, 安装luarocks参照官网教程执行即可.
替代certbot
之前一直使用的certbot
更新Nginx证书, 但是certbot
的Nginx插件并不兼容Openresty, 结合Openresty的lua特性, 索性直接让Openresty自动获取证书不就好了?
安装lua-resty-auto-ssl
以lua-resty-auto-ssl为例, 由于luarocks安装的lua-resty-auto-ssl版本(0.13.1)太低, 需要自己编译安装.
首先用命令luarocks path
和luarocks --verbose
查看当前lua
和resty
的目录情况, 据此导出以下四个变量:
#导出LUA_CPATH和LUA_PATH
eval `luarocks path`
#对应luarocks --verbose中的LUA_BINDIR
export INST_BINDIR=/usr/local/openresty/luajit/bin
#resty.core所在的目录
export INST_LUADIR=/usr/local/openresty/lualib
之后执行编译安装:
make & sudo make install
需要注意的是, 截至本文撰写时, 原始仓库里面的Makefile不会自动安装util/has_certificate.lua, 需要自行修改Makefile(或者拉我的仓库也行).
配置lua-resty-auto-ssl
- 按照项目Readme中的步骤, 首先创建必要的目录:
#使用编译安装而不是luarocks安装
#sudo luarocks install lua-resty-auto-ssl
sudo mkdir /etc/resty-auto-ssl
sudo chown www-data /etc/resty-auto-ssl
- 在/etc/openresty/conf.d中新建auto_ssl_init.conf, 添加如下内容:
#auto_ssl_init.conf
lua_shared_dict auto_ssl 1m;
lua_shared_dict auto_ssl_settings 64k;
resolver 223.5.5.5 ipv6=off;
init_worker_by_lua_block {
auto_ssl:init_worker()
}
# Internal server running on port 8999 for handling certificate tasks.
server {
listen 127.0.0.1:8888;
# Increase the body buffer size, to ensure the internal POSTs can always
# parse the full POST contents into memory.
client_body_buffer_size 128k;
client_max_body_size 128k;
location / {
content_by_lua_block {
auto_ssl:hook_server()
}
}
}
- 在/etc/openresty/sites-enabled/default里的HTTP Server里添加以下
location
和重定向代码块, 用来实现challenge和302自动跳转
# Endpoint used for performing domain verification with Let's Encrypt.
location /.well-known/acme-challenge/ {
content_by_lua_block {
auto_ssl:challenge_server()
}
}
rewrite_by_lua_block {
local has_cert = auto_ssl:has_certificate(ngx.var.host)
if has_cert then
local https_uri = "https://" .. ngx.var.host .. ngx.var.request_uri
ngx.redirect(https_uri, 302)
end
}
4.在/etc/openresty下新建auto_ssl.conf, 内容如下:
#auto_ssl.conf
ssl_certificate_by_lua_block {
auto_ssl:ssl_certificate()
}
ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;
- 在/usr/local/openresty/site/lualib/中新建auto_ssl.lua, 用于初始化lua-resty-auto-ssl模块:
--auto_ssl.lua
auto_ssl = (require "resty.auto-ssl").new()
auto_ssl:set("allow_domain", function(domain)
return true
end)
auto_ssl:set("hook_server_port", 8888)
auto_ssl:init()
- 在/usr/local/openresty/site/init.lua中加载auto_ssl.lua以使其生效:
--init.lua
require "auto_ssl"
- 在需要配置ssl的vhost里引用auto_ssl.conf即可:
server {
server_name _;
listen 443 ssl;
include auto_ssl.conf;
}
安装waf
基本上安装waf就是在/usr/local/openresty/site/access.lua中调用waf的入口代码, 就不写了.
Refer: How to Install ModSecurity for Nginx on Debian/Ubuntu
试试评论能不能用啊👀