我有一个问题,我正在构建一个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;
...
}
Run Code Online (Sandbox Code Playgroud)
但是在开发模式下运行我的应用程序时会抛出以下内容 -
nginx:[emerg] BIO_new_file("/ etc/nginx/certs/atvcap_cabundle.crt")失败(SSL:错误:02001002:系统库:fopen:没有这样的文件或目录:fopen('/ etc/nginx/certs/atvcap_cabundle .crt','r')错误:2006D080:BIO例程:BIO_new_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;
}
Run Code Online (Sandbox Code Playgroud)
但是这引起了以下错误 -
nginx:[emerg]"ssl_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;
Run Code Online (Sandbox Code Playgroud)
然后从主配置中包含:
server_name atvcap.server.com;
include /somepath/ssl.conf*;
Run Code Online (Sandbox Code Playgroud)
确保包含 * 符号 - 当文件在开发模式下不存在时,这不会中断。
@super_p的答案是正确的。但为了回答@AbdolHosein 评论,如果不清楚,我会在这里添加我的答案。
您需要将您的ssl_certificate指令包含在包含的文件中。
# sample nginx config
http {
server {
listen 80 deferred;
server_name _;
include /ssl/ssl.conf*;
client_body_timeout 5s;
client_header_timeout 5s;
root /code;
}
}
Run Code Online (Sandbox Code Playgroud)
然后/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;
Run Code Online (Sandbox Code Playgroud)
诀窍是我们不查看证书是否存在,而是检查证书是否/ssl/ssl.conf存在。这要归功于@super_p 所说的目录*中的include /ssl/ssl.conf*;
| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |