서버 개설 시 php.ini 필수 설정값 정리

조회수 29

서버 세팅 시 php.ini에 자주 설정하는 값들을 정리한 내용이다. 업로드 용량, 실행 시간·메모리, 세션 유지 시간을 한 번에 맞춰 두면 "업로드 안 됨", "세션이 빨리 끊김" 같은 문제를 줄일 수 있다.

1. php.ini 파일 위치 확인

아파치·PHP 환경에서는 CLI용과 웹용 php.ini가 다를 수 있다. 웹에서 적용되는 것은 아파치가 사용하는 쪽이므로, 아래 방법으로 확인한다.

# CLI용 설정 파일 경로
php -i | grep "Loaded Configuration File"

# 웹에서는 phpinfo() 출력해서 "Loaded Configuration File" 확인하거나
php -r "phpinfo();" | grep "Loaded Configuration File"

출력된 경로의 파일을 수정한다. 보통 /etc/php.ini 또는 /etc/php.d/ 아래에 있는 경우가 많다.

2. 필수 설정값

아래 값들은 대용량 업로드·긴 실행 시간·세션 유지가 필요한 서비스에서 사용하는 설정을 모은 것이다. 숫자는 서버 사양과 요구사항에 맞게 줄이거나 늘리면 된다.

expose_php = Off
max_input_vars = 100000
max_execution_time = 180
max_input_time = 180
memory_limit = 2000M
upload_max_filesize = 2000M
post_max_size = 2000M
session.gc_maxlifetime = 86400

각 항목 설명

  • expose_php = Off — 응답 헤더에 PHP 버전이 노출되지 않도록 한다. 보안상 끄는 것이 좋다.
  • max_input_vars — GET·POST·Cookie로 받을 수 있는 변수 개수 상한. 폼 필드가 많거나 대량 데이터를 넘길 때 부족하면 잘리므로 100000 정도로 넉넉히 둔다.
  • max_execution_time — 스크립트 최대 실행 시간(초). 180이면 3분. 오래 걸리는 배치·API는 더 늘려도 된다.
  • max_input_time — 입력 파싱 허용 시간(초). 큰 POST를 받을 때 이 시간 안에 받지 못하면 끊긴다.
  • memory_limit — 스크립트당 사용 메모리 상한. 2000M이면 2GB. 서버 메모리에 맞춰 조절한다.
  • upload_max_filesize — 파일 하나당 업로드 최대 크기.
  • post_max_size — POST 전체 크기 상한. 폼과 파일을 합쳐 이 값보다 크면 수신되지 않는다. 이 값이 upload_max_filesize보다 작으면 업로드가 막히므로, 보통 upload_max_filesize와 같거나 더 크게 둔다.
  • session.gc_maxlifetime — 세션 파일 유효 시간(초). 86400이면 24시간. 로그인 유지 시간을 길게 할 때 늘리면 된다.

3. 수정 후 반영

php.ini를 변경한 뒤에는 웹 서버를 재시작해야 적용된다. PHP가 아파치 모듈로 붙어 있으면 아파치를 재시작한다.

sudo systemctl restart httpd

PHP-FPM을 사용하면 php-fpm을 재시작한다.

sudo systemctl restart php-fpm

적용 여부는 웹에서 phpinfo();로 확인하거나 php -i | grep -E "upload_max_filesize|post_max_size|memory_limit"로 확인한다.

4. 자주 발생하는 문제와 대처

업로드 크기를 늘렸는데도 큰 파일이 올라가지 않을 때

upload_max_filesize만 늘리고 post_max_size를 그대로 두면 POST 전체 크기 제한에 걸려 업로드가 거절된다. post_max_size가 upload_max_filesize보다 같거나 크게 있어야 한다. post_max_size를 upload_max_filesize와 동일하게(예: 2000M) 맞춘 뒤 서비스를 재시작하면 해결할 수 있다.

php.ini를 수정했는데 반영이 안 될 때

CLI용 php.ini와 웹용이 다를 수 있어, 웹에서는 다른 파일을 읽고 있을 수 있다. phpinfo()의 "Loaded Configuration File"이 가리키는 경로를 확인한 뒤 그 파일을 수정해야 한다. httpd나 php-fpm을 재시작하지 않으면 이전 값이 유지되므로, 재시작 후 적용 여부를 확인한다.

세션 시간을 늘렸는데도 금방 끊길 때

session.gc_maxlifetime만 늘리고 가비지 컬렉터가 자주 돌면 세션 파일이 일찍 삭제될 수 있다. 세션 저장 경로 권한과 gc 설정을 확인하고, 필요하면 session.gc_probability·gc_divisor도 검토한다. gc_maxlifetime만 올리는 것으로는 부족할 수 있으므로, 서버 세션 경로 권한을 맞추면 유지가 개선된다.

max_input_vars 부족으로 폼 데이터가 잘릴 때

폼 필드가 매우 많거나 name이 배열로 많이 넘어가면 "Unknown: Input variables exceeded 1000" 비슷한 오류가 난다. 기본값이 1000이므로 100000으로 올려 두었고, max_input_vars를 100000으로 올리면 잘리던 값이 정상적으로 수신된다.

한 줄 요약

php.ini 위치는 php -i 또는 phpinfo()로 확인 → expose_php Off, max_input_vars·execution_time·input_time·memory_limit·upload_max_filesize·post_max_size·session.gc_maxlifetime 설정 → httpd 또는 php-fpm 재시작. 업로드 안 되면 post_max_size ≥ upload_max_filesize, 반영 안 되면 올바른 php.ini 경로·재시작 확인.

댓글 0

  • 첫 번째 댓글을 남겨보세요.