我在docker容器中运行了一个nginx。在服务器块内的nginx conf文件中,我已经输入了ssl配置 - 端口,crt和密钥。 nginx查找crt和密钥文件的最简单方法是,我为2个文件创建一个docker机密,并在生成服务时将其安装在/ run / secrets /。但是,我希望在docker镜像中有crt和key文件,这可能就像nginx可以使用的开箱文件一样,如果客户创建了一个秘密,并插入了crt和密钥文件,我希望nginx能够使用那些
通过3.1撰写文件docs for secret,我意识到要么秘密必须预先存在,要么必须作为撰写文件的一部分创建。现在的挑战是,如果它必须预先存在,那么我正在强制客户创建一个秘密(这意味着不仅创建一个秘密,而且还准备好将crt和密钥文件作为create secret命令的输入给出)。如果我在compose文件中创建它,我仍然需要访问客户必须提供的crt和密钥文件。这意味着,在任何一种情况下,这个东西都没有开箱即用。
我该如何解决这个问题?
如果有人读过这篇文章并且仍然没有失去兴趣,即使上面的问题得到解决,我面临的另一个问题是,在nginx conf中,我不能按优先级顺序指定2个证书来挑选它们在同一个服务器块下。任何人对此都有任何想法吗?
答案 0 :(得分:0)
我认为最好的选择是为NGINX容器创建一个自定义入口点脚本,并结合环境变量和一个'模板' nginx.conf。这些将负责适当的证书配置。
您的脚本看起来像(给定阿尔卑斯山图像):
#!/bin/sh
if [ -z $CERTS_FOLDER ]; then CERTS_FOLDER="/etc/nginx/default_crts/"; fi
sed -i "s|{CERTS_FOLDER}|${CERTS_FOLDER}|g" /etc/nginx/nginx.conf
nginx -g "daemon off;"
你的nginx.conf中的匹配部分就像:
server {
listen 443 ssl;
ssl on;
server_name my-server;
ssl_certificate {CERTS_FOLDER}my-server.crt;
...
通过这种方式,您可以提供一些开箱即用的证书,并使用compose environment variables覆盖它们。