본문 바로가기

리눅스

[draft] 우분투에 Apache2를 컴파일하여 설치하는 방법

728x90

우분투(Ubuntu 22.04)에 Apache2를 컴파일하여 설치하는 방법

1. 의존성 설치

  • 빌드 도구와 Apache2가 필요로 하는 의존성을 설치합니다.
sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install -y zlib1g-dev libssl-dev libpcre3-dev
sudo apt-get install libnghttp2-dev

2. Apache 소스 다운로드

  • 공식 Apache 웹사이트에서 Apache2 소스코드를 다운로드합니다.
cd /usr/local/src
wget -q https://dlcdn.apache.org/httpd/httpd-2.4.59.tar.gz

3. APR, APR-util 소스 다운로드

apr_recommended

wget -q --no-check-certificate https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
wget -q --no-check-certificate https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz

4. httpd(Apache) 압축 해제

  • 다운로드한 아카이브를 압축 해제합니다.
tar -xzf httpd-2.4.59.tar.gz

5. APR, APR-util 디렉토리 생성

mkdir httpd-2.4.59/srclib/{apr,apr-util}

6. APR, APR-util 압축 해제

tar xfz apr-1.7.4.tar.gz -C httpd-2.4.59/srclib/apr --strip-components=1
tar xfz apr-util-1.6.3.tar.gz -C httpd-2.4.59/srclib/apr-util --strip-components=1

7. 소스 디렉토리로 이동

  • 압축 해제된 디렉토리로 이동합니다.
cd httpd-2.4.59
728x90

8. 설정 및 컴파일

  • configure 스크립트를 실행하여 컴파일을 위한 설정을 합니다.
./configure \
--prefix=/usr/local/apache2 \
--bindir=/usr/local/apache2/bin \
--sbindir=/usr/local/apache2/sbin \
--sysconfdir=/usr/local/apache2/conf \
--enable-http2 \
--enable-so \
--enable-rewrite \
--enable-mods-shared=all \
--enable-ssl \
--with-included-apr \
--with-mpms-shared=all \
--with-mpm=worker

9. 빌드 및 설치

  • make 명령어로 빌드를 진행하고 make install 명령어로 설치합니다.
make -j $(( $(nproc) / 2 ))
sudo make install

10. Apache 버전 및 디렉토리 구조 확인

/usr/local/apache2/sbin/apachectl -v
$ /usr/local/apache2/sbin/apachectl -v
Server version: Apache/2.4.59 (Unix)
Server built:   May 10 2024 08:33:40
/usr/local/apache2/sbin/apachectl -V
$ /usr/local/apache2/sbin/apachectl -V
Server version: Apache/2.4.59 (Unix)
Server built:   May 10 2024 08:33:40
Server's Module Magic Number: 20120211:131
Server loaded:  APR 1.7.4, APR-UTIL 1.6.3, PCRE 8.39 2016-06-14
Compiled using: APR 1.7.4, APR-UTIL 1.6.3, PCRE 8.39 2016-06-14
Architecture:   64-bit
Server MPM:     worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_PROC_PTHREAD_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/apache2"
 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
tree -L 1 /usr/local/apache2
$ tree -L 1 /usr/local/apache2
/usr/local/apache2
├── bin
├── build
├── cgi-bin
├── conf
├── error
├── htdocs
├── icons
├── include
├── lib
├── logs
├── man
├── manual
├── modules
└── sbin

14 directories, 0 files

11. Apache 설정 수정

  • 설정 파일 백업
sudo cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf_$(date +"%Y%m%d"-%H%M%S)
sudo cp /usr/local/apache2/conf/extra/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf_$(date +"%Y%m%d"-%H%M%S)
sudo cp /usr/local/apache2/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf_$(date +"%Y%m%d"-%H%M%S)
  • ServerName 편집
sudo sed -i 's/^#ServerName.*/ServerName localhost/' /usr/local/apache2/conf/httpd.conf
  • ssl, socache_shmcb, rewrite, http2 모듈 활성화
sed -i 's/^#\(LoadModule ssl_module modules\/mod_ssl.so\)/\1/' /usr/local/apache2/conf/httpd.conf
sed -i 's/^#\(LoadModule socache_shmcb_module modules\/mod_socache_shmcb.so\)/\1/' /usr/local/apache2/conf/httpd.conf
sed -i 's/^#\(LoadModule rewrite_module modules\/mod_rewrite.so\)/\1/' /usr/local/apache2/conf/httpd.conf
sed -i 's/^#\(LoadModule http2_module modules\/mod_http2.so\)/\1/' /usr/local/apache2/conf/httpd.conf
  • 가상호스트(VirtualHosts) 설정
sudo mkdir -p /usr/local/apache2/htdocs/site1
echo "<html><body><h1>welcome to the website</h1></body></html>" > /usr/local/apache2/htdocs/site1/index.html
  • httpd-vhosts.conf 설정
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  • httpd-ssl.conf 설정
vim /usr/local/apache2/conf/extra/httpd-ssl.conf

12. Apache 실행

  • Apache 구성 파일의 구문을 체크합니다.
/usr/local/apache2/sbin/apachectl -t
$ /usr/local/apache2/sbin/apachectl -t
Syntax OK
  • Apache를 실행합니다.
sudo /usr/local/apache2/bin/apachectl start

13. 방화벽 설정

  • 방화벽에서 포트 80(HTTP)과 443(HTTPS)를 열어주어야 합니다.

14. 브라우저에서 테스트

  • 브라우저를 열고 http://localhost 또는 서버의 IP 주소를 입력하여 Apache2가 정상적으로 작동하는지 확인합니다.

15. Apache 모듈 확인

/usr/local/apache2/sbin/apachectl -M
$ /usr/local/apache2/sbin/apachectl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_worker_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 ssl_module (shared)
 http2_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
 rewrite_module (shared)

 

컴파일을 통해 Apache2를 설치하는 것은 패키지 관리자를 통해 설치하는 것보다 더 많은 관리 부담이 따릅니다. 시스템에 새로운 버전을 설치하거나 업데이트할 때 의존성 문제가 발생할 수 있습니다.

 

참고URL

- Apache : HTTP Server Project

- Apache : Portable Runtime (APR) Project

 

728x90