서론
VMware 워크스테이션 pro를 이용했다.
AlamLinux10.0 최소설치 모드 이용
편의상 root 권한으로 진행했다.
소스코드 확보는 아파치 소프트웨어 공식 다운로드 사이트 , PCRE2 공식 페이지(GitHub) 에서 가져온다.
버전 : httpd-2.4.65, apr-1.7.6, apr-util-1.6.3, pcre2-10.47
목표
맞춤형 서버 구축 : dnf 자동 설치와 달리, --prefix 나 --enable-mods 등 세부 옵션을 직접 제어하여 최적화된 웹서버 환경 구성
의존성 구조 이해 : 아파치가 실행되기 위해 필요한 APR,PCRE 라이브러리를 수동으로 먼저 설치해 보며 소프트웨어 간의 의존 관계를 파악.
최신 버전 관리 : 리눅스 배포한이 제공하는 버전이 아닌, 가장 최신 버전의 소스코드를 직접 설치하는 과정과 능력을 확보
컴파일 준비 및 도구 설치
dnf -y install gcc gcc-c++ expat-devel wget tar
-> 요리를 만들기 전에, 필요한 '주방 도구'와 '기본재료'를 설치하는 과정
추가 설명
gcc / gcc-c++ : 컴파일러, ** 번역기 ** : 다운로드할 아파치 소스 코드는 C언어, C++언어(사람이 읽을 수 있는 언어)로 작성되어 있다. 컴퓨터는 이 언어를 바로 이해하지 못하기 때문에 컴퓨터가 알아듣는 '기계어'로 번역해 주는 중요한 도구.
expat-devel : 아파치는 XML이라는 형식의 설정 파일을 읽어야 할 때가 있는데, expat 라이브러리가 그 일을 도와준다.
뒤에 붙은 -devel은 "development"의 약자로, C언어 소스 코드를 번역(컴파일)할 때 필요한 '설명서'나 '청사진'이 들어있다는 뜻
소스 코드 다운로드
아파치와 아파치가 의존고 있는 '필수 재료 ( APR , PCRE )의 원본 소스 코드를 인터넷에서 가져와 저장하는 단계
cd /usr/local/src -> 작업 위치로 이동. [ 프로그램의 소스코드를 src 폴더에 보관하는 것이 오래된 약속이라고 한다.]
추가설명
이제부터 다운로드 하는 모든 파일은 이 폴더 안에 저장된다.
curl -O https://dlcdn.apache.org/httpd/httpd-2.4.65.tar.bz2
curl -O https://dlcdn.apache.org/apr/apr-1.7.6.tar.gz
curl -O https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.bz2
추가설명
- O : 다운로드할 때 URL의 파일 이름을 그대로 사용해서 저장하라는 옵션
APR : 아파치가 윈도우, 리눅스 등 다양한 운영체제(OS) 환경에서도 똑같이 작동할 수 있도록 도와주는 호환성 부품
APR-Util : APR이 기본적인 호환성을 책임진다면 그 위에서 좀 더 편리한 기능들(데이터베이스 연결, XML 처리 등)을 제공
PCRE : '정규 표현식'이라는 고급 '문자열 검색/변경' 기능을 제공, URL 재작성 등에 필요한 정규 표현식 라이브러리 ( 더 정확한 기능은 따로 더 공부하자... ㅠ)

압축 해제 및 파일 정리
tar xfj httpd-2.4.65.tar.bz2
tar xfz apr-1.7.6.tar.gz
tar xfz apr-util-1.6.3.tar.gz
tar xfj pcre2-10.47.tar.bz2
추가설명
dnf -y install bzip2 -> bz2 압축이 안풀린다면 압축 프로그램 설치를 미리 하자.

아파치 소스 코드 폴더 안으로 APR 라이브러리 이동
mv apr-1.7.6 httpd-2.4.65/srclib/apr -> apr-1.7.6 폴더를 통째로 httpd-2.4.65 폴더 안의 srclib 폴더 안으로 옮기고, 이름을 apr로 바꿉니다.
mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util -> apr-util-1.6.3 폴더도 마찬가지로 srclib 폴더 안으로 옮기고, 이름을 apr-util로 바꿉니다.
추가설명 : 아파치를 컴파일할 때 "APR 재료가 어딨어" 라고 물어보는데, 미리 아파치 소스 코드 폴더 안으로 '미리' 넣어두면, 나중에 아파치를 설치할 때 쉽게 알려줄 수 있다.
PCRE2 라이브러리 설치
cd /usr/local/src/pcre2-10.47/ -> 작업위치 이동 [PCRE 소스 코드 폴더]
./configure --prefix=/usr/local/pcre -> 설치 환경 설정 스크립트.
추가설명 :
./configure: '설치 환경 설정' 스크립트 "우리 집(이 서버) 환경에 맞게 설치할 수 있는지 확인하고, '설치 설명서(Makefile)' 좀 만들어 줘"라는 뜻
--prefix=/usr/local/pcre : '설치 희망 경로' 옵션 , 설치 후 /usr/local/pcre 라는 폴더를 만들어서 이 경로 안에 모아줘라고 지정한 것, dnf와 달리 사용자가 지정한 대로 경로를 정하는 *** 소스코드 설치의 핵심 *** 이라고 한다.
make -> 컴파일 명령어
make install -> 설치
make : configure가 만든 **'설치 설명서(Makefile)'**를 읽고, 그대로 **'컴파일(번역)'**을 시작하는 명령어
(1단계에서 설치한 gcc 번역기가 작동한다. C언어 소스코드가 기계어로 바뀌는 단계이다)
make install : 컴파일이 끝나서 만들어진 '완성품(실행 파일, 라이브러리)'들을, 아까 2번(configure)에서 약속했던 --prefix 경로, 즉 /usr/local/pcre 폴더 안으로 복사해서 **'설치를 완료'**하는 명령어

