LAMP 스택(Linux, Apache, MySQL, PHP)을 설치하는 방법에 대한 거의 모든 자습서에서는 PHP 스크립트를 처리하기 위해 내장 Apache 모듈을 사용할 것을 권장합니다. 예를 들어 Ubuntu에서는 sudo apt install libapache2-mod-php
와 같은 명령을 사용할 때 활성화합니다. 패키지를 설치합니다. 이것은 Apache가 mpm_prefork를 사용하도록 강제합니다. 방문자가 웹사이트에 액세스할 때마다 해당 연결을 처리하기 위해 새로운 프로세스가 시작됩니다. 트래픽이 적을 때 잘 작동합니다.
그러나 갑자기 트래픽이 폭주하면 큰 문제가 됩니다. 예를 들어 Reddit 게시물에 귀하의 웹사이트가 포함될 수 있으며 해당 게시물이 인기를 얻으면 단 몇 분 만에 수천 명의 방문자를 확보할 수 있습니다.
최상의 시나리오에서 Apache가 트래픽 버스트를 처리할 수 있다면 일부 불행한 방문자는 페이지가 로드될 때까지 30초에서 60초 정도 기다려야 할 수 있습니다. 이는 오늘날의 세계에서 터무니없는 일입니다. 최악의 시나리오에서는 서버가 심하게 지연되기 시작하고 일부 연결은 리소스 부족으로 인해 단순히 끊어집니다. 이 경우 방문자는 브라우저에 오류가 표시됩니다.
수백 또는 수천 명의 관심 있는 독자, 고객 또는 팬의 관심을 잃을 수 있기 때문에 어느 쪽이든 좋은 시나리오가 아닙니다.
불행히도 PHP는 어느 쪽이든 꽤 큰 리소스 돼지입니다. 그러나 mpm_event를 사용하면 Apache는 훨씬 더 효율적인 방식으로 갑작스러운 트래픽 버스트를 처리할 수 있습니다. 그러나 서버에 실제 또는 가상으로 최소 2GB의 RAM과 2개의 CPU 코어가 있는 것이 좋습니다. 초당 방문자 10명 이상과 같이 트래픽 급증이 예상되는 경우에는 더 많습니다. 가상 사설 서버를 사용하는 경우 상황과 SSD 스토리지에 가상 CPU 코어를 더 추가합니다. RAM은 보조입니다.
데비안 기반 배포판에서 Apache MPM 이벤트 및 PHP-FPM을 사용하는 방법
Debian, Ubuntu 또는 이 제품군의 다른 배포판에서는 "libapache2-mod-php" 패키지 설치를 피하면 됩니다. Apache를 설치할 때 기본적으로 MPM 이벤트를 사용합니다. 그러나 언급된 패키지를 설치하면 스크립트가 MPM 이벤트를 비활성화하고 MPM 프리포크를 활성화합니다. Apache PHP 모듈은 mpm_prefork에서만 (안전하게) 작동할 수 있습니다. 물론 "libapache2-mod-php"가 없으면 PHP 파일용 프로세서가 없습니다. 따라서 Apache에 포함된 PHP 모듈 대신 PHP-FPM을 사용합니다. 다음은 새 서버에 LAMP 스택을 설치하는 방법입니다. 웹 애플리케이션의 요구 사항에 따라 단계를 조정할 수 있습니다.
먼저 root로 로그인합니다. 그런 다음 Apache를 설치합니다.
apt update && apt install apache2
이 시점에서 Apache는 실제로 기본적으로 활성화된 MPM 이벤트와 함께 제공된다는 것을 알 수 있습니다.
apachectl -V
PHP-FPM을 설치합니다.
apt install php-fpm
Apache에서 PHP 프로세서를 활성화하는 방법에 대한 지침이 표시됩니다.
FastCGI 프로토콜을 활성화합니다.
a2enmod proxy_fcgi
Apache용 PHP-FPM 기본 구성을 활성화합니다.
a2enconf php7.0-fpm
참고 :Debian/Ubuntu의 향후 버전에서 이 명령은 다른 것으로 변경될 수 있습니다. a2enconf php7.6-fpm
, PHP-FPM이 다른 버전이기 때문입니다.
아파치를 다시 시작하십시오.
systemctl restart apache2
PHP 애플리케이션에 대한 나머지 요구 사항을 설치합니다. 다음은 예입니다:
apt install mariadb-server php-mysql
이렇게 하면 PHP 애플리케이션이 데이터베이스에 연결할 수 있도록 데이터베이스 서버와 PHP MySQL 모듈이 설치됩니다.
RedHat 기반 배포에서 Apache MPM 이벤트 및 PHP-FPM을 사용하는 방법
다른 인기 있는 서버 배포 선택은 RedHat 또는 CentOS입니다. 위와 같은 방법으로 MPM 이벤트를 활성화하고 PHP-FPM을 사용하여 Apache 클린 설치 예시를 제공합니다.
루트로 로그인하여 Apache를 설치합니다.
yum install httpd
Debian 기반 배포판과 달리 여기에서는 Apache가 기본적으로 MPM prefork를 사용하는 것을 볼 수 있습니다. 적어도 작성 당시 사용 가능한 최신 CentOS 7에서는.
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
Apache를 시작하고 부팅 시 자동 시작되도록 활성화합니다.
systemctl start httpd.service systemctl enable httpd.service
Apache가 이제 MPM 이벤트를 사용하는지 확인하십시오.
apachectl -V
PHP-FPM 및 FastCGI 모듈을 설치합니다.
yum install php-fpm mod_fcgid
"/etc/httpd/conf.d/php.conf"를 생성하여 Apache에 PHP 파일 처리 방법을 지시합니다. 아래의 모든 내용을 복사하여 터미널에 한 번에 붙여넣고 Enter 키를 누릅니다.
cat <<PASTE > /etc/httpd/conf.d/php.conf # Redirect to local php-fpm if mod_php is not available <IfModule !mod_php7.c> <IfModule proxy_fcgi_module> # Enable http authorization headers <IfModule setenvif_module> SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 </IfModule> <FilesMatch ".+\.ph(p[3457]?|t|tml)$"> #SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> <FilesMatch ".+\.phps$"> # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied </FilesMatch> # Deny access to files without filename (e.g. '.php') <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$"> Require all denied </FilesMatch> </IfModule> </IfModule> PASTE
이 훌륭한 구성에 대한 크레딧은 Debian에 있습니다. 다른 출처는 다음과 같은 간단한 구성 파일을 권장합니다.
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
그러나 이것은 일부 공격에 취약하며 특정 서비스가 실패할 경우 PHP 파일을 대중에게 노출할 수 있으며, 그 결과 저장된 비밀번호, 코드 및 민감한 데이터가 잠재적으로 노출될 수 있습니다.
아파치를 다시 시작하십시오.
systemctl restart httpd.service
PHP-FPM을 시작하고 부팅 시 자동 시작을 활성화합니다.
systemctl start php-fpm.service systemctl enable php-fpm.service
결론
이제 트래픽에 따라 훨씬 더 잘 확장되는 Apache 서버가 있습니다. 그러나 대부분의 사람들에게 "최상"인 기본 설정을 사용하고 있음을 기억하십시오. HTTP 서버를 최대한 활용하려면 조정할 수 있는 다양한 변수에 대해 읽어야 합니다. 이에 대한 올바른 값은 서버의 리소스, 예상 트래픽 및 PHP 애플리케이션에 따라 크게 달라집니다.