아파치서버설치 (modcluster) 적용 및 Wildfly 서버 이중화 구성 방법

 /* 아파치 서버 2대 + Wildfly 서버 2대 2중화 구성 방법 */

🗺️ 네트워크 구성도 (Architecture Overview)      


    















/* 서버 운영제제  Rocky Linux 9.3 */ 

/* 아파치 서버 설치 버전 apache-2.4.63 */

🧱 1. 사전 준비

🔹 필수 패키지 설치

dnf groupinstall "Development Tools" -y
dnf install gcc gcc-c++ make cmake autoconf pcre pcre-devel openssl-devel expat-devel wget net-tools apr-devel apr-util-devel libxml2-devel -y

mod_http2, mod_ssl, mod_deflate, mod_proxy, mod_security, mod_cluster 등을 컴파일할 때 필요


📥 2. Apache 소스 다운로드 및 컴파일

🔹 Apache 2.4.63 + APR, APR-util 다운로드

1. 아파치 소스 리눅스에서 직접 다운로드 설치
cd /usr/local/src

 wget https://downloads.apache.org/httpd/httpd-2.4.63.tar.gz

압축해제
tar -xvf httpd-2.4.63.tar.gz

//2. apr 다운로드
wget https://downloads.apache.org/apr/apr-1.7.5.tar.gz

압축을 푼다
tar -xvf apr-1.7.5.tar.gz

//3. apr-util 다운로드
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
tar -xvf apr-util-1.6.3.tar.gz

/* 압축해제한 파일들을 apache소스의 srclib폴더로 이동한다. */
mv apr-1.7.5 httpd-2.4.63/srclib/apr

mv apr-util-1.6.3 httpd-2.4.63/srclib/apr-util

// 아파치 서버를 설치할 폴더를 생성한다.
mkdir /app

⚙️ 3. 컴파일 및 설치

🔹 configure (필요 모듈 포함)

/* http2를 지원하기 위해서는 소스를 먼저 다운받아서 컴파일을 해야 enable-http2가 에러없이
처리 된다. */

/* http2 설치 소스 컴파일 */
cd /usr/local/src
git clone https://github.com/nghttp2/nghttp2.git
cd nghttp2
git submodule update --init
autoreconf -i
./configure
make
make install

이렇게 하면 /usr/local/lib 경로에 설치되며, Apache 컴파일 시 LD_LIBRARY_PATH 또는 LDFLAGS, CPPFLAGS로 지정해줄 수 있습니다.
설치 확인
dnf list installed | grep nghttp2

 --with-nghttp2는 HTTP/2를 위한 필수 라이브러리이며, 
  /usr/local 등 설치 경로를 정확히 지정해야 합니다.

/* http2 사전 준비가 끝났으면 configure  설정을 진행합니다. */
/*  일단 clean  명령으로 깨끗하게 정리 해준 뒤에 진행합니다. */

cd /usr/local/src/httpd-2.4.63

make clean

./configure --prefix=/app/apache2.4.63 \
--enable-so \
--enable-ssl \
--enable-http2 \
--with-nghttp2=/usr/local \
--enable-rewrite \
--enable-expires \
--enable-headers \
--enable-deflate \
--enable-cache \
--enable-disk-cache \
--enable-slotmem-shm \
--enable-mpms-shared=all \
--with-mpm=event \
--with-included-apr \
--enable-proxy \
--enable-proxy-fcgi \
--enable-proxy-http \
--enable-proxy-ajp \
--enable-proxy-balancer \
--enable-mods-shared=all \
--enable-manager \
--enable-modules=most

make 
make install

/* http2 모듈 존재 확인 */
mod_http2.so 모듈 존재 확인
ls /app/apache2.4.63/modules/mod_http2.so

파일이 있다면 성공적으로 http2 지원환경 빌드가 처리 되었습니다.

없다면 Apache를 다시 --enable-http2 옵션으로 재빌드 해야 합니다

httpd.conf에 모듈 로딩 추가
LoadModule http2_module modules/mod_http2.so

/* HTTP/2 프로토콜 활성화 */
SSL 가상 호스트 내에 Protocols 지시어 추가:

<VirtualHost *:443>
  ServerName www.example.com
  Protocols h2 http/1.1

  SSLEngine on
  SSLCertificateFile /path/to/cert.pem
  SSLCertificateKeyFile /path/to/key.pem

  ...
</VirtualHost>

* 주의: HTTP/2는 HTTPS 환경에서만 완벽히 작동
Apache의 mod_http2는 HTTP(포트 80)에서도 동작할 수는 있지만,
대부분의 브라우저는 HTTPS 연결에서만 HTTP/2를 사용합니다.

