LEMP stack/PHP

PHP8.4-fpm 연동 php.ini 설정

itsdev 2025. 4. 4. 18:00

⚙️php.ini는 PHP의 핵심 동작을 제어하는 가장 중요한 설정 파일이다.
이 파일을 통해 리소스 제한, 에러 처리, 보안 설정, 업로드 정책 등 PHP의 모든 동작 방식이 결정된다.
이번 글에서는 Ubuntu 서버 기준으로 PHP 8.4의 php.ini 파일을 수정하는 방법과 각 항목의 의미, 추천값을 정리한다. 📋


📚 목차

  1. 기본 설정
  2. 리소스 제한 설정
  3. 파일 업로드 설정
  4. 에러 처리 설정
  5. 보안 관련 설정
  6. 기타 유용한 설정
  7. 변경 적용 및 테스트

1. 기본 설정 🧱

🗂 php.ini 파일 위치

  • /etc/php/8.4/fpm/php.ini
cd /etc/php/8.4/fpm
sudo nano php.ini

🔹 engine

PHP 엔진의 활성화 여부를 설정한다. 기본값은 On이며, Off로 설정하면 PHP 스크립트가 실행되지 않는다.

engine = On

php.ini - engine = On
php.ini - engine = On

🔹 short_open_tag

짧은 PHP 태그 <? > 사용 여부를 결정한다. 보통은 보안상 Off가 권장되지만, 레거시 코드 지원을 위해 On으로 변경할 수 있다.

short_open_tag = Off

php.ini - short_open_tag

 


2. 리소스 제한 설정 ⏱️

🔹 max_execution_time

PHP 스크립트의 최대 실행 시간을 초 단위로 설정한다. 기본값은 30초이다.

max_execution_time = 30

php.ini - max_execution_time
php.ini - max_execution_time

 

📌 상황별 추천 설정:

  • 단순 웹사이트 or 블로그: 30초 (기본값)
  • 파일 업로드, 대량 작업 등: 300초 이상
  • 빠른 응답 요구 API 서버: 10초 이하

이 설정은 다음과 같은 목적을 가진다:

  • 🛡️ 서버 자원 보호: 스크립트가 지나치게 오래 실행되면 CPU/메모리 자원을 과도하게 소비할 수 있기 때문에 이를 방지하기 위해 실행 시간을 제한한다.
  • 무한 루프 차단: 잘못된 코드로 인해 무한 루프가 발생하면 서버가 멈추거나 응답하지 않을 수 있기때문에 제한 시간을 두어 자동으로 종료된다.
  • 📈 사용자 경험 개선: 요청이 지나치게 오래 걸리지 않도록 시간을 제한을 둔다. 실행 시간이 너무 길면 사용자는 타임아웃 에러를 경험하게 된다.
  • 🔒 보안 강화: 공격자가 의도적으로 복잡한 요청을 보내 서버를 느리게 하거나 마비시키는  DDoS 공격 공격을 방어하는 데 두움을 줄 수 있다.

3. 파일 업로드 설정 🗃️

🔹 file_uploads

파일 업로드 허용 여부를 설정한다. 기본값은 On이다.

file_uploads = On

php.ini - file_uploads = On
php.ini - file_uploads = On

🔹 upload_max_filesize

  • 업로드 가능한 파일의 최대 크기를 지정한다. 기본값은 2M이다. 
  • 일반적으로 대부분의 사용자 요구사항을 충족하며, 이미지, 문서 등 중간 크기의 파일 업로드에 적합한 64M으로 설정해 준다 .
upload_max_filesize = 64M

php.ini - upload_max_filesize = 2M
php.ini - upload_max_filesize

🔹 post_max_size

  • POST 방식으로 전송되는 전체 데이터의 최대 크기이다.
  • upload_max_filesize보다 같거나 커야 한다. 업로드 파일 외에도 추가적인 폼 데이터(예: 텍스트 입력)도 포함하므로 균형 잡힌 설정을 위해 64M으로 변경해 준다
post_max_size = 64M

php.ini - post_max_size
php.ini - post_max_size


4. 에러 처리 설정 🛠️

🔹 display_errors

에러를 브라우저 화면에 출력할지 여부를 설정한다. 개발 환경에서는 On, 운영 환경에서는 보안상 Off가 권장된다.

display_errors = Off

php.ini - display_errors
php.ini - display_errors

🔹 log_errors

에러 로그 파일에 에러를 기록할지 여부를 결정한다. 기본값은 On이다.

log_errors = On

php.ini - log_errors
php.ini - log_errors

🔹 error_reporting

어떤 종류의 에러를 출력할지를 설정한다. E_ALL & ~E_DEPRECATED는 Deprecated (더 이상 사용되지 않는 기능) 경고는 생략한다.

error_reporting = E_ALL & ~E_DEPRECATED

php.ini - error_reporting = E_ALL &amp; ~E_DEPRECATED
php.ini - error_reporting = E_ALL & ~E_DEPRECATED


5. 보안 관련 설정 🔐

🔹 disable_functions

보안상 위험한 PHP 함수를 비활성화한다. 서버에 따라 다음 함수들을 막는 것이 좋다:

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

php.ini - disable_functions
php.ini - disable_functions

🔹 expose_php

HTTP 응답 헤더에 PHP 버전 정보를 노출할지 설정한다. 보안상 Off가 권장된다.

expose_php = Off

php.ini - expose_php
php.ini - expose_php


expose_php = On ; PHP 버전 정보를 HTTP 헤더에 노출
expose_php = Off ; PHP 버전 정보를 숨김


6. 기타 유용한 설정 ⚙️

🔹 default_charset

PHP가 사용하는 기본 문자셋이다. UTF-8로 설정하는 것이 일반적이다.

default_charset = "UTF-8"

php.ini - default_charset
php.ini - default_charset

🔹 allow_url_fopen

원격 파일을 fopen()으로 열 수 있도록 할지 설정한다. 보안상 Off가 권장된다. (외부 URL을 파일로 처리할지 여부)

allow_url_fopen = Off

php.ini - allow_url_fopen
php.ini - allow_url_fopen


7. 변경 사항 적용 및 확인 방법 🔄

php.ini를 수정한 후에는 PHP-FPM과 웹서버를 재시작해야 설정이 적용된다.

sudo systemctl restart php8.4-fpm
sudo systemctl restart nginx

🔍 적용 확인

서버 루트 디렉토리에 phpinfo() 테스트 파일을 생성하여 설정을 확인할 수 있다.

cd /var/www/html
sudo nano info.php
<?php phpinfo(); ?>

브라우저에서 http://서버-IP/info.php로 접속하면 현재 설정을 확인할 수 있다. 📊

phpinfo()
phpinfo()


✅ php.ini 설정은 PHP 웹 서비스의 보안과 성능을 결정하는 중요한 요소이다.
처음엔 낯설 수 있지만, 하나씩 점검하고 변경해보면서 내 서버에 최적화된 환경을 구성해보자. 💪

728x90
반응형
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.