web-dev-qa-db-ja.com

Dockerコンテナへのnginxリバースプロキシの502エラーコード

このスクリプトを使用して、nextcloudイメージ(ここから https://hub.docker.com/_/nextcloud/ )を使用してDockerコンテナーを実行しました:

docker run \
--rm \
--detach \
--publish 54002:80 \
--name cloud.example.com \
--volume /srv/cloud.example.com/:/var/www/html \
nextcloud

そして私はnginxでリバースプロキシを作成しました:

server {
        listen *:80;
        server_name cloud.example.com;
        proxy_set_header Host cloud.example.com;
        location / {
        rewrite ^(.*)$ https://cloud.example.com$1 permanent;
        }
}

server {
        listen *:443 ssl http2;
        server_name     cloud.example.com;
        proxy_set_header Host cloud.example.com;
        set $service_port 54002;
        set $service_ip 192.168.2.33;
        ssl_certificate         /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
        ssl_certificate_key             /etc/letsencrypt/live/cloud.example.com/privkey.pem;

        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;

        location / {
                proxy_pass http://$service_ip:$service_port;
        }
}

そして、502エラーコードが表示されます。ローカルネットワークからチェックしました http:// server_ip:54002 、正常に動作します。プロキシを備えたhttpサイトのみも動作します。動作するHttpNginx構成:

server {
        set $service_port 54002;
        set $service_ip 192.168.2.33;
        set $domain_name cloud.example.com;

        listen *:80;
        server_name $domain_name;

        proxy_set_header Host $domain_name;

        location / {
                proxy_pass http://$service_ip:$service_port;
        }
}

Https設定の何が問題になっていますか?

2
Bogdan Lashkov

この問題で何時間も苦労した後、私はついにサーバー構成にエラーを見つけました。 nginxではすべて問題ありませんが、ufwで443ポートを許可するのを忘れました。 http接続とhttps接続の両方にルール「NginxHTTP」で十分であると誤って判断しましたが、実際には80/tcpポートしか開いていなかったため、ufw allow 443/tcpと入力すると、すべてのエラーがなくなりました。 @alexusや他の人たちはあなたの時間を無駄にしてすみません!

0
Bogdan Lashkov