이 글은 주로 여러 PHP-FPM 컨테이너에 대해 단일 Nginx 이미지를 조정하는 방법을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
# 🎜🎜 #최근에는 Docker 컨테이너를 사용하여 PHP 마이크로서비스 세트를 배포하기 위해 열심히 노력하고 있습니다. 문제 중 하나는 PHP 애플리케이션이 (여기에 설명된 간단한 Apache/PHP[1] 설정이 아닌) PHP-FPM 및 Nginx와 작동하도록 설정되어 있으므로 PHP 마이크로서비스마다 두 개의 컨테이너가 필요하다는 것입니다(또한 동일합니다). 두 개의 Docker 이미지로):- PHP-FPM 컨테이너
- Nginx 컨테이너#🎜🎜 ##🎜 🎜# 애플리케이션이 개발 및 프로덕션 환경을 포함하여 6개 이상의 PHP 마이크로서비스를 실행한다고 가정하면 결국 30개에 가까운 컨테이너가 있게 됩니다. 각 PHP-FPM 마이크로서비스 이미지에 대해 고유한 Nginx 이미지를 구축하는 대신 별도의 Nginx Docker 이미지를 구축하고 PHP-FPM 호스트 이름을 환경 변수로 이 이미지의 고유 구성 파일에 매핑하기로 결정했습니다.
이번 블로그 게시물에서는 위의 방법 1부터 방법 2까지의 과정을 간략하게 설명하고 사용 방법 소개로 마무리하겠습니다. 이 블로그는 Nginx Docker 이미지를 사용자 정의하기 위한 새로운 솔루션으로 끝납니다.
PHP-FPM과 Nginx를 함께 사용하면 더 나은 PHP 애플리케이션 성능을 낼 수 있지만[3], 단점은 PHP-FPM Docker 이미지가 그렇지 않다는 것입니다. 기본적으로 PHP Apache 이미지처럼 Nginx와 함께 번들로 제공됩니다. Nginx 컨테이너를 PHP-FPM 백엔드에 연결하려면 해당 백엔드에 대한 DNS 레코드를 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; }
하나의 PHP-FPM만 제공하는 경우 컨테이너 애플리케이션의 경우 Nginx 컨테이너의 구성 파일에 해당 이름을 하드코딩해도 괜찮습니다. 그러나 위에서 언급했듯이 각 PHP 서비스에는 해당 Nginx 컨테이너가 필요하므로 여러 Nginx 컨테이너를 실행해야 합니다. 새로운 Nginx 이미지(나중에 유지 관리하고 업그레이드해야 함)를 만드는 것은 여러 다른 볼륨을 관리하는 것조차 단일 변수 이름을 변경하는 데 해야 할 많은 작업처럼 보이기 때문에 어려울 것입니다.
첫 번째 해결 방법: envsubst 방법 사용
#🎜🎜 #처음에는 그런 줄 알았습니다. 쉬울 것입니다. Docker 문서에는 envsubst[4] 사용 방법에 대한 멋진 작은 장이 있지만 불행히도 내 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 ${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; } }내 vhost .conf 파일은 여러 Nginx 내장 환경 변수를 사용합니다. 결과적으로 Docker 설명서에 언급된 다음 명령줄을 실행하면 $uri 및 fastcgi_script_name이 정의되지 않았습니다.
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년 동안 업데이트가 안 됐어요. 나는 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; } }
이것은 내 원래 구성 파일과 유사하며 한 줄만 수정되었습니다: fastcgi_pass $ENV{"NGINX_HOST"}:9000;. 이제 Nginx 컨테이너와 php-fpm-api라는 PHP 컨테이너를 시작하려면 먼저 새 이미지를 컴파일한 다음 실행 시 해당 환경 변수에 전달할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

tomodifyDatainAphPessess, startSessionstession_start (), 그런 다음 $ _sessionToset, modify, orremovevariables.

배열은 PHP 세션에 저장할 수 있습니다. 1. 세션을 시작하고 session_start ()를 사용하십시오. 2. 배열을 만들고 $ _session에 저장하십시오. 3. $ _session을 통해 배열을 검색하십시오. 4. 세션 데이터를 최적화하여 성능을 향상시킵니다.

PHP 세션 쓰레기 수집은 만료 된 세션 데이터를 정리하기위한 확률 메커니즘을 통해 트리거됩니다. 1) 구성 파일에서 트리거 확률 및 세션 수명주기를 설정합니다. 2) CRON 작업을 사용하여 고재 응용 프로그램을 최적화 할 수 있습니다. 3) 데이터 손실을 피하기 위해 쓰레기 수집 빈도 및 성능의 균형을 맞춰야합니다.

PHP의 사용자 세션 활동 추적은 세션 관리를 통해 구현됩니다. 1) Session_start ()를 사용하여 세션을 시작하십시오. 2) $ _session 배열을 통해 데이터를 저장하고 액세스하십시오. 3) 세션 _destroy ()를 호출하여 세션을 종료합니다. 세션 추적은 사용자 행동 분석, 보안 모니터링 및 성능 최적화에 사용됩니다.

데이터베이스를 사용하여 PHP 세션 데이터를 저장하면 성능 및 확장 성을 향상시킬 수 있습니다. 1) 세션 데이터를 저장하기 위해 MySQL 구성 : php.ini 또는 php 코드에서 세션 프로세서를 설정하십시오. 2) 사용자 정의 세션 프로세서 구현 : 데이터베이스와 상호 작용하기 위해 열린, 닫기, 읽기, 쓰기 및 기타 기능을 정의합니다. 3) 최적화 및 모범 사례 : 인덱싱, 캐싱, 데이터 압축 및 분산 스토리지를 사용하여 성능을 향상시킵니다.

phpsessionstrackuserdataacrossmultiplepagerequestsususingauniqueIdStoredInAcookie.here'showtomanagetheMeftically : 1) STARTASESSIONSTART_START () andSTAREDATAIN $ _SESSION.2) RegenerATERATESSESSIDIDAFTERLOGINWITHSESSION_RATERATERATES (True) TopreventSES

PHP에서 세션 데이터를 통한 반복은 다음 단계를 통해 달성 할 수 있습니다. 1. Session_start ()를 사용하여 세션을 시작하십시오. 2. $ _session 배열의 모든 키 값 쌍을 통해 Foreach 루프를 통과합니다. 3. 복잡한 데이터 구조를 처리 할 때 is_array () 또는 is_object () 함수를 사용하고 print_r ()를 사용하여 자세한 정보를 출력하십시오. 4. Traversal을 최적화 할 때 페이징을 사용하여 한 번에 많은 양의 데이터를 처리하지 않도록 할 수 있습니다. 이를 통해 실제 프로젝트에서 PHP 세션 데이터를보다 효율적으로 관리하고 사용하는 데 도움이됩니다.

이 세션은 서버 측 상태 관리 메커니즘을 통해 사용자 인증을 인식합니다. 1) 세션 생성 및 고유 ID의 세션 생성, 2) ID는 쿠키를 통해 전달됩니다. 3) ID를 통해 서버 저장 및 세션 데이터에 액세스합니다. 4) 사용자 인증 및 상태 관리가 실현되어 응용 프로그램 보안 및 사용자 경험이 향상됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
