CentOS·RHEL 계열 리눅스에서 아파치(httpd)와 PHP를 yum으로 설치하는 절차를 정리한 내용이다. 새 서버 구축 시 참고하거나 필요한 명령만 복사하여 사용할 수 있다.
1. 적용 환경
아래 명령은 CentOS 7/8 또는 RHEL 등 yum(또는 dnf)을 사용하는 배포판을 기준으로 한다. root 또는 sudo 권한이 있는 계정이어야 하며, 네트워크 연결과 기본 저장소가 활성화되어 있다고 가정한다.
2. 아파치 설치
웹 서버 패키지 이름은 httpd이다. Ubuntu 계열의 apache2와 이름이 다르므로 혼동하지 않도록 한다.
yum install -y httpd
-y 옵션을 주면 설치 확인 질문에 자동으로 yes가 입력되어 비대화형으로 진행된다. 설치 후 서비스 등록 및 기동을 누락하기 쉬우므로, 아래와 같이 enable 및 start를 수행한다.
# 부팅 시 아파치 자동 기동
systemctl enable httpd
# 즉시 기동
systemctl start httpd
# 기동 상태 확인
systemctl status httpd
이후에도 브라우저에서 접속이 되지 않으면 방화벽에서 80·443 포트가 막혀 있는 경우가 많다. 해당 포트를 개방한다.
# firewalld 사용 시
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
3. PHP 및 주요 모듈 설치
PHP만 설치하면 mysqli, gd 등 확장 모듈이 없어 "확장 모듈 없음" 오류가 발생할 수 있다. 웹 애플리케이션에서 자주 사용하는 모듈은 사전에 함께 설치하는 것이 좋다.
yum install -y php php-common php-opcache php-cli php-gd php-curl php-mysqlnd php-mysqli php-mbstring php-devel php-json php-zip php-xml
각 패키지의 역할은 다음과 같다.
- php, php-common — PHP 코어 및 기본 설정
- php-opcache — 스크립트 캐싱으로 실행 속도 향상
- php-cli — 터미널에서 php 명령 사용(크론, CLI 스크립트)
- php-gd — 이미지 리사이즈, 썸네일 생성 등
- php-curl — 외부 URL 호출, API 연동
- php-mysqlnd, php-mysqli — MySQL/MariaDB 연동 시 필수
- php-mbstring — 한글 등 멀티바이트 문자열 처리
- php-devel — pecl 확장 설치 시 필요(필요 시에만)
- php-json, php-zip, php-xml — JSON, ZIP, XML 처리
PHP 또는 모듈을 새로 설치한 경우 아파치를 재시작해야 반영된다.
systemctl restart httpd
4. PHP 동작 확인
문서 루트(일반적으로 /var/www/html/)에 테스트 파일을 생성한 뒤 브라우저 또는 curl로 확인한다.
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
curl -s http://localhost/info.php | head -20
확인 후 보안을 위해 info.php는 삭제하는 것이 좋다.
5. MySQL 연동 (선택)
PHP에서 DB를 사용할 경우 MySQL/MariaDB를 설치한 뒤 접속 테스트를 수행한다. DB·사용자 생성 및 권한 부여 예시는 아래와 같다.
-- 예시용 DB·사용자 (실제 비밀번호는 별도로 설정)
CREATE DATABASE IF NOT EXISTS myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'myapp_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
PHP에서 접속 여부를 확인할 때는 아래와 같이 간단히 테스트할 수 있다.
<?php
$pdo = new PDO(
'mysql:host=localhost;dbname=myapp;charset=utf8mb4',
'myapp_user',
'your_password'
);
var_dump($pdo->query('SELECT 1')->fetch());
// 정상 시 array(1) { [1]=> string(1) "1" } 형태로 출력됨
6. 자주 발생하는 문제와 대처
yum 저장소의 PHP 버전이 낮은 경우
기본 저장소가 PHP 5.x 또는 7.1 등 구버전만 제공하는 경우가 있다. 최신 문법 또는 보안 패치를 적용하려면 버전이 부족할 수 있다.
Remi 저장소 등을 추가한 뒤 php74, php81 등 버전별 패키지로 설치할 수 있다. 기본 yum으로 먼저 설치하고, 버전 업이 필요하면 Remi 등으로 전환하는 방식을 사용할 수 있다.
PDO MySQL 접속 시 pdo_mysql이 없다고 나오는 경우
PDO를 사용하는데 pdo_mysql 드라이버가 없다고 나오는 경우가 있다. php-mysqlnd 설치 시 mysqli와 함께 PDO MySQL이 포함되는 경우가 많다.
php -m으로 모듈 목록에 pdo_mysql이 있는지 확인하고, 없으면 yum search php pdo로 pdo 관련 패키지를 찾아 추가 설치하면 된다. PDO MySQL 오류 시 모듈 목록 확인 후 pdo 관련 패키지를 추가하면 해결할 수 있다.
SELinux로 인한 403·500 또는 파일 접근 실패
아파치가 /var/www/html 이외 경로의 파일을 읽거나, 업로드 디렉터리에 쓰기를 시도할 때 SELinux가 차단하여 403·500이 발생할 수 있다.
보안을 유지하면서 사용하려면 setsebool, chcon으로 필요한 항목만 허용하거나, 테스트 시에만 setenforce 0으로 원인을 확인한다. 403/500 발생 시 SELinux 로그(ausearch 등)를 확인한 뒤, 출력되는 컨텍스트 또는 불리언을 허용하면 해결할 수 있다.
한 줄 요약
yum install httpd → systemctl enable/start httpd → 방화벽 80·443 개방 → PHP 및 php-* 모듈 설치 → systemctl restart httpd → info.php로 확인 후 삭제. PHP 버전 부족 시 Remi 저장소 검토, PDO MySQL 미동작 시 php -m·pdo 패키지 추가, 403/500 시 SELinux 로그·setsebool/chcon 확인.
댓글 0