APM - Apache 2.4 설치 + OpenSSL 1.1.1 - Linux(APM)

Share

Last Updated on 12월 31, 2023 by Jade(정현호)

안녕하세요
이번 포스팅은 Source Compile 로 설치하는 APM(Apache+PHP-FPM+MySQL) 연재글 에서 Apache 설치에 대한 내용이 기술되어 있습니다.  

* Apache -> MySQL -> PHP-FPM 순으로 보시면 되며 하단에 연결 링크가 있습니다.
* APM 과 TLS1.3을 위해 OpenSSL 모두 소스 컴파일(Source Compile)으로 설치하였습니다.
* 환경은  CentOS 7.8 / Apache 2.4.46 / OpenSSL 1.1.1h  입니다.

YUM(RPM) 으로 APM 설치 글은 아래 링크 포스트를 보시면 됩니다.
리눅스에 APM (Apache + PHP + Mysql) 설치 및 연동
               

OpenSSL 설치

Apache 에서 SSL을 사용하기 위해서 OpenSSL 이 필요하며 OpenSSL 설치 및 구성 등을 먼저 진행하도록 하겠습니다.
             

Apache 와 OpenSSL 버전

HTTPS 에서 사용되는 네트워크 통신 보안을 제공하기 위해 설계된 암호 규약이며 SSL 3.0을 기반으로 개발되었습니다.

SSL 1.0 -> 2.0 -> 3.0 (2015년에 금지) -> TLS 1.0 -> TLS 1.1 -> TLS 1.2 -> TLS 1.3

TLS 1.3 을 사용하기 위해서는 openssl 와 웹 서버의 특정 버전 이상이 필요 합니다.
OpenSSL 1.1.1 이상이 필요하고 apache 2.4.37 이상 이 필요 합니다.
참고로 nginx 는 1.13.0 이상이 필요 합니다.

OS의 패키지(yum)에는 openssl 1.0.2 만 포함되어 있으므로 TLS1.3을 사용할 수 없어서
사용하려면 OpenSSL을 소스 컴파일로 진행하려고 합니다.
             

파일 다운 및 설치

os repository 에서 가능한 최신 버전까지 일단 업데이트를 하고 진행하겠습니다.
[root]# yum -y install openssl-devel.x86_64 openssl.x86_64


openssl-1.1.1 Source 다운로드

[root]# wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz


컴파일 설치

[root]# tar zxvf openssl-1.1.1h.tar.gz

[root]# cd openssl-1.1.1h
[root]# ./config --prefix=/usr/local/openssl-1.1.1h
[root]# make;make install

# /etc/ld.so.conf   에  아래 내용 추가

[root]# vi /etc/ld.so.conf

/usr/local/openssl-1.1.1h/lib

[root]# ldconfig

<-- 내용 추가 후 ldconfig 명령어 실행


버전 확인

[root]# /usr/local/openssl-1.1.1h/bin/openssl version

OpenSSL 1.1.1h 22 Sep 2020


openssl 경로 변경

[root]# mv  /bin/openssl  /bin/openssl.1.0.2k-fips
   <-- 기존 버전 rename 하여 백업을 해둡니다.

[root]# ln -s /usr/local/openssl-1.1.1h/bin/openssl /bin/openssl
   <-- 심볼링크 생성
               

Apache 유저 생성

Apache 데몬 구동에 사용할 별도의 일반 유저를 생성하도록 하겠습니다.

[root]# groupadd apache 

[root]# useradd -g apache -d /usr/local/apache2.4 -s /sbin/nologin apache


-s /sbin/nologin 은 로그인을 막는 내용으로 로그인이 실제로는 접속이나 로그인 할 수 없습니다.
apache나 Tomcat, Nginx 외 일반 유저로 기동이 가능한 데몬 서비스는 root 유저가 아닌 일반 유저로 fork 하는 것이 보안상 좋습니다.
               

추가 패키지 설치

EPEL 활성화

[root]$ yum install -y epel-release


사전 필요 패키지 설치

[root]# yum -y install gcc.x86_64 expat-devel libcurl.x86_64 \
lua-devel.x86_64 libxml2-devel.x86_64 libnghttp2 libnghttp2-devel \
ncurses-devel.x86_64 zlib-devel.x86_64 libjpeg-devel.x86_64 \
libpng-devel.x86_64 gd-devel.x86_64 glibc.x86_64 \
php-mbstring.x86_64 libexif-devel.x86_64 libtool.x86_64 \
libnghttp2 libnghttp2-devel

# httpd-2.4.X 버전부터는 apr과 apr-util, pcre 를 별도로 설치하여야 합니다
뒤에서 설치할 Mod_security 에도 필요 합니다.


apr 설치

[참고] 사이트 주소 : https://apr.apache.org/download.cgi

[root]# mkdir -p pkg
[root]# cd pkg
[root]# wget http://apache.tt.co.kr//apr/apr-1.7.0.tar.gz

[root]# tar zxvf apr-1.7.0.tar.gz
[root]# cd  apr-1.7.0


* 처음 configure 하면 아래와 같이 에러가 발생됩니다.
아래와 같이 파일 복사 후 다시 configure 를 합니다

config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands

