Nginx-仅在存在SSL证书时启用SSL
我有一个问题,我正在构建一个nginx反向代理,用于指向不同url路径上的多个微服务 该系统完全基于docker,因此开发和生产使用相同的环境。这给我在安装SSL时带来了一个问题,因为SSL证书仅在生产环境中可用,因此当我使用SSL配置NGINX时,开发环境不再工作,因为SSL证书不存在 以下是我的conf文件的相关部分-Nginx-仅在存在SSL证书时启用SSL,ssl,nginx,https,Ssl,Nginx,Https,我有一个问题,我正在构建一个nginx反向代理,用于指向不同url路径上的多个微服务 该系统完全基于docker,因此开发和生产使用相同的环境。这给我在安装SSL时带来了一个问题,因为SSL证书仅在生产环境中可用,因此当我使用SSL配置NGINX时,开发环境不再工作,因为SSL证书不存在 以下是我的conf文件的相关部分- server { listen 80; listen 443 default_server ssl; server_name atvcap.serv
server {
listen 80;
listen 443 default_server ssl;
server_name atvcap.server.com;
ssl_certificate /etc/nginx/certs/atvcap_cabundle.crt;
ssl_certificate_key /etc/nginx/certs/atvcap.key;
...
}
但在开发模式下运行应用程序时,会引发以下问题-
nginx:[emerg]BIO_new_文件(“/etc/nginx/certs/atvcap_cabundle.crt”)失败(SSL:错误:0201002:系统库:fopen:无此类文件或目录:fopen('/etc/nginx/certs/atvcap_cabundle.crt','r')错误:2006D080:BIO例程:BIO_new_文件:无此类文件)
只有当“/etc/nginx/certs/atvcap_cabundle.crt”可用时,才可以打开SSL吗
我试过以下方法-
if (-f /etc/nginx/certs/atvcap_cabundle.crt) {
ssl_certificate /etc/nginx/certs/atvcap_cabundle.crt;
ssl_certificate_key /etc/nginx/certs/atvcap.key;
}
但这引发了以下错误-
nginx:[emerg]“ssl\u certificate”指令在中不允许在此处使用
/etc/nginx/conf.d/default.conf:7
有人对如何实现这样的目标有什么想法吗
谢谢您可以创建一个附加文件ssl.conf并将ssl配置放在这里:
ssl_certificate /etc/nginx/certs/atvcap_cabundle.crt;
ssl_certificate_key /etc/nginx/certs/atvcap.key;
然后从主配置中包括:
server_name atvcap.server.com;
include /somepath/ssl.conf*;
确保包含*符号-当文件在开发模式下不存在时,此符号不会中断。的@super\p答案是正确的。但是为了回答@AbdolHosein的评论,如果不清楚,我在这里添加我的答案 您需要在包含的文件中包含
ssl\u证书
指令
# sample nginx config
http {
server {
listen 80 deferred;
server_name _;
include /ssl/ssl.conf*;
client_body_timeout 5s;
client_header_timeout 5s;
root /code;
}
}
然后,在/ssl/ssl.conf
中,您可以执行任何您想要的操作,例如启用HTTPS:
# this is the /ssl/ssl.conf file
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /ssl/cert.cer;
ssl_certificate_key /ssl/key.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
诀窍在于,我们不检查证书是否存在,而是检查
/ssl/ssl.conf
是否存在。这要感谢include/ssl/ssl.conf*中的*
@super_p所述的代码>目录作为临时解决方案,我刚刚创建了两个nginx.conf文件——一个用于开发,一个用于生产。当我们处于开发模式时,开发模式会覆盖生产模式。理想情况下,我不想让两个文件做几乎相同的事情。我正在寻找相同的解决方案。不管这种技术有助于解决这个问题,但是如果有合适的.crt
文件,有没有办法启用ssl文件?