Ubuntu Apache PHP 사이트 배포 시 403 Forbidden, 500 Internal Server Error 해결 방법

Ubuntu Apache 서버에서 PHP 사이트 배포 시 발생하는 403 Forbidden, 500 Internal Server Error의 원인과 해결 방법을 정리했습니다. VirtualHost 설정, 권한 문제, PHP 모듈 설치, Apache 로그 확인 방법까지 실무 기준으로 설명합니다.

Ubuntu Apache PHP 사이트 배포 시 403 Forbidden, 500 Internal Server Error 해결 방법

Ubuntu 서버에 Apache를 설치하고 PHP 사이트를 배포한 후 접속하면 예상치 못한 오류가 발생하는 경우가 많습니다.

대표적으로 다음 두 가지 오류가 자주 발생합니다.

  • 403 Forbidden
  • 500 Internal Server Error

이 글에서는 Ubuntu Apache 환경에서 PHP 사이트 배포 시 발생하는 오류의 원인과 해결 방법을 단계별로 정리하겠습니다.


403 Forbidden 오류 해결 방법

오류 메시지

Forbidden
You don't have permission to access this resource.

이 오류는 대부분 Apache 권한 설정 또는 DocumentRoot 설정 문제로 발생합니다.


VirtualHost 설정 확인

Apache VirtualHost 설정 파일을 열어 DocumentRoot와 Directory 권한을 확인합니다.

<VirtualHost *:8081>
    ServerName example.com
    DocumentRoot /home/project-manager/dist

    <Directory /home/project-manager/dist>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

설정을 수정한 후에는 반드시 문법 검사를 진행합니다.

sudo apache2ctl configtest

정상이라면 Apache를 재시작합니다.

sudo systemctl restart apache2

디렉터리 접근 권한 확인

Apache 프로세스는 최종 파일뿐 아니라 상위 디렉터리에도 접근할 수 있어야 합니다.

현재 권한을 확인합니다.

ls -ld /home
ls -ld /home/project-manager
ls -ld /home/project-manager/dist

권한이 부족한 경우 다음과 같이 수정합니다.

sudo chmod o+x /home
sudo chmod o+x /home/project-manager
sudo chmod -R o+rX /home/project-manager/dist

권한 설정 설명

권한의미

o+x 다른 사용자가 디렉터리에 진입 가능
o+r 파일 읽기 가능
o+rX 디렉터리 탐색 및 파일 읽기 가능

실무에서는 Apache 서비스 계정(www-data)이 DocumentRoot까지 접근 가능한지 확인하는 것이 중요합니다.


500 Internal Server Error 해결 방법

오류 메시지

HTTP ERROR 500

500 오류는 Apache까지는 정상 접근했지만 PHP 실행 과정에서 문제가 발생했을 때 발생합니다.


Apache 오류 로그 확인

가장 먼저 해야 할 작업은 오류 로그 확인입니다.

sudo tail -n 80 /var/log/apache2/error.log

실무에서 대부분의 원인은 error.log 한 줄로 확인 가능합니다.

예시

PHP Fatal error
Permission denied
Undefined function
Module not found

PHP 설치 여부 확인

PHP가 정상 설치되어 있는지 확인합니다.

php -v

예상 출력

PHP 8.2.0

Apache PHP 모듈 확인

Apache에서 PHP 모듈이 활성화되어 있는지 확인합니다.

apache2ctl -M | grep php

정상이라면 다음과 같은 결과가 출력됩니다.

php_module (shared)

PHP 설치

PHP가 설치되지 않은 경우 다음 명령어를 실행합니다.

sudo apt update

sudo apt install php libapache2-mod-php php-mysql -y

설치 후 Apache를 재시작합니다.

sudo systemctl restart apache2

PHP 에러 직접 확인하기

개발 환경에서는 PHP 에러를 직접 출력하도록 설정할 수 있습니다.

예를 들어 login.php 상단에 아래 코드를 추가합니다.

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>

브라우저에서 다시 접속하면 실제 오류 메시지를 확인할 수 있습니다.

예시

Undefined variable
Call to undefined function
PDOException