아파치 Apache (httpd) 설치
cd /usr/local/src/httpd-2.4.65/ -> 아파치 소스코드로 이동
추가설명 : 메인 요리 아파치를 설치한다.
./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all --with-include-apr --with-pcre=/usr/local/pcre/bin/pcre2-config
-> 설치 환경 설정 명령어
추가설명:
--prefix=/usr/local/apache : "아파치 완성품은 /usr/local/apache 폴더에 설치해 줘"라고 지정
--enable-so: 아파치에 '추가 기능(모듈)'을 나중에 레고 블록처럼 끼웠다 뺐다 할 수 있게 해 줘"라는 뜻
--enable-mods-shared=all: "아파치가 가진 모든 추가 기능(SSL, URL 재작성 등)을 그 '레고 블록' 형태로 다 만들어 줘"라는 뜻
--with-include-apr: "아까 3단계에서 mv 명령으로 이 폴더 안에 넣어둔 APR 재료를 사용해 줘"라는 뜻
--with-pcre=/usr/local/pcre/bin/pcre2-config: PCRE의 위치를 정확히 알려주는 옵션 ( /usr/local/pcre)

make -> 컴파일 명령어
make install -> 아파치 설치
-> 컴파일된 아파치 완성품들을 2번에서 약속한 /usr/local/apache 폴더로 복사하여 설치를 완료합니다.

설치 확인 및 실행
ls /usr/local/apache/bin -> 설치된 파일 확인
/usr/local/apache/bin/apachectl start -> 아파치 서버 시작 명령어
추가설명 :
ls /usr/local/apache/bin : make install이 정말로 /usr/local/apache/bin 폴더에 apachectl 같은 실행 파일들을 잘 만들었는지 눈으로 확인하는 과정.
/usr/local/apache/bin/apachectl start : dnf로 설치하면 systemctl start httpd를 쓰지만, 우리는 직접 설치했기 때문에 설치된 폴더 안에 있는 '아파치 제어(Apache ConTroL)' 스크립트(apachectl)를 직접 실행

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

/usr/local/apache/bin/apachectl start -> 이거 후에 뜨는 명령어는 오류가 아니라 경고 메시지이다.
도메인이 뭔지 모르겠다는 뜻인데, 아파치가 서버가 켜질 때 도메인을 물어봤는데 우리가 그 이름을 정해주지 않아서 나중에 서버이름을 설정해달라고 알려주는 경고 메시지 라고 한다.
*** ServerName 설정 단계 생략 ***
vi /usr/local/apache/conf/httpd.conf -> # ServerName localhost:80 [ 주석 삭제 ] -> 저장 후 종료
서버 1대로 여러 개의 웹사이트를 동시에 운영하는 '가상호스트'를 설정하게 되면 아파치가 servername이 정확히 설정되어 있지 않을 때 어떤 사이트를 보여줘야 할지 헷갈릴 수 있다. 현재 실습은 빠른 설치 확인을 위해 생략했다.
서버 아이피 주소를 웹브라우저에 입력 후 확인

vi /usr/local/apache/htdocs/index.html -> 내용 수정 vi 명령어
<h1>안녕하세요</h1> -> 사이에 쓰고 싶은 내용 써서 저장 후 나오자.
** 궁금하신 부분 댓글 남겨주시면 아는 선에서 최대한 빠르게 답변 남겨드리겠습니다.
** 틀린 부분 있을시 댓글로 남겨주시면 더 공부하겠습니다.
'Linux' 카테고리의 다른 글
| Ansible 기초. Playbook을 이용한 NFS 서버/클라이언트 구축 실습_[Rocky Linux] (0) | 2025.11.22 |
|---|---|
| Ansible 기초. Ad-Hoc을 이용한 Nginx 웹 서버 구축_[Rocky Linux] (0) | 2025.11.19 |
| 웹서버(Apache)&DNS 서버 구축 기초 실습_[Rocky Linux] (1) | 2025.11.09 |
| SSH 보안 강화: 포트 변경 및 키 설정_[Rocky Linux] (0) | 2025.11.08 |
| 텔넷(telnet)접속_[Rocky Linux] (0) | 2025.11.08 |