PHP-FPM 설정 누락으로 인한 문제 해결하기

프리터코더·2025년 6월 3일
0

php 문제 해결

목록 보기
61/79

PHP-FPM을 사용할 때 설정이 누락되거나 잘못 구성되면 성능 저하, 메모리 부족, 연결 실패 등 다양한 문제가 발생할 수 있습니다. 자주 누락되는 중요한 설정들과 해결책을 알아보겠습니다.

1. 프로세스 매니저 설정

가장 중요한 설정 중 하나인 프로세스 관리 설정입니다.

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

2. 메모리 제한 설정

메모리 관련 설정이 누락되면 OOM 에러가 발생합니다.

memory_limit = 256M
max_execution_time = 30
max_input_time = 60
post_max_size = 32M
upload_max_filesize = 32M

3. 소켓 연결 설정

웹서버와 PHP-FPM 간 통신 설정이 중요합니다.

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
}

4. 로깅 및 모니터링 설정

문제 진단을 위한 로깅 설정을 추가합니다.

; 슬로우 로그 설정
slowlog = /var/log/php8.1-fpm-slow.log
request_slowlog_timeout = 10s

; 상태 페이지 활성화
pm.status_path = /fpm-status
ping.path = /fpm-ping

; 액세스 로그
access.log = /var/log/php8.1-fpm-access.log

5. 보안 설정

보안 관련 설정이 누락되면 취약점이 발생할 수 있습니다.

; 사용자/그룹 설정
user = www-data
group = www-data

; 보안 설정
security.limit_extensions = .php .php3 .php4 .php5 .php7 .php8

; 환경 변수 제한
clear_env = yes
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin

6. 세션 설정

세션 관련 설정이 누락되면 세션 문제가 발생합니다.

session.save_handler = files
session.save_path = "/var/lib/php/sessions"
session.gc_maxlifetime = 1440
session.gc_probability = 1
session.gc_divisor = 1000

7. OPcache 설정

성능 향상을 위한 OPcache 설정을 추가합니다.

opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1

8. 설정 검증 스크립트

설정이 올바른지 확인하는 스크립트를 작성합니다.

<?php
function checkFPMConfig() {
    $checks = [
        'memory_limit' => ini_get('memory_limit'),
        'max_execution_time' => ini_get('max_execution_time'),
        'post_max_size' => ini_get('post_max_size'),
        'upload_max_filesize' => ini_get('upload_max_filesize'),
        'opcache.enable' => ini_get('opcache.enable')
    ];
    
    foreach ($checks as $setting => $value) {
        echo "$setting: $value\n";
    }
    
    // FPM 상태 확인
    if (function_exists('fastcgi_finish_request')) {
        echo "PHP-FPM is running\n";
    }
}

checkFPMConfig();

9. 자동 재시작 설정

프로세스 문제 발생 시 자동 재시작 설정을 추가합니다.

sudo systemctl enable php8.1-fpm
[Service]
Restart=always
RestartSec=10

10. 모니터링 스크립트

FPM 상태를 모니터링하는 스크립트를 작성합니다.

#!/bin/bash
STATUS_URL="http://localhost/fpm-status"
RESPONSE=$(curl -s $STATUS_URL)

if [[ $? -ne 0 ]]; then
    echo "FPM status check failed"
    systemctl restart php8.1-fpm
else
    echo "FPM is healthy"
fi

이러한 설정들을 체계적으로 구성하면 PHP-FPM 관련 문제를 예방하고 안정적인 서비스를 운영할 수 있습니다. 특히 프로덕션 환경에서는 모니터링과 로깅 설정을 반드시 포함해야 합니다.

profile
일용직 개발자. freetercoder@gmail.com

0개의 댓글