taro373
@taro373

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Nginxでsslのリバースプロキシを試すには

Q&A

Closed

Rocky Linux release 8.5 で
現在192.168.1.10のポート10201で動いているサービスがあります。
このポートを省略するために、下記のファイルnginx.confを準備して

nginx.conf
http {
    server {
        listen 80;
        server_name hoge.org;
        location / {
            proxy_pass http://192.168.1.10:10201/;
            proxy_redirect off;
        }
    }
}

dockerコンテナを起動しました。

$ docker run --name reverse_proxy -v /work/https-nginx/nginx.conf:/etc/nginx/nginx.conf  --rm -d  -p 80:80 nginx

ブラウザから http://192.168.1.10/ にアクセスすると、これまでのポート番号を指定しなくても、ポート10201にアクセスすることができました。

これをhttpに変更しようと、下記のように変更して、

nginx.conf
[nginx443.conf]
http {
    server {
        listen 443;
        server_name hoge.org;
        ssl_certificate     /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;
        location / {
            proxy_pass http://192.168.1.10:10201/;
            proxy_redirect off;
        }
    }
}

下記のようにコンテナを起動しましたが、docker psで確認するとコンテナは起動せす下記のエラーが表示されました。
cannot load certificate "/etc/nginx/ssl/server.crt"

$ docker run --name reverse_proxy -v /work/https-nginx/nginx443.conf:/etc/nginx/conf.d/ssl.conf  --rm  -p 443:443 nginx

2022/12/14 06:28:11 [emerg] 1#1: cannot load certificate "/etc/nginx/ssl/server.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/server.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate "/etc/nginx/ssl/server.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/server.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)

ssl_certificateとssl_certificate_keyで指定した鍵が存在するかを確認しましたが、ここは問題がないようです。

$ ls -lh /etc/nginx/ssl/server.crt
-rw-r--r-- 1 root root 1.2K 12月 13 14:43 /etc/nginx/ssl/server.crt
$ ls -lh /etc/nginx/ssl/server.key
-rw------- 1 root root 1.7K 12月 13 14:41 /etc/nginx/ssl/server.key

"No such file or directory"に対してどこを修正すれば良いのでしょうか。

0

2Answer

-v /work/https-nginx/nginx.conf:/etc/nginx/nginx.conf

共有せずにコンテナ内で全て記述してはどうでしょう? --rm は付けないで!
/etc/nginx/nginx.conf
/etc/nginx/conf.d/...
/etc/nginx/ssl/...

または、全て、共有してはどうでしょう?
-v /work/https-nginx:/etc/nginx

もしくは、パラメタは -p443:443 から --host で コンテナ内ではなく、コンテナ外にnginxを記述するのはどうでしょう?
proxy_pass http://コンテナ外のIP:10201/

このポートを省略する ことができませんが!

1Like

Comments

  1. @taro373

    Questioner

    -vで鍵をマウントする方法で、鍵に関するエラーは消えました
    ssl_certificateとssl_certificate_keyパラメータで指定している例を参考にしたので、
    もやもやしますが、この部分はクリアできました
    ありがとうございました

ssl_certificateとssl_certificate_keyで指定した鍵が存在するかを確認しましたが、ここは問題がないようです。

これらのファイルはホスト側に存在するもので、コンテナ内には存在しないのではないでしょうか?

コンテナを起動する際に以下二つのオプションを追加すればホストのSSL鍵をコンテナ内に共有できると思います。

-v /etc/nginx/ssl/server.crt:/etc/nginx/ssl/server.crt
-v /etc/nginx/ssl/server.key:/etc/nginx/ssl/server.key
1Like

Comments

  1. @taro373

    Questioner

    -vで鍵をマウントする方法で、鍵に関するエラーは消えました
    ssl_certificateとssl_certificate_keyパラメータで指定している例を参考にしたので、
    もやもやしますが、この部分はクリアできました
    ありがとうございました

Your answer might help someone💌