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 압축전송
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io
안녕하세요 정리 해주신 자료 정말 잘 보고 있습니다. 한 가지 궁금한 점이 생겨 댓글 남기게 되었습니다.
./configure --prefix=/usr/local/apache2.4.46 이렇게 작성 주셨는데 그 이하에서 경로들이 apache2.4 로 경로가 잡혀있는 걸로 보여서요 ln -s /usr/local/apache2.4.46 /usr/local/apache2.4 하고 나면 이하의 작업에 문제가 없는 게 맞나요..?
제가 이하의 과정에서 2.4 로 잡으니까 잘 안되는 것처럼 보여서 > ln -s 후 잘 동작해야하는데 그렇지 않은 거라면 확인을 하고 싶습니다!
(ex - 서비스 과정 중)
Failed at step EXEC spawning /usr/local/apache2.4/bin/apachectl: No such file or directory
이런 메세지가 떠서 스크립트를 2.4.46 으로 수정
안녕하세요
심볼릭링크 설정 후 정상동작하는것 맞습니다
ls -al /usr/local/apache2.4/bin/
결과 나오는지 봐주세요