🔄 mod_proxy_cluster(구 mod_cluster) 소스 컴파일 및 설치

1. 의존성 및 소스 다운로드

cd /usr/local/src

https://github.com/modcluster/mod_proxy_cluster
mod_proxy_cluster (구 mod_cluster) 는 Apache httpd 2.4.X 버전으로 올라가면서 명칭이 mod_proxy_cluster로 변경되었습니다.
mod_cluster는 WAS서버(jboss, wildfly, tomcat)에서 사용되는 모듈의 명칭이고
mod_proxy_cluster는 WEB서버(Apache httpd)에서 사용되는 모듈의 명칭으로 지정되었습니다

git clone https://github.com/modcluster/mod_proxy_cluster.git
$ cd mod_proxy_cluster/native
$ mkdir build
$ cd build/

$ cmake ../ -G "Unix Makefiles" \
  -DAPR_LIBRARY=/app/apache2.4.63/lib/libapr-1.so \
  -DAPR_INCLUDE_DIR=/app/apache2.4.63/include \
  -DAPRUTIL_LIBRARY=/app/apache2.4.63/lib/libaprutil-1.so \
  -DAPRUTIL_INCLUDE_DIR=/app/apache2.4.63/include \
  -DAPACHE_INCLUDE_DIR=/app/apache2.4.63/include

$ make

/* 컴파일 확인 */
[root@8cec427cb119 build]# ll ./modules/
total 292
drwxr-xr-x 2 root root   4096  4월 20 09:24 .
drwxr-xr-x 8 root root   4096  4월 20 09:24 ..
-rwxr-xr-x 1 root root  32272  4월 20 09:24 mod_advertise.so
-rwxr-xr-x 1 root root  36528  4월 20 09:24 mod_lbmethod_cluster.so
-rwxr-xr-x 1 root root 118672  4월 20 09:24 mod_manager.so
-rwxr-xr-x 1 root root 100080  4월 20 09:24 mod_proxy_cluster.so

/* 4개파일이 생성 되었으면 성공이다. 생성된 파일을 아파치 모듈 경로에 복사 해 준다. */
cp ./modules/*.so /app/apache2.4.63/modules/

/* mod_proxy_cluster  설정 */
vi /app/apache2.4.63/conf/extra/httpd-modcluster.conf

LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule proxy_ajp_module   modules/mod_proxy_ajp.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

LoadModule manager_module       modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module     modules/mod_advertise.so
LoadModule watchdog_module      modules/mod_watchdog.so
LoadModule lbmethod_cluster_module modules/mod_lbmethod_cluster.so

<IfModule manager_module>

<VirtualHost *:80>
  ServerName 127.0.0.1

  <Location /mod_cluster-manager>
    SetHandler mod_cluster-manager
    Require all granted
  </Location>
</VirtualHost>


  Listen 6666
  ServerName localhost
  # WebSocket 사용시
  EnableWsTunnel
  WSUpgradeHeader websocket

  # mod_cluster reverse proxy용 서비스 정의
  <VirtualHost *:6666>
    # WAS가 연결하는 위치 정의
    <Location />

#      Require ip 192.168.0
     Order deny,allow
      Deny from all
      Allow from 127.0.0.1
    </Location>

   # 이 매니저에 연결된 WAS그룹 이름 지정

    # 만약 WAS 에서 직접 balancer 이름을 지정하는경우 무시된다.

    ManagerBalancerName mycluster
    # Advertise 기능 활성화 여부
    ServerAdvertise Off
    EnableMCMPReceive

    # modcluster 관련 로그 출력
    LogLevel info
    ErrorLog logs/modcluster.log

    # 원본 호스트의 요청 헤더를 백엔드로 넘겨줌
    ProxyPreserveHost on
    # Where administrator reads the console from

    <Location /mod_cluster-manager>
      SetHandler mod_cluster-manager
      Order deny,allow
      Deny from all
      Allow from all
      #Require ip 127.0.0

    </Location>

  </VirtualHost>

</IfModule>

/* 아파치 서버 재기동후 브라우저에서 확인한다. */
브라우저 접속 은 http(80)이나 https(443) 포트만 허용된다.
6666 포트는 내부 was 통신만 허용된다.

curl http://127.0.0.1:6666/mod_cluster-manager

브라우저 http://127.0.0.1/mod_cluster-manager

이 블로그의 인기 게시물

아파치 보안관련 기본설정

티베로 이관 작업 절차