
이것이 실제로 가능한지 알고 싶지만 예전 AWS TAM 중 한 명이 시연한 것을 본 적이 있을 것입니다.
PHP 애플리케이션을 호스팅하는 ECS에서 PHP-FPM 컨테이너(포트 9000)를 제공하고 있습니다. nginx 상자를 ALB로 교체하려고 합니다.
기본적으로 포트 80을 통해 ALB에 요청하는 경우 원본 요청 데이터를 사용하여 포트 9000에서 애플리케이션의 진입점을 실행해야 합니다.
대상 그룹을 조작해 보았지만 nginx가 제공하는 것과 동일한 ProxyPass 기능을 수행하는 방법을 알아낼 수 없습니다.
이것이 가능한가? 그렇다면 어떻게?
답변1
이것이 실제로 가능한지 알고 싶지만 예전 AWS TAM 중 한 명이 시연한 것을 본 적이 있을 것입니다.
나는 이 솔루션을 기대하고 있습니다.
제가 이해한 바에 따르면, NGINX 뒤의 PHP-FPM이 가장 쉬운 솔루션이라는 결론에 도달했습니다. 원인:
- 빠른CGI웹 서버와 대화형 프로그램을 인터페이스하기 위한 바이너리 프로토콜입니다. 따라서 PHP-FPM에 의해 노출된 포트 9000은 AWS ELB 바로 뒤에 적합하지 않습니다.
- PHP 내장 웹 서버프로덕션 환경에서는 사용하면 안 됩니다.
- 동일한 서버를 웹 서버와 애플리케이션 서버로 허용하는 것은 나쁜 습관입니다. 애플리케이션 서버의 리소스는 웹 서버에 의해 점유되며 그 반대의 경우도 마찬가지입니다. 각 서버마다 장점이 있습니다. 우리는 웹 서버로 전투 테스트를 거쳤기 때문에 NGINX를 사용합니다. 우리는 기본 PHP FastCGI 구현으로 PHP-FPM을 사용합니다.쥐를 죽이기 위해 AK-47을 사용해서는 안 됩니다. 쥐덫을 사용해야 합니다.
- AWS ELB 뒤의 Django + Gunicorn 앱은 느린 클라이언트가 요청 전송을 시작할 때까지 원활하게 작동합니다. NGINX를 사용하면 전체 요청(모든 TCP 패킷)을 버퍼링하고 Gunicorn에 전달하므로 느린 클라이언트를 쉽게 처리할 수 있습니다. 참조:Gunicorn 배포. 이는 PHP-FPM에도 적용됩니다.
- NGINX는 정적 파일을 쉽게 제공하고 GZIP을 사용하여 압축합니다. 하지만 정적 파일은 S3와 같은 객체 스토리지를 사용하여 제공되어야 합니다.