리눅스 서버에서 높은 트래픽 웹사이트를 위한 Apache와 PHP 설정 방법

LAMP 스택(리눅스, 아파치, MySQL, PHP) 설치 방법에 대한 거의 모든 튜토리얼은 PHP 스크립트를 처리하기 위해 내장된 아파치 모듈을 사용할 것을 권장합니다. 예를 들어, 우분투에서 sudo apt install libapache2-mod-php라는 명령어를 사용하여 패키지를 설치할 때 이 기능을 활성화할 수 있습니다. 이 경우 아파치는 mpm_prefork를 사용하게 됩니다. 웹사이트에 방문자가 접근할 때마다 새 프로세스가 생성되어 해당 연결을 처리하게 됩니다. 이 방법은 트래픽이 낮을 때는 잘 작동합니다.
하지만, 갑작스러운 트래픽 폭주가 발생하면 큰 문제가 됩니다. 예를 들어, 레딧 게시물에 귀하의 웹사이트가 포함되고, 이 게시물이 인기를 얻으면 몇 분 안에 수천 명의 방문자가 몰릴 수 있습니다.
가장 좋을 경우 아파치가 트래픽 붐을 처리할 수 있다면, 일부 불운한 방문자는 페이지가 로드되기까지 30초에서 60초를 기다려야 할 수 있으며, 이는 오늘날 시대에서는 터무니없는 일입니다. 최악의 경우 서버는 심각하게 지연되기 시작하고, 일부 연결은 자원이 부족하여 단순히 끊길 수 있습니다. 이 경우 방문자는 브라우저에서 오류를 보게 됩니다.
어떤 경우에도 이는 좋지 않은 상황이며, 수백 또는 수천 명의 관심 있는 독자, 고객 또는 팬의 관심을 잃을 수 있습니다.
불행히도, PHP는 어떤 경우에도 상당한 자원을 소모합니다. 하지만 mpm_event를 사용하면 아파치는 갑작스런 트래픽 폭주를 훨씬 더 효율적으로 처리할 수 있습니다. 서버에는 최소 2GB의 RAM과 2개의 실제 또는 가상 CPU 코어가 필요하며, 초당 10명 이상의 방문자가 예상되는 경우에는 더 많은 자원이 필요합니다. 가상 사설 서버를 사용하는 경우, 상황에 맞게 더 많은 가상 CPU 코어와 SSD 저장소를 추가하십시오. RAM은 부차적입니다.
또한 읽어보세요: Nginx 대 Apache: 어느 것이 더 나은가?
Debian 기반 배포판에서 Apache MPM Event와 PHP-FPM 사용 방법
Debian, Ubuntu 또는 이 패밀리의 다른 배포판에서는 “libapache2-mod-php” 패키지를 설치하지 마십시오. 아파치를 설치하면 기본적으로 MPM 이벤트를 사용합니다. 그러나 위에 언급된 패키지를 설치하면 스크립트가 MPM 이벤트를 비활성화하고 MPM prefork를 활성화합니다. 아파치 PHP 모듈은 mpm_prefork와 함께(안전하게)만 작동할 수 있습니다. 물론 “libapache2-mod-php”가 없으면 PHP 파일을 처리할 프로세서가 없으므로, 아파치에 포함된 PHP 모듈 대신 PHP-FPM을 사용하게 됩니다. 다음은 새 서버에 LAMP 스택을 설치하는 방법입니다. 웹 응용 프로그램의 요구 사항에 따라 단계를 조정할 수 있습니다.
먼저 root로 로그인합니다. 그런 다음 아파치를 설치합니다.
apt update && apt install apache2이 시점에서 아파치에 MPM 이벤트가 기본적으로 활성화되어 있음을 확인할 수 있습니다.
apachectl -V
PHP-FPM을 설치합니다.
apt install php-fpm아파치에서 PHP 프로세서를 활성화하는 방법에 대한 지침을 확인할 수 있습니다.

