他のコンポーネント(サーバ)にリクエストを転送するためにプロキシとしてnginxを使用しています。Docker nginxエラー:openssl:コマンドが見つかりません
nginxを含む各コンポーネントは、「nginx-proxy」、「dashboard-server」、「backend-server」(REST API)、「landing-server」のためのドッキング・コンテナを持っています。 (ランディングページ)。後者の3つのコンポーネントはすべてNodeJS Expressのサーバであり、私はコマンドdocker-compose build
を使用するときにエラーがないが、私はdocker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
でコンテナを起動したときにNodeJSコンテナは正常に動作しますが、nginxのコンテナはdocker-compose logs nginx-proxy
を使用して私は、このエラーを与えて正常に動作し:
Attaching to docker_nginx-proxy_1
nginx-proxy_1 | /start.sh: line 5: openssl: command not found
nginx-proxy_1 | Creating dhparams…\c
nginx-proxy_1 | ok
nginx-proxy_1 | Starting nginx…
nginx-proxy_1 | 2017/08/23 23:27:20 [emerg] 6#6:
BIO_new_file(“/etc/letsencrypt/live/admin.domain.com/fullchain.pem”)
failed (SSL: error:02001002:system library:fopen:No such file or directory:
fopen(‘/etc/letsencrypt/live/admin.domain.com/fullchain.pem’,‘r’) error:2006D080:BIO routines:BIO_new_file:no such file)
nginx-proxy_1 | nginx: [emerg]
BIO_new_file(“/etc/letsencrypt/live/admin.domain.com/fullchain.pem”) failed (SSL: error:02001002:system library:fopen:
No such file or directory:fopen(‘/etc/letsencrypt/live/admin.domain.com/fullchain.pem’,‘r’)error:2006D080:BIO routines:BIO_new_file:no such file)
は、nginxのサーバーが要求を処理するために開始されないためしかし、エラーConnectionのコマンドcertbot certonly --webroot -w /var/www/letsencrypt -d admin.domain.com -d api.domain.com -d www.domain.com -d domain.com
結果はを拒否、SSL証明書の暗号化できるようにします。
私のnginxのDockerfile(nginxのプロキシ/ Dockerfile):
FROM nginx:1.12
COPY start.sh /start.sh
RUN chmod u+x /start.sh
COPY conf.d /etc/nginx/conf.d
COPY sites-enabled /etc/nginx/sites-enabled
ENTRYPOINT ["/start.sh"]
マイstart.shファイル(nginxのプロキシ/ start.sh):
#!/bin/bash
if [ ! -f /etc/nginx/ssl/dhparam.pem ]; then
echo "Creating dhparams…\c"
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
echo "ok"
fi
echo "Starting nginx…"
nginx -g 'daemon off;
マイdefault.confファイル(nginx-proxy/conf.d/default.conf):
include /etc/nginx/sites-enabled/*.conf;
マイapi.confファイル(他の人が似ている)(nginxのプロキシ//api.confサイト対応):
server {
listen 80;
server_name api.domain.com;
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name api.domain.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/api.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.domain.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
client_max_body_size 0;
chunked_transfer_encoding on;
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}
location/{
proxy_read_timeout 900;
proxy_pass_header Server;
proxy_cookie_path ~*^/.* /;
proxy_pass http://backend-server:3000;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
}
}
任意のアイデア?
'' /start.sh:line 5:/ usr/bin/openssl:そのようなファイルやディレクトリはありません ''' –
あなたのnginxを起動しましたか?私が言及したようなサーバー? 'ssl_dhparam'という行をコメントするだけで、なぜあなたのドッカーがopensslコマンドを後で実行できないのかを知ることができます。 –
OK、/ usr/bin/opensslを使用して* .confファイルのSSLコードをコメントアウトするだけで、nginxサーバーが正しく起動します。しかし、SSLを正しく設定するには、今何をする必要がありますか? –