php2shell 보안 패치하려고 하는데 아래와 같은 버전이 필요합니다.
| PHP | 브랜치수정 버전 |
| PHP 8.3 | 8.3.36 이상 |
| PHP 8.4 | 8.4.27 이상 |
| PHP 8.5 | 8.5.12 이상 |
리눅스 시스템이 20.04라서 업그레이드 자체가 안된다 결국 리눅스 버전업까지 진행을 해야했습니다.
먼저 nginx 설정을 확인합니다.
sudo nginx -T 2>/dev/null | grep -nE "# configuration file|server_name|root |fastcgi_pass"
혹시 도커이면 sudo docker ps로 확인합니다.

sudo apt full-upgrade -y
sudo reboot
# 재접속 후
screen -S upgrade
sudo do-release-upgrade

Ctrl+A, C를 누르면 screen 안에 새 창이 열립니다(이전 창으로는 Ctrl+A, N으로 돌아갑니다). 아니면 그냥 N으로 취소하고 아래를 마친 뒤 다시 시작해도 됩니다.
1. DB 덤프 (필수)
sudo mysqldump --all-databases --routines --events --single-transaction > ~/all-db-$(date +%F).sql
ls -lh ~/all-db-*.sql
2. 설정과 워드프레스 파일 백업
sudo tar czf ~/backup-etc-wp-$(date +%F).tgz /etc/php /etc/nginx /etc/apache2 /etc/mysql /var/www 2>/dev/null
dpkg --get-selections > ~/packages-before.txt
백업 파일은 서버 밖으로 꼭 복사해 두세요(scp 등). 서버가 망가지면 서버 안에 있는 백업도 같이 날아갑니다.
3. MariaDB 메타패키지 확인
dpkg -l | grep -i mariadb
| 질문 | 답 |
| 서드파티 저장소 비활성화 / 1022 포트 추가 SSH | y |
| Do you want to start the upgrade? | y |
| 설정 파일 교체 여부 (/etc/mysql, /etc/php, /etc/nginx 등) | N (기존 파일 유지) |
| 서비스 자동 재시작 | Yes |
| Remove obsolete packages? | N |
| 마지막 재부팅 | y |
마리아 db 등은 n을 눌러야 합니다.

. 예전 focal용 PPA 설정을 치우고 jammy용으로 다시 추가
sudo rm /etc/apt/sources.list.d/ondrej-ubuntu-php-focal.list*
sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt update
apt-cache policy php8.3-fpm
Candidate:가 **8.3.36 이상이고 ubuntu22.04**가 붙은 버전이면 됩니다. 여기서 확인되지 않으면 진행하지 말고 결과를 보내주세요.
php8.3-fpm:
Installed: 8.3.13-1+ubuntu20.04.1+deb.sury.org+1
Candidate: 8.3.36-1+ubuntu22.04.1+deb.sury.org+1
Version table:
8.3.36-1+ubuntu22.04.1+deb.sury.org+1 500
500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main arm64 Packages
*** 8.3.13-1+ubuntu20.04.1+deb.sury.org+1 100
100 /var/lib/dpkg/status
ubuntu@python-server:~$
이제 8.3.36이 보입니다.

드디어 업그레이드가 완료
워드프레스 도구 - 사이트 건강 - 서버에서도 정상적으로 보입니다.

