⚙️php.ini
는 PHP의 핵심 동작을 제어하는 가장 중요한 설정 파일이다.
이 파일을 통해 리소스 제한, 에러 처리, 보안 설정, 업로드 정책 등 PHP의 모든 동작 방식이 결정된다.
이번 글에서는 Ubuntu 서버 기준으로 PHP 8.4의 php.ini 파일을 수정하는 방법과 각 항목의 의미, 추천값을 정리한다. 📋
📚 목차
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
🔹 short_open_tag
짧은 PHP 태그 <? >
사용 여부를 결정한다. 보통은 보안상 Off가 권장되지만, 레거시 코드 지원을 위해 On으로 변경할 수 있다.
short_open_tag = Off
2. 리소스 제한 설정 ⏱️
🔹 max_execution_time
PHP 스크립트의 최대 실행 시간을 초 단위로 설정한다. 기본값은 30초이다.
max_execution_time = 30
📌 상황별 추천 설정:
- 단순 웹사이트 or 블로그: 30초 (기본값)
- 파일 업로드, 대량 작업 등: 300초 이상
- 빠른 응답 요구 API 서버: 10초 이하
이 설정은 다음과 같은 목적을 가진다:
- 🛡️ 서버 자원 보호: 스크립트가 지나치게 오래 실행되면 CPU/메모리 자원을 과도하게 소비할 수 있기 때문에 이를 방지하기 위해 실행 시간을 제한한다.
- ⛔ 무한 루프 차단: 잘못된 코드로 인해 무한 루프가 발생하면 서버가 멈추거나 응답하지 않을 수 있기때문에 제한 시간을 두어 자동으로 종료된다.
- 📈 사용자 경험 개선: 요청이 지나치게 오래 걸리지 않도록 시간을 제한을 둔다. 실행 시간이 너무 길면 사용자는 타임아웃 에러를 경험하게 된다.
- 🔒 보안 강화: 공격자가 의도적으로 복잡한 요청을 보내 서버를 느리게 하거나 마비시키는 DDoS 공격 공격을 방어하는 데 두움을 줄 수 있다.
3. 파일 업로드 설정 🗃️
🔹 file_uploads
파일 업로드 허용 여부를 설정한다. 기본값은 On
이다.
file_uploads = On
🔹 upload_max_filesize
- 업로드 가능한 파일의 최대 크기를 지정한다. 기본값은 2M이다.
- 일반적으로 대부분의 사용자 요구사항을 충족하며, 이미지, 문서 등 중간 크기의 파일 업로드에 적합한 64M으로 설정해 준다 .
upload_max_filesize = 64M
🔹 post_max_size
- POST 방식으로 전송되는 전체 데이터의 최대 크기이다.
- upload_max_filesize보다 같거나 커야 한다. 업로드 파일 외에도 추가적인 폼 데이터(예: 텍스트 입력)도 포함하므로 균형 잡힌 설정을 위해 64M으로 변경해 준다
post_max_size = 64M
4. 에러 처리 설정 🛠️
🔹 display_errors
에러를 브라우저 화면에 출력할지 여부를 설정한다. 개발 환경에서는 On
, 운영 환경에서는 보안상 Off
가 권장된다.
display_errors = Off
🔹 log_errors
에러 로그 파일에 에러를 기록할지 여부를 결정한다. 기본값은 On
이다.
log_errors = On
🔹 error_reporting
어떤 종류의 에러를 출력할지를 설정한다. E_ALL & ~E_DEPRECATED
는 Deprecated (더 이상 사용되지 않는 기능) 경고는 생략한다.
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
🔹 expose_php
HTTP 응답 헤더에 PHP 버전 정보를 노출할지 설정한다. 보안상 Off
가 권장된다.
expose_php = Off
expose_php = On ; PHP 버전 정보를 HTTP 헤더에 노출
expose_php = Off ; PHP 버전 정보를 숨김
6. 기타 유용한 설정 ⚙️
🔹 default_charset
PHP가 사용하는 기본 문자셋이다. UTF-8로 설정하는 것이 일반적이다.
default_charset = "UTF-8"
🔹 allow_url_fopen
원격 파일을 fopen()
으로 열 수 있도록 할지 설정한다. 보안상 Off
가 권장된다. (외부 URL을 파일로 처리할지 여부)
allow_url_fopen = Off
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
로 접속하면 현재 설정을 확인할 수 있다. 📊
✅ php.ini 설정은 PHP 웹 서비스의 보안과 성능을 결정하는 중요한 요소이다.
처음엔 낯설 수 있지만, 하나씩 점검하고 변경해보면서 내 서버에 최적화된 환경을 구성해보자. 💪
'LEMP stack > PHP' 카테고리의 다른 글
PHP opcache 상태 실시간 모니터링 (0) | 2025.04.17 |
---|---|
PHP opcache 활성화로 성능 최적화하기 (0) | 2025.04.15 |
PHP8.4-FPM 성능 최적화 (프로세스 관리 설정) (1) | 2025.04.11 |
Nginx와 PHP8.4-FPM 연동 (Ubuntu 기반) (0) | 2025.04.03 |
Ubuntu에 PHP8.4-FPM 최신 버전 설치 (Ondřej Surý PPA 활용 + Laravel 연동까지) (0) | 2025.04.03 |