我有多个域都指向同一个虚拟机。(mydomain1.com、mydomain2.com、mydomain3.eu( 现在我有一个巨大的nginx.conf,看起来像这样:
server {
listen 443 ssl;
server_name *.mydomain1.com;
ssl on;
ssl_certificate /etc/nginx/ssl/mydomain1.com.chained.crt;
ssl_certificate_key /etc/nginx/ssl/mydomain1.com.key;
# hundred more lines of rules
}
server {
listen 443 ssl;
server_name *.mydomain2.com;
ssl on;
ssl_certificate /etc/nginx/ssl/mydomain2.com.chained.crt;
ssl_certificate_key /etc/nginx/ssl/mydomain2.com.key;
# the same hundred more lines of rules
}
server {
listen 443 ssl;
server_name *.mydomain3.eu;
ssl on;
ssl_certificate /etc/nginx/ssl/mydomain3.eu.chained.crt;
ssl_certificate_key /etc/nginx/ssl/mydomain3.eu.key;
# the same hundred more lines of rules
}
有没有办法缩短这个 - 因为目前当我必须添加一个新域并且只更改我的域名不同的 3 行时,我正在克隆如此巨大的代码 blcok。我想到了某种参数化,比如(不知道正确的语法(:
SERVER_NAME = {request_server_name}
ssl_certificate /etc/nginx/ssl/${SERVER_NAME}.chained.crt;
ssl_certificate_key /etc/nginx/ssl/${SERVER_NAME}.key;
这可能吗?如何?
你可以做两件事
多域 SAN 证书
您可以购买多域 SAN 证书。这允许您在同一证书中使用不同的域。因此,这样您就不必拥有多个块。如果您使用的是自签名证书,您仍然可以自己创建 SAN 证书
使用 OpenRestry 或 Nginx+LUA
您可以使用OpenRety或Nginx与LUA支持,并使用相同的ssl_certificate_by_lua_block
指令。
语法: ssl_certificate_by_lua_block { lua-script }
上下文:服务器
阶段:在 SSL 握手之前右
当NGINX即将启动下游SSL(https(连接的SSL握手时,此指令运行用户Lua代码。
它对于基于每个请求设置 SSL 证书链和相应的私钥特别有用。从远程(例如,使用 cosocket API(非阻塞地加载此类握手配置也很有用。也可以在这里在纯Lua中进行每个请求的OCSP装订处理。
https://github.com/openresty/lua-nginx-module#ssl_certificate_by_lua_block
另请参阅下面的文章,了解一些示例实现
https://medium.com/@mtourne/how-to-use-nginx-for-ssl-termination-for-any-domain-dc2e2c630058
https://blog.readme.io/auto-generating-ssl-certificates-for-custom-domains-using-lets-encrypt/