JDK와 Apache, Wildfly 각각 설치 완료하여 구동 테스트까지 완료한 이후의 과정입니다.
Web Server와 WAS를 연동하기 위한 방법 중의 하나인 mod_jk를 세팅해 보았다.
1. apxs(Apache Extension) 설치
$ yum install -y httpd-devel
$ which apxs
/usr/bin/apxs
2.tomcat-connector 설치
-설치
$ wget http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
-압축 해제
$ tar xvzpf tomcat-connectors-1.2.48-src.tar.gz
-디렉토리 이동
$ cd tomcat-connectors-1.2.48-src/native/
-컴파일을 위한 설정
$ ./configure --with-apxs=/usr/bin/apxs
-컴파일
$ make
$ make install
./configure 설정 단계에서 에러가 발생했다면 이 포스팅을 참고
정상적으로 컴파일이 되었다면 mod_jk.so 파일이 Web Server(Apache) 경로/modules에 생겨있다.
없을 경우엔 아래 명령어로 직접 옮겨주면 된다.
- 나의 Apache 경로 = /etc/httpd
$ cp apache-2.0/mod_jk.so /etc/httpd/modules/
3. Apache config에 mod_jk 모듈에 대한 정보 입력 및 연동
3-1. httpd.conf 파일 열기 및 입력
$ vi /etc/httpd/conf/httpd.conf
하단에 아래 내용을 추가
(conf/mod-jk.conf라는 설정 파일을 따로 두어 관리를 용이하게 한다.)
# mod_jk Connector
LoadModule jk_module modules/mod_jk.so
Include conf/mod-jk.conf
3-2. mod-jk.conf 파일 생성 및 입력
$ vi /etc/httpd/conf/mod-jk.conf
아래 내용을 추가
( 아파치가 사용할 mod_jk 모듈의 위치가 mod_jk.so 파일이라는 것, 로그를 남길 위치 등등의 내용 )
<IfModule jk_module>
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# the location of jk shared memory
JkShmFile run/mod_jk.shm
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMountFile conf/uriworkermap.properties
</IfModule>
3-3. workers.properties 파일 생성 및 입력
$ vi /etc/httpd/conf/workers.properties
아래 내용 추가
(worker1라는 worker를 하나 만들고 정보 입력 host 에는 was ip 입력)
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=WAS IP 입력
worker.worker1.port=8009
3-4. uriworkermap.properties 파일 생성 및 입력
$ vi /etc/httpd/conf/uriworkermap.properties
아래 내용 추가
(아파치로 요청 오는 URI는 worker랑 매핑시키는 파일)
# Mount the Servlet context to the worker1 worker
/jmx-console=worker1
/jmx-console/*=worker1
/web-console=worker1
/web-console/*=worker1
# all url turn to ajp
/*=worker1
3-5. wildfly의 standalone.xml 파일에 AJP 프로토콜을 수신할 수 있도록 내용 추가
$ vi /opt/wildfly/standalone/configuration/standalone.xml
<!--추가--> 표시되어 있는 줄 내용 추가
2번째는 이미 추가되어 있을 수도 있다.
<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
<buffer-cache name="default"/>
<server name="default-server">
<ajp-listener name="ajp" socket-binding="ajp"/> <!--추가-->
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<http-invoker security-realm="ApplicationRealm"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
</subsystem>
<subsystem xmlns="urn:jboss:domain:webservices:2.0" statistics-enabled="${wildfly.webservices.statistics-enabled:${wildfly.statistics-enabled:false}}">
<wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
<endpoint-config name="Standard-Endpoint-Config"/>
<endpoint-config name="Recording-Endpoint-Config">
<pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
<handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
</pre-handler-chain>
</endpoint-config>
<client-config name="Standard-Client-Config"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:weld:4.0"/>
</profile>
<interfaces>
<interface name="management">
<any-address/>
<!-- <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> -->
</interface>
<interface name="public">
<any-address/>
<!-- <inet-address value="${jboss.bind.address:127.0.0.1}"/> -->
</interface>
</interfaces>
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <!--추가-->
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
3-6. wildfly 재기동
# systemctl stop wildfly
# systemctl start wildfly
# systemctl status wildfly
구동 확인
3-7. 아파치 시작
# service httpd start
Redirecting to /bin/systemctl start httpd.service
나는 아파치 시작 과정에서 오류가 났었다.. 이 글을 참고
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details. |
IP로 접속했을 때 wildfly 화면이 나오면 성공
고생하셨습니다.
[참고]
https://offbyone.tistory.com/332
https://has3ong.github.io/server/web-apacheconnectorwildfly/
+
지금은 단순 개발환경 구축이지만 운영환경은 여러개의 WAS로 분산처리하는 로드밸런싱 등 설정이 까다롭기 때문에
그때는 아래와 같은 블로그를 참고해야할 것 같다.