필요하다면 8.5로 올리는 방법도 있습니다.
sudo apt install -y php8.5-{fpm,gd,mysql,curl,mbstring,intl,imagick,xml,zip}
3. 설정 옮기기
FPM 풀 설정(listen = 127.0.0.1:9000, 프로세스 개수 등)
sudo cp /etc/php/8.5/fpm/pool.d/www.conf ~/www.conf.85-default
sudo cp /etc/php/8.3/fpm/pool.d/*.conf /etc/php/8.5/fpm/pool.d/
grep -rn "8\.3" /etc/php/8.5/fpm/pool.d/ # 8.3 경로가 남아 있으면 8.5로 수정
php.ini에서 직접 바꾼 값 확인
for k in memory_limit upload_max_filesize post_max_size max_execution_time max_input_vars max_input_time date.timezone; do
printf "%-22s 8.3: %-12s 8.5: %s\n" "$k" \
"$(php-fpm8.3 -i 2>/dev/null | grep -m1 "^$k" | awk '{print $3}')" \
"$(php-fpm8.5 -i 2>/dev/null | grep -m1 "^$k" | awk '{print $3}')"
done
ls /etc/php/8.3/fpm/conf.d/ | grep -vE '^[0-9]{2}-(.*)\.ini$' ; ls /etc/php/8.3/fpm/conf.d/ | grep -E '^9[0-9]-'
값이 다른 항목은 /etc/php/8.5/fpm/php.ini에서 8.3과 같게 맞춥니다. conf.d에 직접 만든 .ini 파일(예: 99-custom.ini)이 있으면 /etc/php/8.5/fpm/conf.d/로 복사합니다.
ubuntu:~$ grep -rn "8\.3" /etc/php/8.5/fpm/pool.d/ /etc/php/8.5/fpm/pool.d/www.conf:41:;listen = /run/php/php8.3-fpm.sock /etc/php/8.5/fpm/pool.d/www.conf:252:; It's available in: /usr/share/php/8.3/fpm/status.html ubuntu:~$ grep -E "^(memory_limit|upload_max_filesize|post_max_size|max_execution_time|max_input_vars|max_input_time|date.timezone)" \ /etc/php/8.3/fpm/php.ini /etc/php/8.5/fpm/php.ini /etc/php/8.3/fpm/php.ini:max_execution_time = 3600 /etc/php/8.3/fpm/php.ini:max_input_time = 3600 /etc/php/8.3/fpm/php.ini:memory_limit = 256M /etc/php/8.3/fpm/php.ini:post_max_size = 100M /etc/php/8.3/fpm/php.ini:upload_max_filesize = 100M /etc/php/8.3/fpm/php.ini:date.timezone = Asia/Seoul /etc/php/8.5/fpm/php.ini:max_execution_time = 30 /etc/php/8.5/fpm/php.ini:max_input_time = 60 /etc/php/8.5/fpm/php.ini:memory_limit = 128M /etc/php/8.5/fpm/php.ini:post_max_size = 8M /etc/php/8.5/fpm/php.ini:upload_max_filesize = 2M |
1. 8.5 php.ini 백업
sudo cp /etc/php/8.5/fpm/php.ini ~/php.ini.85-default
2. 6개 값을 8.3과 같게 변경
sudo sed -i \
-e 's/^max_execution_time = .*/max_execution_time = 3600/' \
-e 's/^max_input_time = .*/max_input_time = 3600/' \
-e 's/^memory_limit = .*/memory_limit = 256M/' \
-e 's/^post_max_size = .*/post_max_size = 100M/' \
-e 's/^upload_max_filesize = .*/upload_max_filesize = 100M/' \
-e 's#^;date.timezone =.*#date.timezone = Asia/Seoul#' \
/etc/php/8.5/fpm/php.ini
각 줄은 "이 항목의 줄을 찾아서 값을 바꿔라"라는 뜻입니다. 시간대는 8.5에서 ;date.timezone =처럼 주석 처리돼 있어서, ;를 없애면서 값을 넣도록 했습니다.
설정 문법 검사
sudo php-fpm8.5 -t
sudo php-fpm8.5 -t
test is successful이 나와야 합니다.
4단계: 8.3에서 8.5로 전환 (사이트가 몇 초 끊깁니다)
sudo systemctl disable --now php8.3-fpm
sudo dpkg --configure -a
sudo systemctl enable --now php8.5-fpm
systemctl is-active php8.5-fpm
sudo ss -tlnp | grep 9000
- dpkg --configure -a는 아까 멈춘 설치를 마무리하는 명령입니다. 이번에는 포트가 비어 있으니 에러 없이 끝나야 합니다.
- active가 나오고 9000번 포트에 php-fpm8.5가 보이면 성공입니다.
터미널의 PHP도 8.5로

sudo update-alternatives --set php /usr/bin/php8.5
php -v | head -1
8.5로 맞췄습니다.

8.3 삭제
sudo apt purge 'php8.3-*'
실행하면 지울 패키지 목록을 먼저 보여주고 Do you want to continue? [Y/n]라고 묻습니다. 목록에 php8.3-로 시작하는 것만 있는지 확인하고 Y를 누르세요. php8.5나 mariadb, nginx가 섞여 있으면 n을 누르고 목록을 보여주세요.
'IT Trend' 카테고리의 다른 글
| 구글 클라우드 콘솔 인증 플랫폼 (0) | 2026.10.23 |
|---|---|
| Xteink X3 글로벌판 펌웨어 설치하기 (0) | 2026.09.08 |
| 유튜브 업로드시 중간광고 수 조절하기 (0) | 2026.09.02 |
| 워드프레스 자동 AI 글쓰기 (0) | 2026.08.16 |
| Docker Nginx 사용하는 방법 (0) | 2026.08.10 |