2

私はちょっとした実験をしています。よろしければ仮説です。主なアイデアは単純です: 3 つの Docker コンテナー、1 つは index.php を含む単純なデータ コンテナーであり、/app/web/単純に出力されますphpinfo();。これは正常に機能します。

正常に動作しているnginxコンテナと、別のPHP-FPMコンテナがあります。どちらも公式画像より。

標準のセットアップですべてが正常に機能し、セキュリティ対策がデータコンテナをphp-fpmにのみバインドしたとしても、nginxはファイル自体にアクセスすることさえできませんでした. したがって、データ コンテナは の php-fpm コンテナにマウントされ、/appすべてがうまくいっています。

これはすべて問題ありませんでした。それから、いくつかの変数をいじり始めました。

実際、nginx が変数を php-fpm に渡すだけの場合、nginx fastcgi セットアップでいくつかのパラメーターを削除できる可能性があることに気付きました。 ?

chrootに設定するとうまくいき/app、に追加chdirしました/webが、nginxから削除するとすぐにPATH_TRANSLATED機能しなくなります。私は得るFile not found.か、No input file specified.

nginx コンテナの nginx.conf の関連部分は次のとおりです。nginx.conf にrootは指定されていません。

location / {
    index index.php;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;

    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    fastcgi_index index.php;
    fastcgi_param HTTPS $https;
    fastcgi_param HTTP_PROXY '';
    fastcgi_intercept_errors on;
    fastcgi_pass php-fpm:9000;
    break;
}

www.confプールの関連部分:

chroot = /app

; Chdir to this directory at the start.
; Note: relative path can be used.
; Default Value: current directory or / when chroot

chdir = /web

php_admin_value[doc_root] = /app/web

何か案は?

4

1 に答える 1

1

そのため、適切な組み合わせが見つかるまで微調整を繰り返しました。これが私のnginx構成です:

    location / {
      index   index.php;
      fastcgi_index  /index.php;
      fastcgi_param  QUERY_STRING       $query_string;
      fastcgi_param  REQUEST_METHOD     $request_method;
      fastcgi_param  CONTENT_TYPE       $content_type;
      fastcgi_param  CONTENT_LENGTH     $content_length;

      fastcgi_param  SCRIPT_NAME        /index.php;
      fastcgi_param  REQUEST_URI        $request_uri;
      fastcgi_param  DOCUMENT_URI       $document_uri;
      fastcgi_param  SERVER_PROTOCOL    $server_protocol;
      fastcgi_param  REQUEST_SCHEME     $scheme;
      fastcgi_param  HTTPS              $https if_not_empty;

      fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
      fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

      fastcgi_param  REMOTE_ADDR        $remote_addr;
      fastcgi_param  REMOTE_PORT        $remote_port;
      fastcgi_param  SERVER_ADDR        $server_addr;
      fastcgi_param  SERVER_PORT        $server_port;
      fastcgi_param  SERVER_NAME        $server_name;

      # PHP only, required if PHP was built with --enable-force-cgi-redirect
      fastcgi_param  REDIRECT_STATUS    200;
      fastcgi_param SCRIPT_FILENAME /index.php;
      fastcgi_param HTTP_PROXY '';

      fastcgi_pass php-fpm:9000;
    }

そして、ここに私のプール構成があります:

chroot = /app
chdir = /web
php_admin_value[doc_root] = web

基本的に、何が起こっているのかを確認できるように、デフォルトの fastcgi_params ファイルからすべてをコピーしました。次のステップは、デフォルトの Symfony 2 アプリなど、怒りに満ちた何かでこれをテストすることです。

于 2016-09-12T11:36:27.233 に答える