PHP 속도 개선 / 윈도우 웹서버 XAMPP FastCGI 적용방법

웹 서버에서 PHP 스크립트를 실행하는 방법에는 여러가지가 있습니다. 윈도우 XAMPP 환경에서는 XAMPP와 함께 설치된 Apache 2.0 Handler(Mod-PHP)를 사용하는데요. 문제는 윈도우 환경에서의 Mod-PHP는 성능이 좋지 않습니다.

때문에 윈도우 XAMPP 환경에서 별도의 프로세스로 FastCGI 처리하는 것이 좋습니다. 오늘은 윈도우 XAMPP 환경에서 FastCGI 모듈을 사용하여 PHP 속도를 개선하는 방법에 대해서 알아보겠습니다.

모듈 다운로드 및 파일 복사

phpinfo 입니다. 현재 Server API 부분이 Apache 2.0 핸들러로 되어있습니다. 이것을 FastCGI로 전환하겠습니다..

우선 FastCGI ASF 모듈 파일이 필요합니다 아래의 링크 Apache Lounge 다운로드 센터에 접속합니다.

Apache Lounge( https://www.apachelounge.com/download/ )



Apache Lounge 다운로드 페이지에 위와 같은 mod_fcgid 항목을 찾아 최신 버전의 mod_fcgid다운로드 합니다. Ctrl +F 로 검색하시면 빠르게 찾으실 수 있습니다.

본인의 아키텍처에 따라서 win64 버전과 win32 버전을 선택하세요.

다운로드 받아 압축을 해제한 후 mod_fcgid.so 파일을 XAMPP apache/modules 경로로 복사합니다.

php 모듈 코드 수정

모든 코드 수정 전에는 모든 컨피그 파일을 백업하심을 추천 드립니다.

준비가 되었으면 다음과 같은 경로의 파일을 수정합니다.

“/xampp/apache/conf/extra/httpd-xampp.conf
httpd-xampp.conf 파일을 열면 아래와 같은 색션을 찾아주세요.


#
# PHP-Module setup
#
LoadFile "/xampp/php/php8ts.dll"
LoadFile "/xampp/php/libpq.dll"
LoadFile "/xampp/php/libsqlite3.dll"
LoadModule php_module "/xampp/php/php8apache2_4.dll"

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

이 부분을 다음과 같이 바꿔줍니다.


#
# PHP-Module setup
#
LoadFile "c:/xampp/php/php8ts.dll"
LoadFile "c:/xampp/php/libpq.dll"
LoadFile "c:/xampp/php/libsqlite3.dll"

LoadModule fcgid_module modules/mod_fcgid.so

<IfModule fcgid_module>
	FcgidInitialEnv PATH "C:/xampp/php"
	FcgidInitialEnv SystemRoot "C:/Windows"
	FcgidInitialEnv SystemDrive "C:"
	FcgidInitialEnv TEMP "C:/xampp/tmp"
	FcgidInitialEnv TMP "C:/xampp/tmp"
	FcgidInitialEnv windir "C:/windows"
	FcgidIOTimeout 64
	FcgidConnectTimeout 16
	FcgidMaxRequestsPerProcess 1000 
	FcgidMaxProcesses 3
	FcgidMaxRequestLen 8131072
	# Location php.ini:
	FcgidInitialEnv PHPRC "C:/xampp/php"
	FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000

	<Files ~ "\.php$">
		Options Indexes FollowSymLinks ExecCGI 
		AddHandler fcgid-script .php
		FcgidWrapper "C:/xampp/php/php-cgi.exe" .php
	</Files>
</IfModule>

쌍 따옴표 있는 경로명들은 자신의 환경에 맞게 변경하여 쓰세요.

SystemRoot, SystemDrive, windir 는 윈도우 시스템이 설치된 경로 위치를 묻는 곳입니다.

PATH, TEMP, TEM, PHPRC, FcgidWrappe 는 XAMPP 경로에 관련된 부분입니다.

모든 세팅이 완료되었다면 XAMPP 를 재시작 합니다.

지시문에 대한 자세한 설명이 필요하신분은 아래의 글을 참고해 주세요.

https://www.sabujak.org/2023/12/05/xampp-apache-%ec%97%90%ec%84%9c-fastcgi-%ec%98%b5%ec%85%98-%ec%a7%80%ec%8b%9c%ec%9e%90-%ec%84%a4%ec%a0%95-%eb%b0%a9%eb%b2%95/

phpMyAdmin 오류해결

FastCGI 적용이후 phpmyadmin 에 접속하면 오류가 발생합니다.

에러 없이 phpmyadmin에 접속하기 위해서는 phpmyadmin 디렉토리에 대해서 Options ExecCGI 옵션을 추가해 주어야 합니다.

/xampp/apache/conf/extra/httpd-xampp.conf
httpd-xampp.conf 파일 제일 아래에 아래와 같은 내용을 추가해 줍니다.

Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
<Directory "c:/xampp/phpMyAdmin">
    
    # add this option to fix the error
    Options ExecCGI
    
    AllowOverride AuthConfig
    Require local
    ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

쌍 따옴표 있는 경로명들은 자신의 환경에 맞게 변경하여 쓰세요.

모든 세팅이 완료되었다면 XAMPP 를 재시작 합니다. 이제 phpmyadmin이 정상적으로 접속됨을 확인할 수 있습니다.

FastCGI 동작 확인

phpinfo에 접속했을 때 Server API Apache 2.0 핸들러 에서 CGI/FastCGI 로 변경되었다면 성공적으로 적용된것 입니다.

사이트 응답속도 – FastCGI 적용 전

워드프레스가 설치되어 있는 웹 서버 입니다. 저 수치가 정확한 수치는 아닙니다 그냥 참고만 해세요. opcache 비활성화 상태입니다.

사이트 응답 속도 – FastCGI 적용 후

FastCGI 적용 후 서버 응답 속도가 빨라짐을 확인할 수 있습니다.

XAMPP 윈도우 FastCGI 적용시 주의사항

FastCGI를 적용하고 나면 이제 php를 읽어 들이는 것은 아파치에서 관리하는 것이 아닌 위의 사진처럼 별도의 프로세스로 CGI / FastCGI 가 동작하고 있음을 볼 수 있습니다.

그런데 문제는 XAMPP 서버를 종료를 해도 이 프로세스들이 종료가 되지 않습니다. 정확히 말하자면 XAMPP 컨트롤 패널에서 서버를 종료할 때 FastCGI 프로세스가 죽지 않는 문제가 발생합니다.

서버 관리 한답시고 컨트롤 패널에서 계속 종료했다 시작했다를 반복하면 FastCGI 프로세스가 계속해서 쌓이게 되는것이죠. FastCGI 설정을 하셨다면 위와 같은 XAMPP Control Panel 에서 서버를 시작 / 종료하지 말아주세요.

이때에는 XAMPP 에서 제공하는 xampp_stop.exe 파일 이용하시기 바랍니다. 이 파일을 이용하면 동작중인 CGI / FastCGI 프로세스도 감지하여 함께 안전종료 해 줍니다.

아니면 윈도우 작업관리자에서 직접 종료해 주시던지요.

1 thought on “PHP 속도 개선 / 윈도우 웹서버 XAMPP FastCGI 적용방법”

Leave a Comment