【发布时间】:2018-05-14 11:53:45
【问题描述】:
我有一个问题,我正在构建一个 nginx 反向代理,用于指向不同 url 路径的多个微服务。
该系统完全基于 docker,因此开发和生产使用相同的环境。这在安装 SSL 时给我带来了一个问题,因为 SSL 证书只能在生产中使用,所以当我使用 SSL 配置 NGINX 时,开发环境不再工作,因为 ssl 证书不存在。
这是我的 conf 文件的相关部分 -
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_file("/etc/nginx/certs/atvcap_cabundle.crt") 失败 (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ certs/atvcap_cabundle.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
是否可以只在“/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_certificate”指令在此处不允许 /etc/nginx/conf.d/default.conf:7
有人对如何实现这样的目标有任何想法吗?
谢谢
【问题讨论】:
-
作为一个临时解决方法,我现在刚刚创建了两个 nginx.conf 文件——一个用于开发,一个用于生产。当我们处于开发模式时,开发者会覆盖生产模式。理想情况下,我不想让 2 个文件做几乎相同的事情。
-
我正在寻找相同的解决方案。