Mohammed Noureldin Asked: 2018-01-06 16:46:30 +0800 CST2018-01-06 16:46:30 +0800 CST 2018-01-06 16:46:30 +0800 CST 如果主证书不存在,如何在 Nginx 中定义备用证书? 772 通常,当Nginx尝试读取不存在的证书时,它将退出并抛出错误。 如果主证书不存在,我可以定义任何备用证书吗? nginx 2 个回答 Voted Jake Killpack 2020-07-20T08:33:47+08:002020-07-20T08:33:47+08:00 我遇到了同样的问题。我正在将一个 docker 集群部署到我想要自动生成 SSL 证书的生产环境中。当 SSL 证书到位时,我想强制所有流量重定向到 https。这不是超级迷人,但这是我想出的解决方案。 我的 nginx 服务器有 2 个配置文件:app.conf 和 tlsapp.conf 应用程序配置文件 server { listen 80; server_name example.com; location /.well-known/acme-challenge/ { allow all; root /var/www/public; } } tlsapp.conf server { listen 80; server_name example.com; location / { return 301 https://example.com$request_uri; } } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/nginx/opt/options-ssl-nginx.conf; ssl_dhparam /etc/nginx/opt/ssl-dhparams.pem; root /var/www/public; index index.php; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; ... } 然后我从自定义映像部署我的 nginx 容器。 nginx.Dockerfile FROM nginx:alpine COPY docker-config/nginx/conf.d/app.conf /etc/nginx/conf.d/app.conf COPY docker-config/nginx/conf.d/tlsapp.conf /etc/nginx/conf.d/tlsapp.bkp COPY docker-config/nginx/opt/ /etc/nginx/opt/ COPY docker-config/nginx/entrypoint.sh /custom-entrypoint.sh RUN chmod 775 /custom-entrypoint.sh ENTRYPOINT ["/custom-entrypoint.sh"] RUN ["/docker-entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"] 最后,我的自定义 nginx 映像中有一个自定义入口点。基本上,这个入口点所做的就是检查是否已经创建了 ssl 证书。如果有,它会启用 tlsapp 配置并禁用仅用于使用 certbot 引导证书的配置。 入口点.sh #!/usr/bin/env sh set -e if [ -d "/etc/letsencrypt/live" ]; then mv /etc/nginx/conf.d/app.conf /etc/nginx/conf.d/app.bkp mv /etc/nginx/conf.d/tlsapp.bkp /etc/nginx/conf.d/tlsapp.conf fi exec "$@" 此设置允许我的 nginx 容器在未生成 ssl 证书时在新的生产环境中启动。它为 certbot 提供了足以将证书生成到共享持久卷中的访问权限。然后我要做的就是重新部署 nginx 容器,它将启动,查看证书,并启用我的站点的实际配置,强制所有流量通过 https。 我不喜欢这种设置,因为它需要为新的生产环境重新部署尴尬,如果您的设置比针对一台 nginx 服务器的应用程序更复杂,则可能会出现问题,但它可以工作。 Best Answer Tim 2018-01-06T16:51:24+08:002018-01-06T16:51:24+08:00 不,为什么您的密钥不存在?
我遇到了同样的问题。我正在将一个 docker 集群部署到我想要自动生成 SSL 证书的生产环境中。当 SSL 证书到位时,我想强制所有流量重定向到 https。这不是超级迷人,但这是我想出的解决方案。
我的 nginx 服务器有 2 个配置文件:app.conf 和 tlsapp.conf
应用程序配置文件
tlsapp.conf
然后我从自定义映像部署我的 nginx 容器。
nginx.Dockerfile
最后,我的自定义 nginx 映像中有一个自定义入口点。基本上,这个入口点所做的就是检查是否已经创建了 ssl 证书。如果有,它会启用 tlsapp 配置并禁用仅用于使用 certbot 引导证书的配置。
入口点.sh
此设置允许我的 nginx 容器在未生成 ssl 证书时在新的生产环境中启动。它为 certbot 提供了足以将证书生成到共享持久卷中的访问权限。然后我要做的就是重新部署 nginx 容器,它将启动,查看证书,并启用我的站点的实际配置,强制所有流量通过 https。
我不喜欢这种设置,因为它需要为新的生产环境重新部署尴尬,如果您的设置比针对一台 nginx 服务器的应用程序更复杂,则可能会出现问题,但它可以工作。
不,为什么您的密钥不存在?