Linux

Apache 웹 서버 소스 코드 설치_[Rocky Linux]

KDY0218 2025. 11. 12. 21:56

서론

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 폴더 안으로 복사해서 **'설치를 완료'**하는 명령어

make install 입력 후 화면

 

 

 

 

 

아파치 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 폴더로 복사하여 설치를 완료합니다.

make -> make install 명령어 입력 후 화면

 

 

 

 

설치 확인 및 실행

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> -> 사이에 쓰고 싶은 내용 써서 저장 후 나오자.

 

 

 

** 궁금하신 부분 댓글 남겨주시면 아는 선에서 최대한 빠르게 답변 남겨드리겠습니다.

** 틀린 부분 있을시 댓글로 남겨주시면 더 공부하겠습니다.