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

Last Updated on 1월 4, 2021 by 태랑(정현호)


* 해당 포스팅은 Source Compile 로 설치하는 APM(Apache+PHP-FPM+Mysql) 연재글 입니다.
* Apache -> Mysql -> PHP-FPM 순으로 보시면 되며 하단에 연결 링크가 있습니다.
* 업데이트 : 2020/11/05
* APM 과 TLS1.3을 위해 OpenSSL 모두 Sour 소스 컴파일(Source Compile)으로 설치 하였습니다.
* 환경은  Centos 7.8 / Apache 2.4.46 / OpenSSL 1.1.1h  입니다.


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





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 설치를 위해 유저를 별도로 생성 합니다.

groupadd apache
useradd -g apache -d /usr/local/apache2.4 -s /sbin/nologin apache








추가 패키지 설치



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
wget http://apache.tt.co.kr//apr/apr-1.7.0.tar.gz

tar zxvf apr-1.7.0.tar.gz
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


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





apr-util 설치

cd ..
wget http://apache.tt.co.kr//apr/apr-util-1.6.1.tar.gz
tar -xvzf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util-1.6.1 --with-apr=/usr/local/apr-1.7.0
make ; make install




PCRE 설치

wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.44/pcre-8.44.tar.gz
tar zxvf pcre-8.44.tar.gz
cd pcre-8.44/
./configure --prefix=/usr/local/pcre-8.44
make ; make install










httpd server 설치



[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 변수를 설정 해줍니다.


[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 에 경로를 지정해줍니다.



[root]# make ; make install





디렉토리 심볼릭 링크 생성


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





[참고사항] mod_php 방식 PHP을 사용 할 경우 apache는 preform 방식을 사용 해야 합니다.
아래는 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 
   <-- 명령어 실행





apache service 등록 및 시작


서비스 생성 및 등록

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
systemctl daemon-reload
systemctl enable httpd




# 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 소스컴파일 설치 후 연동은 아래 글을 이어서 참조 하시면 됩니다.




이어지는 글
Mysql 5.7 설치 (Cmake 소스 컴파일 및 Binary 설치)

PHP-FPM 설치 및 Apache 연동

Apache 압축전송

“APM - Apache 2.4 설치 + OpenSSL 1.1.1 - Linux(APM)” 에 대한 1 댓글

  1. 핑백: Apache 와 PHP-FPM 연동 | | 작은 공간,하지만 꿈이있는

답글 남기기