この記事では、主に 1 つの Nginx イメージを複数の PHP-FPM コンテナに合わせて調整する方法を紹介します。これには一定の参考値があります。今、共有します。必要な友人は参考にしてください。
最近、私は、 Docker コンテナを使用して一連の PHP マイクロサービスをデプロイすることに取り組んできました。問題の 1 つは、PHP アプリケーションが (ここで述べたような単純な Apache/PHP[1] セットアップではなく) PHP-FPM および Nginx で動作するようにセットアップされていることです。そのため、PHP マイクロサービスごとに 2 つのコンテナーが必要です (これも同等です)。 2 つの Docker イメージに):
この画像は GitHub[2] でオープン ソースにしました。この問題が頻繁に発生する場合は、お気軽にチェックしてください。
PHP-FPM と Nginx を併用すると、PHP アプリケーションのパフォーマンスが向上します [3]。ただし、欠点は、PHP-FPM Docker イメージがデフォルトで PHP Apache に設定されないことです。画像。Nginx にバンドルされています。
Nginx コンテナを PHP-FPM バックエンドに接続する場合は、そのバックエンドの DNS レコードを Nginx 構成に追加する必要があります。たとえば、PHP-FPM コンテナが php-fpm-api という名前のコンテナとして実行されている場合、Nginx 構成ファイルは次のようになります。
nginx location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # This line passes requests through www.dongfan178.com to the PHP-FPM container fastcgi_pass php-fpm-api:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param www.huayi1.cn/ www.dongfan178.com SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param www.00534.cn PATH_INFO $fastcgi_path_info; }
最初の解決策: Docker ドキュメントに記載されているメソッド envsubst を使用します。
最初は、簡単だと思いました。 Docker ドキュメントには envsubst[4] の使用方法に関する優れた小さな章がありますが、残念ながら、これは私の Nginx 構成ファイルでは機能しません:
vhost.confnginx server { listen 80; index index.php index.html; root /var/www/public; client_max_body_size 32M; location / { try_files $uri /index.php?$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass ${NGINX_HOST}:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
shell /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
これらの変数は通常、Nginx 自体によって渡される [5]ため、それらが何であるか、パラメータを渡す方法を理解するのは簡単ではありません。これはコンテナの動的な構成可能性に影響します
ほぼ成功した別の Docker イメージ
次に、さまざまな Nginx ベース イメージの検索を開始しました。 2つ見つけましたが、どちらも2年間更新されていませんでした。私は martin/nginx[6] から始めて、動作するプロトタイプを取得できるかどうかを確認しようとしました。
Martin のイメージは、特定のファイル ディレクトリ構造を必要とするため、少し異なります。まず Dockerfile に追加しました。FROM martin/nginx
nginx server { listen 80; index index.php index.html; root /var/www/public; client_max_body_size 32M; location / { try_files $uri /index.php?$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass $ENV{"NGINX_HOST"}:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
基本イメージのバージョンが古く、2 年以上更新されていません。これにより、セキュリティとパフォーマンスのリスクが生じる可能性があります。
アプリに空のディレクトリを要求する必要はないようですが、ファイルは別のディレクトリに配置されています。
最終ソリューション
shell # Pull down the latest from Docker Hub docker pull shiphp/nginx-env:latest # Run a PHP container named "php-fpm-api" docker run --name php-fpm-api -v $(pwd):/var/www php:fpm # Start this NGinx container linked to the PHP-FPM container docker run --link php-fpm-api -e NGINX_HOST=php-fpm-api shiphp/nginx-env
如果你想自定义这个镜像,添加你自己的文件或者Nginx配置文件,只需要像下面这样扩展你的Dockerfile:
FROM shiphp/nginx-env ONBUILD ADD <PATH_TO_YOUR_CONFIGS> /etc/nginx/conf.d/
现在我所有的PHP-FPM容器都使用单个Nginx镜像的实例,当我需要升级Nginx、修改权限或者配置一些东西的时候,这让我的生活变得简单多了。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上が単一の Nginx イメージを複数の PHP-FPM コンテナーに合わせて調整する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。