nginx リバース プロキシの背後にある Apache 上の Nextcloud が index.php リダイレクトで 404 を返す

nginx リバース プロキシの背後にある Apache 上の Nextcloud が index.php リダイレクトで 404 を返す

Apache (+php-fpm) 上で Docker コンテナとして実行されている nextcloud インスタンスと nginx リバース プロキシに問題が発生しています。

Nextcloud URL を開くと、nginx はリクエストを apache にプロキシし、apache は /index.php/login にリダイレクトします。ただし、何らかの理由で、nginx は /index.php/login に対して 404 を返します。

これは私の nginx ログです:

172.19.0.0 - - [29/Nov/2021:22:32:01 +0000] "GET / HTTP/1.1" 302 0 "-" "Some UA-String"

172.19.0.0 - - [29/Nov/2021:22:32:01 +0000] "GET /index.php/login HTTP/1.1" 404 548 "-" "Some UA-String"

私の nginx 設定:

    server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name cloud.example.com;

    ssl_certificate     [...];
    ssl_certificate_key [...];

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
        proxy_intercept_errors on;

        proxy_pass http://nextcloud-httpd; #nextcloud-httpd is apaches hostname in the docker network
    }

}

nginx が /index.php/login を apache に渡さずに、他のすべてのリクエストを渡すのはなぜですか? ああ、apache に直接アクセスしている場合はすべてが機能するので、nginx プロキシである必要があります。

ご協力ありがとうございます~anghenfil

答え1

問題が見つかりました。https を使用するには、nextcloud の設定に overwriteprotocol オプションを追加する必要がありました。基本的に、リダイレクトされるたびに nextcloud は http にリダイレクトしました。これはリバース プロキシの既知の問題であり、典型的な RTFM 状況です。https://docs.nextcloud.com/server/19/admin_manual/configuration_server/reverse_proxy_configuration.html

最高のアンゲンフィル

関連情報