[root]# cp -arp libtool libtoolT
[root]# ./configure --prefix=/usr/local/apr-1.7.0 
[root]# make ; make install



apr-util 설치

[root]# cd ~/pkg
[root]# wget http://apache.tt.co.kr//apr/apr-util-1.6.1.tar.gz
[root]# tar -xvzf apr-util-1.6.1.tar.gz cd apr-util-1.6.1

[root]# ./configure --prefix=/usr/local/apr-util-1.6.1 --with-apr=/usr/local/apr-1.7.0 
[root]# make ; make install




PCRE 설치

[root]# cd ~/pkg
[root]# wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.44/pcre-8.44.tar.gz
[root]# tar zxvf pcre-8.44.tar.gz
[root]# cd pcre-8.44/

[root]# ./configure --prefix=/usr/local/pcre-8.44
[root]# make ; make install


여기까지 진행하였다면 사전에 필요한 패키지는 모두 설치가 완료된 상태가 되었습니다.
            

Apache 설치

파일을 다운로드 받고 압축을 해제하도록 하겠습니다.

[root]# wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz

[root]# tar zxvf httpd-2.4.46.tar.gz

[root]# cd httpd-2.4.46


포스팅에서는 PHP-FPM 사용을 고려하여 event-MPM 과 http2 옵션 추가로 설치하였습니다.

[root]# export CPPFLAGS="-I/usr/local/openssl-1.1.1h"
=> configure 전에 위에서 설치한 openssl 1.1.1 버전의 적용을 위해 CPPFLAGS 변수를 설정합니다.


configure 를 실행합니다.

[root]# ./configure --prefix=/usr/local/apache2.4.46 \
--enable-mods-shared=all --enable-http2 \
--enable-ext-filter --enable-ssl --with-ssl=/usr/local/openssl-1.1.1h \
--enable-so --enable-cache --enable-proxy \
--enable-deflate --enable-suexec --enable-file-cache \
--with-mpm=event --with-apr=/usr/local/apr-1.7.0 \
--with-apr-util=/usr/local/apr-util-1.6.1 \
--with-pcre=/usr/local/pcre-8.44/bin/pcre-config \
--enable-modules=all --enable-module=shared

=>  configure 시에도 --with-ssl=/usr/local/openssl-1.1.1h 에 경로를 지정해줍니다.

configure 가 정상적으로 실행이 되었다면 build 를 실행합니다.

[root]# make ; make install



디렉토리 심볼릭 링크 생성


[root]# ln -s /usr/local/apache2.4.46 /usr/local/apache2.4
-> 필수는 아님, 저는 향후 버전등의 변경에 따른 경로 일관화를 위해서 사용하고 있습니다.



[참고사항] mod_php 방식 PHP을 사용할 경우 apache는 prefork 방식을 사용해야 합니다.
아래는 prefork 방식의 configure 입니다.

[root]# ./configure --prefix=/usr/local/apache2.4.46 \
--enable-mods-shared=all \
--with-mpm=prefork  \
--enable-ext-filter --enable-ssl -with-ssl --enable-so \
--enable-cache --enable-proxy --enable-deflate --enable-ssl \
--enable-suexec --enable-file-cache  \
--with-apr=/usr/local/apr-1.7.0 \
--with-apr-util=/usr/local/apr-util-1.6.1  \
--with-pcre=/usr/local/pcre-8.44/bin/pcre-config  \
--enable-modules=all

[root]# make ; make install



httpd.conf 2개 module 추가

[root]# vi /usr/local/apache2.4/conf/httpd.conf

LoadFile /usr/lib64/libxml2.so
LoadModule unique_id_module modules/mod_unique_id.so


/etc/ld.so.conf 에 내용 추가
 

[root]# vi /etc/ld.so.conf

/usr/local/apache2.4/lib
/usr/local/apache2.4/modules

[root]# ldconfig 
   <-- 명령어 실행
             

OS 서비스 등록 및 시작하기

서비스 파일 생성

[root]# vi /usr/lib/systemd/system/httpd.service
   => httpd 이름으로 서비스를 등록

[Unit]
Description=The Apache HTTP Server
After=syslog.target
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/apache2.4/bin/apachectl start
ExecStop=/usr/local/apache2.4/bin/apachectl graceful-stop
ExecReload=/usr/local/apache2.4/bin/apachectl graceful
PrivateTmp=true
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target



Service reload 및 활성화

systemctl daemon-reload
systemctl enable httpd


Apache 서비스 시작

# apache 시작
systemctl start httpd

# 중지

systemctl stop httpd

# 재시작
systemctl restart httpd

# httpd.conf 만 재적용(graceful)
systemctl reload httpd


설치 결과 확인 


[root]# curl -I localhost (혹은 ip나 도메인 주소)
HTTP/1.1 301 Moved Permanently
Date: Sat, 24 Oct 2020 22:21:43 GMT
Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1h mod_jk/1.2.48

MySQL 소스 컴파일 설치 및 PHP-FPM 연동은 아래 포스팅을 참조하시면 됩니다


이어지는 글

MySQL 5.7 설치 (Cmake 소스 컴파일 및 Binary 설치)

PHP-FPM 설치 및 Apache 연동

Apache 압축전송



연관된 다른 글

            

2
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x