Docker デスクトップ上の Nginx php-fpm の問題

Docker デスクトップ上の Nginx php-fpm の問題

Windows 用 Docker デスクトップの単一コンテナーで nginx と php-fpm を実行しています。私は IT 部門の人間であり、開発者ではないので、わかりやすく説明してください。構成を機能させようとしていますが、うまくいきません。複数のサブドメインが php-fpm に渡されるようにする必要があります。php アプリは、特定のサブドメインによってどのデータベースを開くかを決定します。つまり、clientA.mydomain.com clientB.mydomain.com はすべて php に渡され、アプリはどの DB に接続するかを認識します。

サブドメインを別のサイトにリダイレクトするための解決策を検索して見つけましたが、すべてのサブドメインを単一のサイトに許可し、localhost と同じように処理する必要があります。

これは、localhost または 127.0.0.1 を使用すると正常に動作しますが、DNS URL を使用しようとすると、サイトのログインが停止し、すべての Ajax 呼び出しが動作しなくなります。セッション変数が返されなくなるようです。ログイン ページが表示され、パスワードが失敗するとエラーが表示されるので、サイトが適切な DB と通信していることはわかりますが、ログにはエラーや Ajax 応答は表示されません。

server {
    listen       80  default_server;
    server_name  _;  
    # I have tried server_name *.mydomain.com and server_name .mydomain.com, the latter yeilds the same results as this current config.
    
    root /usr/share/nginx/html;
    server_tokens off;

    index index.php index.html index.htm;

    charset utf-8;
    # Add stdout logging
    error_log /dev/stdout info;
    access_log /dev/stdout;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

質問を送信するには多くのものを削除する必要がありました。

同じ設定で localhost または 127.0.01 を使用すると、ログインが機能し、ajax が応答し、サイトは期待どおりにメイン ページを読み込みます。

nginx stdout | 192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "POST /login.php HTTP/1.1" 302
nginx stdout | 192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "GET / HTTP/1.1" 200 
nginx stdout | 192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "GET /framework.js?version=
nginx stdout | 192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "GET /resources/all.css 
192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "GET /resources/js/pdfjs/pdf.js 
nginx stdout | 192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "GET /app.js?version=2021
nginx stdout | 192.168.80.1 - - [08/Sep/2021:13:23:00 +0000] "GET /resources/images/login_loader_logo.gif
192.168.80.1 - - [08/Sep/2021:13:23:01 +0000] "GET /ajax.php?_dc=163110738
192.168.80.1 - - [08/Sep/2021:13:23:02 +0000] "POST /ajax.php HTTP/1.1" 200 
192.168.80.1 - - [08/Sep/2021:13:23:02 +0000] "GET /ajax.php?_dc=1631107382410&

ホスト ファイルに作成した URL エントリを使用してテストすると、js と ajax が URL を使用して動作していないようです。

192.168.96.1 - - [08/Sep/2021:13:29:45 +0000] "GET /login.php HTTP/1.1" 200
192.168.96.1 - - [08/Sep/2021:13:29:45 +0000] "GET /showClientLogo.php HTTP/1.1" 200
192.168.96.1 - - [08/Sep/2021:13:29:46 +0000] "GET / HTTP/1.1" 302
192.168.96.1 - - [08/Sep/2021:13:29:46 +0000] "GET /login.php HTTP/1.1" 200
192.168.96.1 - - [08/Sep/2021:13:29:47 +0000] "GET /showClientLogo.php HTTP/1.1" 200
192.168.96.1 - - [08/Sep/2021:13:29:57 +0000] "POST /login.php HTTP/1.1" 302
192.168.96.1 - - [08/Sep/2021:13:29:57 +0000] "GET / HTTP/1.1" 302
192.168.96.1 - - [08/Sep/2021:13:29:57 +0000] "GET /login.php HTTP/1.1" 200
192.168.96.1 - - [08/Sep/2021:13:29:58 +0000] "GET /showClientLogo.php HTTP/1.1" 200

前もって感謝します。

答え1

@MichaelHampton は正しかったです。いくつか試してみたところ、リダイレクト中に新しいセッションが作成され、システムがログイン ページにリダイレクトされ続けることに気付きました。アプリにはクロス ドメイン クッキーを処理する内部設定があり、それをオフにするとサイトはドメイン URL を使用して動作します。テスト中なので、http のみを使用し、https は使用していません。

関連情報