PHP 설치 및 기본 설정 (Production)¶
999-to-organize의 아래 원본을 운영 기준으로 정리한 내용임.
04 - PHP - 01 - 설치 및 기본 설정.txt
목표는 Nginx + PHP-FPM 기반 운영 서버 표준 구성을 만드는 것임.
1. 설치 전 확인¶
sudo dnf info php
sudo dnf search php
sudo dnf list available | grep -E '^php'
2. 기본 패키지 설치¶
웹 서비스 기본 패키지:
sudo dnf install -y \
php php-fpm php-cli php-common \
php-mysqlnd php-pdo php-opcache \
php-mbstring php-xml php-dom php-json php-readline \
php-curl php-gd php-zip php-intl php-bcmath
선택 패키지(필요 시):
sudo dnf install -y php-pecl-uuid php-zstd php-phpiredis php-redis php-memcached php-apcu
sudo dnf install -y php-dbg php-devel php-xdebug
검증:
php -m
php -v
dnf list installed | grep -E '^php'
3. 서비스 기동¶
sudo systemctl enable --now php-fpm
sudo systemctl enable --now nginx
sudo systemctl status php-fpm
sudo systemctl status nginx
4. PHP-FPM 설정 기준 (/etc/php-fpm.d/www.conf)¶
핵심 항목:
user = nginx
group = nginx
listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
pm = dynamic
pm.max_children = 72
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 72
pm.max_requests = 500
access.log = /var/log/php-fpm/$pool.access.log
slowlog = /var/log/php-fpm/$pool.slow.log
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/$pool.error.log
php_admin_flag[log_errors] = on
pm.max_children 산정은 서버 리소스/부하 테스트 결과를 기준으로 조정함.
5. PHP 공통 설정 기준 (/etc/php.ini)¶
cgi.fix_pathinfo = 0
date.timezone = Asia/Seoul
expose_php = Off
post_max_size = 512M
upload_max_filesize = 512M
memory_limit = 2048M
max_execution_time = 30
max_input_time = 60
max_input_vars = 20000
6. 적용 및 검증¶
sudo nginx -t
sudo systemctl restart php-fpm
sudo systemctl restart nginx
sudo systemctl status php-fpm
sudo systemctl status nginx
소켓 확인:
ls -l /run/php-fpm/
7. 원본 대비 제외/변경 사항¶
/usr/lib/systemd/system/nginx.service직접 수정은 기본 절차에서 제외. 이유: 패키지 업데이트 시 덮어쓰기 위험이 있어 운영 표준은systemd drop-in사용./var/run/php-fpm/php-fpm.sock표기를/run/php-fpm/php-fpm.sock로 정리. 이유: 현대 배포판 기준 표준 경로이며/var/run은 심링크임.systemctl daemon-reload는 유닛 파일 변경 시에만 필요하므로 기본 적용 절차에서 제외.