20. CentOS에서 아파치(Apache) 웹 서버 멀티 스레드 설정하기
페이지 정보
작성자 관리자 댓글 0건 조회 15회 작성일 26-11-06 20:48본문
20. CentOS에서 아파치(Apache) 웹 서버 멀티 스레드 설정하기
CentOS에서 아파치(Apache) 웹 서버를 멀티 스레드 방식으로 구동하려면 MPM(Multi-Processing Module)을 기본 prefork(멀티 프로세스)에서 worker 또는 event(멀티 스레드) 방식으로 변경해야 합니다. 아파치 2.4 버전 기준으로는 성능과 효율이 가장 좋은 event 방식을 권장합니다.
1. MPM 모듈 변경 설정
CentOS 7 / 8 (Apache 2.4 이상)
CentOS 7 이상 환경에서는 모듈 설정 파일만 수정하여 간단히 전환할 수 있습니다.
1. 설정 파일 열기
sudo vi /etc/httpd/conf.modules.d/00-mpm.conf
코드를 사용할 때는 주의가 필요합니다.
2. 모듈 주석 수정
기본값인 prefork 줄 맨 앞에 #을 붙여 주석 처리하고, worker 또는 event 줄의 #을 제거합니다.
# LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# 멀티 스레드 방식(worker)을 원할 때
# LoadModule mpm_worker_module modules/mod_mpm_worker.so
# 최신 멀티 스레드 방식(event, 권장)을 원할 때
LoadModule mpm_event_module modules/mod_mpm_event.so
코드를 사용할 때는 주의가 필요합니다.
3. 서비스 재시작 및 적용 확인
1. 설정 문법 검사
httpd -t
코드를 사용할 때는 주의가 필요합니다.
Syntax OK 메시지가 출력되는지 확인합니다.
2. 아파치 재시작
# CentOS 7 / 8
sudo systemctl restart httpd
# CentOS 6
sudo service httpd restart
코드를 사용할 때는 주의가 필요합니다.
3. 작업 모드 확인
현재 구동 중인 아파치의 MPM 방식을 최종 검증합니다.
httpd -V | grep -i mpm
코드를 사용할 때는 주의가 필요합니다.
결과 화면의 Architecture: 항목에 worker 또는 event가 표시되면 멀티 스레드 구동이 성공적으로 완료된 것입니다.
주의: 멀티 스레드(worker/event) 모드에서는 기존 아파치 모듈 형태(mod_php)의 PHP 가 구동되지 않거나 스레드 안정성(Thread-Safe) 문제가 발생할 수 있습니다. 따라서 PHP 환경을 함께 사용 중이라면 반드시 php-fpm을 연동하여 백엔드로 처리하도록 설정하셔야 합니다.
CentOS 환경에서 아파치를 멀티 스레드(event 또는 worker MPM)로 구동할 때, PHP 8.2는 반드시 php-fpm(FastCGI Process Manager)을 통해 연동해야 합니다. 기존의 mod_php는 스레드 안전성(Thread-Safety) 문제로 멀티 스레드 MPM에서 동작하지 않기 때문입니다.
Apache Event MPM과 PHP 8.2 FPM을 연동하는 핵심 설정 절차입니다.
1. PHP 8.2 및 php-fpm 설치 확인
Remi 저장소 등을 통해 PHP 8.2를 설치했다면 php-fpm 패키지가 함께 설치되어 있어야 합니다. 없다면 아래 명령어로 설치합니다.
# CentOS 7 / 8 기준 (Remi 저장소 사용 시)
sudo dnf install php-fpm -y # CentOS 8 이상
# 또는 sudo yum install php-fpm -y # CentOS 7
코드를 사용할 때는 주의가 필요합니다.
2. php-fpm 설정 확인 (소켓 파일 경로)
php-fpm이 Apache와 통신할 방식을 확인합니다. 기본적으로 Unix 소켓(.sock) 방식으로 설정되어 있습니다.
1. 설정 파일 열기
sudo vi /etc/php-fpm.d/www.conf
코드를 사용할 때는 주의가 필요합니다.
2. listen 항목 확인
아래와 같이 소켓 파일 경로로 지정되어 있는지 확인합니다. (이 경로를 Apache 설정에 사용합니다.)
listen = /run/php-fpm/www.sock
코드를 사용할 때는 주의가 필요합니다.
3. 사용자 및 그룹 확인
Apache가 접근할 수 있도록 소유자가 apache로 되어있는지 확인합니다.
listen.owner = apache
listen.group = apache
user = apache
group = apache
코드를 사용할 때는 주의가 필요합니다.
3. Apache - PHP 8.2 FPM 연동 설정
아파치가 .php 파일 요청을 받았을 때, 방금 확인한 php-fpm 소켓으로 토스해 주도록 설정합니다.
1. PHP 연동 설정 파일 생성 또는 수정
sudo vi /etc/httpd/conf.d/php.conf
코드를 사용할 때는 주의가 필요합니다.
2. 내용 작성 (기존 내용이 있다면 모두 지우고 아래 내용 대체)
# PHP 엔진 구동 비활성화 (mod_php 차단)
<IfModule mod_php7.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php.c>
php_admin_flag engine off
</IfModule>
# 모든 .php 파일을 php-fpm Unix 소켓으로 프록시 전달
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
# 디렉터리 기본 인덱스에 index.php 추가
DirectoryIndex index.php index.html
코드를 사용할 때는 주의가 필요합니다.
4. 서비스 시작 및 적용
1. 아파치 프록시 모듈 활성화 확인
FPM 연동은 아파치의 프록시 모듈(mod_proxy, mod_proxy_fcgi)을 사용합니다. CentOS 기본 아파치에는 활성화되어 있지만, httpd -M | grep proxy 명령어로 proxy_module과 proxy_fcgi_module이 출력되는지 확인해 두면 좋습니다.
2. 구문 검사
sudo httpd -t
코드를 사용할 때는 주의가 필요합니다.
Syntax OK가 나오면 통과입니다.
3. 서비스 재시작 및 자동 시작 등록
php-fpm 서비스를 켜고, 아파치를 재시작합니다.
# php-fpm 실행 및 상시 구동
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
# 아파치 재시작
sudo systemctl restart httpd
코드를 사용할 때는 주의가 필요합니다.
5. 연동 테스트
정상적으로 멀티 스레드 상에서 PHP 8.2가 동작하는지 확인합니다.
1. 웹 루트 디렉터리에 테스트 파일을 만듭니다.
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
코드를 사용할 때는 주의가 필요합니다.
2. 브라우저에서 http://서버IP/info.php에 접속합니다.
3. 페이지 상단에서 다음 두 항목을 확인합니다.
• Server API: FPM/FastCGI로 표시되어야 합니다.
• PHP Version: 8.2.x로 표시되어야 합니다.
설정 중 프록시 통신 오류인 503 Service Unavailable이나 권한 오류인 403 Forbidden이 발생한다면 SELinux 보안 정책 때문일 수 있습니다.