FastCGI 프로토콜을 활성화합니다.
a2enmod proxy_fcgi아파치의 PHP-FPM 기본 구성을 활성화합니다.
a2enconf php7.0-fpm주: 향후 Debian/Ubuntu 버전에서는 이 명령이 a2enconf php7.6-fpm과 같이 변경될 수 있으며, PHP-FPM이 다른 버전이기 때문입니다.
아파치를 재시작합니다.
systemctl restart apache2PHP 애플리케이션에 필요한 나머지 요구 사항을 설치합니다. 예를 들어:
apt install mariadb-server php-mysql이것은 데이터베이스 서버와 PHP MySQL 모듈을 설치하여 PHP 애플리케이션이 데이터베이스에 연결할 수 있도록 합니다.
또한 읽어보세요: 아파치 서버에서 Mod_evasive로 DDoS 공격 방어하기
RedHat 기반 배포판에서 Apache MPM Event와 PHP-FPM 사용 방법
다른 인기 있는 서버 배포판 선택은 RedHat 또는 CentOS입니다. 위와 마찬가지로, MPM 이벤트가 활성화된 상태의 아파치를 깨끗하게 설치하는 예를 제공합니다.
root로 로그인하고 아파치를 설치합니다.
yum install httpdDebian 기반 배포판과 달리, 여기에서는 최신 CentOS 7에서 아파치가 기본적으로 MPM prefork를 사용하고 있음을 확인할 수 있습니다.
apachectl -V
MPM 이벤트를 활성화하려면 구성 파일을 편집해야 합니다.
sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf이 명령은 LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 행 앞에 # 기호를 추가하여 (비활성화 합니다.)

이제 다음 명령으로 #LoadModule mpm_event_module modules/mod_mpm_event.so 행을 주석 해제 (활성화)합니다.
sed -i '/mpm_event\.so$/s/^#//'/etc/httpd/conf.modules.d/00-mpm.conf아파치를 시작하고 부팅 시 자동 시작하도록 설정합니다.
systemctl start httpd.service
systemctl enable httpd.service이제 아파치가 MPM 이벤트를 사용하는지 확인합니다.
apachectl -V
PHP-FPM과 FastCGI 모듈을 설치합니다.
yum install php-fpm mod_fcgid“/etc/httpd/conf.d/php.conf”를 생성하여 아파치에 PHP 파일을 처리하는 방법을 지시합니다. 아래 모든 내용을 복사하여 터미널에 모두 붙여넣고 ENTER 키를 누릅니다.
cat</etc/httpd/conf.d/php.conf
# mod_php가 사용 가능한 경우 로컬 php-fpm으로 리디렉션
# http 인증 헤더 활성화
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
IfModule>
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
FilesMatch>
# 기본적으로 원시 php 소스에 대한 접근을 거부
# 재활성화하려는 경우 특정 가상 호스트 또는 디렉토리에서만 접근을 허용하는 것이 좋습니다.
Require all denied
FilesMatch>
# 파일 이름이 없는 파일에 대한 접근을 거부합니다(예: '.php').
Require all denied
FilesMatch>
IfModule>
IfModule>
PASTE 이 훌륭한 구성에 대한 크레딧은 Debian에 있습니다. 다른 소스에서는 다음과 같은 간단한 구성 파일을 권장합니다:
SetHandler "proxy:fcgi://127.0.0.1:9000"그러나 이는 몇 가지 공격에 취약하고, 특정 서비스가 실패할 경우 PHP 파일이 공개되므로, 저장된 비밀번호, 코드 및 민감한 데이터가 노출될 수 있습니다.
아파치를 재시작합니다.
systemctl restart httpd.servicePHP-FPM을 시작하고 부팅 시 자동 시작하도록 설정합니다.
systemctl start php-fpm.service
systemctl enable php-fpm.service결론
이제 트래픽으로 더 잘 확장되는 Apache 서버가 마련되었습니다. 그러나 기본 설정을 사용하고 있다는 점을 기억하십시오 - 이는 대부분의 사람들에게 “최선”인 것입니다. HTTP 서버에서 최대한의 성능을 얻으려면 조정할 수 있는 다양한 변수에 대해 배워야 합니다. 이러한 변수에 대한 적절한 값은 서버의 자원, 예상 트래픽 및 PHP 애플리케이션에 크게 의존합니다.