web-dev-qa-db-ja.com

Nginx-SSL証明書が存在する場合にのみSSLを有効にする

異なるURLパスで複数のマイクロサービスに転送するためのnginxリバースプロキシを構築しているという問題があります。

このシステムは完全に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:エラー: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;
}

しかし、それは次のエラーを投げました-

nginx:[emerg] "ssl_certificate"ディレクティブは、ここ/etc/nginx/conf.d/default.conf:7では許可されていません

誰かがこのようなことを達成する方法について何かアイデアがありますか?

ありがとう

22
sgpbyrne

追加のファイルを作成することができますssl.confそしてここにsslconfigsを置きます:

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*;

必ず*記号を含めてください-ファイルが開発モードで存在しない場合、これは壊れません。

3
super_p