이 글은 주로 여러 PHP-FPM 컨테이너에 대해 단일 Nginx 이미지를 조정하는 방법을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
# 🎜🎜 #최근에는 Docker 컨테이너를 사용하여 PHP 마이크로서비스 세트를 배포하기 위해 열심히 노력하고 있습니다. 문제 중 하나는 PHP 애플리케이션이 (여기에 설명된 간단한 Apache/PHP[1] 설정이 아닌) PHP-FPM 및 Nginx와 작동하도록 설정되어 있으므로 PHP 마이크로서비스마다 두 개의 컨테이너가 필요하다는 것입니다(또한 동일합니다). 두 개의 Docker 이미지로):이번 블로그 게시물에서는 위의 방법 1부터 방법 2까지의 과정을 간략하게 설명하고 사용 방법 소개로 마무리하겠습니다. 이 블로그는 Nginx 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[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 기본 이미지를 검색하기 시작했습니다. 두 개를 찾았는데 둘 다 2년 동안 업데이트가 안 됐어요. 나는 martin/nginx[6]로 시작하여 작동하는 프로토타입을 얻을 수 있는지 알아보려고 했습니다.
마틴의 이미지는 특정 파일 디렉터리 구조가 필요하기 때문에 조금 다릅니다. 먼저 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; } }
shell docker build -t shiphp/nginx-env:test . docker run -it --rm -e NGINX_HOST=php-fpm-api shiphp/nginx-env:test
Success! 하지만 이 방법에는 두 가지 문제가 있습니다.
마틴의 거울이 좋은 맞춤형 솔루션인 것 같아요. 그래서 저는 그의 저장소를 포크하고 위의 두 가지 문제를 해결하는 새로운 Nginx 기본 이미지를 구축했습니다. 이제 nginx 컨테이너를 사용하여 동적으로 명명된 백엔드 애플리케이션을 실행하려면 다음을 수행하면 됩니다.
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中文网!
相关推荐:
위 내용은 여러 PHP-FPM 컨테이너에 대해 단일 Nginx 이미지를 조정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!