운영 서버에서는 보안상 display_errors 사용을 권장하지 않습니다.


MySQL 확장 모듈 설치

PHP에서 데이터베이스 연결 시 아래와 같은 오류가 발생할 수 있습니다.

mysqli 함수 오류

Call to undefined function mysqli_connect()

PDO 오류

Class 'PDO' not found

이 경우 PHP MySQL 모듈이 설치되지 않은 상태입니다.

설치 방법

sudo apt install php-mysql -y

설치 후 Apache를 재시작합니다.

sudo systemctl restart apache2

파일 권한 확인

PHP 파일 권한도 확인해야 합니다.

ls -l /home/project-manager/dist/login.php

권장 권한

sudo chmod 644 /home/project-manager/dist/login.php

디렉터리 권한도 함께 확인합니다.

sudo chmod o+x /home/project-manager
sudo chmod -R o+rX /home/project-manager/dist

Apache 포트 추가 방법

하나의 서버에서 여러 사이트를 운영할 경우 포트를 분리할 수 있습니다.

ports.conf

Listen 8081
Listen 8082

VirtualHost 설정

<VirtualHost *:8081>
    ServerName example.com
    DocumentRoot /home/site1
</VirtualHost>

<VirtualHost *:8082>
    ServerName example.com
    DocumentRoot /home/site2
</VirtualHost>

설정 적용

sudo apache2ctl configtest
sudo systemctl restart apache2

방화벽(UFW) 허용

포트를 추가했다면 방화벽도 열어야 합니다.

sudo ufw allow 8081/tcp
sudo ufw allow 8082/tcp

적용 상태 확인

sudo ufw status

자주 사용하는 Apache 점검 명령어

Apache 상태 확인

sudo systemctl status apache2

Apache 설정 검사

sudo apache2ctl configtest

포트 확인

sudo ss -lntp | grep apache

PHP 버전 확인

php -v

Apache 오류 로그 실시간 확인

sudo tail -f /var/log/apache2/error.log

실무 점검 순서

403 또는 500 오류가 발생하면 아래 순서대로 확인하는 것이 가장 빠릅니다.

1. Apache 설정 검사

sudo apache2ctl configtest

2. Apache 재시작

sudo systemctl restart apache2

3. 오류 로그 확인

sudo tail -f /var/log/apache2/error.log

4. PHP 설치 여부 확인

php -v

5. PHP 모듈 확인

apache2ctl -M | grep php

6. 파일 및 디렉터리 권한 확인

ls -ld /home/project-manager
ls -ld /home/project-manager/dist

FAQ

Q. 403 Forbidden이 발생하는 가장 흔한 원인은 무엇인가요?

대부분 Directory 권한 설정 누락 또는 상위 디렉터리 실행 권한(x) 부족 때문입니다.

Q. 500 Internal Server Error는 무조건 PHP 문제인가요?

아닙니다. PHP 오류가 가장 많지만 Apache 설정 오류, .htaccess 오류, 권한 문제도 원인이 될 수 있습니다.

Q. Apache 로그는 어디서 확인하나요?

/var/log/apache2/error.log

에서 확인할 수 있습니다.

Q. PHP 설치 후에도 500 오류가 발생합니다.

error.log를 확인하여 누락된 확장 모듈이나 PHP Fatal Error를 확인해야 합니다.


마무리

Ubuntu Apache 환경에서 PHP 사이트를 배포할 때 발생하는 403 Forbidden과 500 Internal Server Error는 대부분 권한 문제, VirtualHost 설정 오류, PHP 모듈 누락 또는 PHP 실행 오류 때문에 발생합니다.

특히 문제 해결 시 가장 먼저 확인해야 할 항목은 Apache 오류 로그(error.log)입니다. 실제 운영 환경에서도 대부분의 원인은 로그 한 줄에서 확인할 수 있으며, 불필요한 설정 변경보다 로그 분석이 가장 빠른 해결 방법입니다.

403 오류는 권한과 Directory 설정을, 500 오류는 PHP 모듈 및 error.log를 우선 확인하면 대부분 해결할 수 있습니다.