개발 블로그

[교육] 하나의 VM에 2개의 엔진을 사용에 두개의 도메인 본문

리눅스 | 서버

[교육] 하나의 VM에 2개의 엔진을 사용에 두개의 도메인

토도 2024. 9. 27. 17:56

 

하나의 VM에 2개의 엔진을 사용에 두개의 도메인 띄우기

  1. test.co.kr과 abc.co.kr 서로 다른 소스 연결
  2. 둘다 context path = "/" 여야 함
  3. 동일 upload 가상 폴더 연결
  4. 도메인단위로 다른 로그 지정
  5. get/post 한글처리
  6. jndi 연결

 

이거는 vm을 새로 설치하고 시작하겠슴

 

1. 아파치 설치

 

yum install httpd 하니까 

 

Cannot find a valid baseurl for repo: base/7/x86_64 에러가 났다

 

BaseURL 설정 수정

 

vi /etc/yum.repos.d/CentOS-Base.repo

 

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

요거 복붙하고 

 

yum clean all 

yum update -y

yum install -y httpd

 

그니까 어쩌고 저쩌고 설치 되었어여

 

 

1. /engine 디렉토리에 Tomcat 바이너리 다운로드 및 설치

 

그럼 이제 톰캣을 설치하겠습니다

 

1) /engine 디렉토리를 만듬 (이미 있다면 건너뛰세요).

mkdir -p /engine

cd /engine

 

2) Tomcat 바이너리를 다운로드 (예시: Tomcat 9).

wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz

 

3) 다운로드한 Tomcat 압축 파일을 푼다

tar -xzf apache-tomcat-9.0.80.tar.gz 

 

4) 디렉토리 이름을 tomcat1으로 변경

mv apache-tomcat-9.0.80 tomcat1

 

이렇게 하면 /engine/tomcat1에 첫 번째 Tomcat 인스턴스의 기본 설정이 설치됨

 

2. Tomcat 인스턴스 설정 (tomcat2)

 

두 번째 Tomcat 인스턴스는 별도의 CATALINA_BASE를 설정하여 구분합니다.

 

1) 두 번째 Tomcat 인스턴스를 위한 새로운 디렉토리를 생성

mkdir -p /engine/tomcat2

 

2) /engine/tomcat1의 conf, logs, webapps, work, temp 디렉토리를

두 번째 Tomcat 인스턴스용 디렉토리에 복사합니다.

cp -r /engine/tomcat1/conf /engine/tomcat2/
cp -r /engine/tomcat1/logs /engine/tomcat2/
cp -r /engine/tomcat1/webapps /engine/tomcat2/
cp -r /engine/tomcat1/work /engine/tomcat2/
cp -r /engine/tomcat1/temp /engine/tomcat2/

 

3. 포트 변경

 

두 개의 Tomcat 인스턴스가 동일한 서버에서 실행되므로, 포트를 다르게 설정해야 합니다. /engine/tomcat2/conf/server.xml에서 포트를 변경합니다.

 

1) 두 번째 인스턴스의 server.xml 파일을 엽니다.

vi /engine/tomcat2/conf/server.xml

 

2) 다음 포트를 변경합니다

 

  • HTTP 커넥터 포트: 기본값은 8080입니다. 두 번째 인스턴스에서는 다른 포트로 변경해야 합니다 (예: 8081).
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  • Shutdown 포트: 기본값은 8005입니다. 이것도 다른 포트로 변경합니다 (예: 8006).
    <Server port="8006" shutdown="SHUTDOWN">
     
  • AJP 커넥터 포트: 기본값은 8009입니다. 필요 시 이를 다른 포트로 변경합니다 (예: 8010).
     
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

 

 

vi /etc/profile

 

# JDK
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH

# Tomcat 1 설정 (첫 번째 Tomcat 인스턴스)
export CATALINA_HOME=/engine/tomcat1
export CATALINA_BASE=/engine/tomcat1

# Tomcat 2 설정 (두 번째 Tomcat 인스턴스)
export CATALINA_HOME_TOMCAT2=/engine/tomcat1
export CATALINA_BASE_TOMCAT2=/engine/tomcat2

# Tomcat 실행 스크립트 alias (간편하게 관리하기 위해 alias 설정)
alias start_tomcat1="$CATALINA_HOME/bin/startup.sh"
alias stop_tomcat1="$CATALINA_HOME/bin/shutdown.sh"
alias start_tomcat2="CATALINA_BASE=$CATALINA_BASE_TOMCAT2 $CATALINA_HOME/bin/startup.sh"
alias stop_tomcat2="CATALINA_BASE=$CATALINA_BASE_TOMCAT2 $CATALINA_HOME/bin/shutdown.sh"

 

source /etc/profile

 

그리고 start_tomcat1, start_tomcat2 해주니까 톰캣이 시작되지 않고 자바 오류가 나길래 

보니까 

 

[root@localhost ~]# start_tomcat1 The JAVA_HOME environment variable is not defined correctly JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 This environment variable is needed to run this program NB: JAVA_HOME should point to a JDK not a JRE

 

JDK 개발 도구가 설치되어 있지 않아서 생긴 오류라고 한다

 

yum list installed | grep java-1.8.0-openjdk-devel 으로 확인 해도 없길래

yum install java-1.8.0-openjdk-devel로 설치 해줬음 

 

start_tomcat1, start_tomcat2 
그리고 이렇게 해주니까 잘만 된다긔 

 

 

8080 8081 두개의 엔진이 가동하고 있슴니다

이제 각각 다른 소스를 연결 해보겠습니다

 

vi /engine/tomcat1/conf/server.xml

<Host name="test.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access_log" suffix=".txt"
            attern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

 

vi /engine/tomcat2/conf/server.xml

<Host name="abc.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access_log" suffix=".txt"
            attern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

 

 

일단 요렇게 하면 

test.co.kr:8080

abc.co.kr:8081

두개 다 톰캣 고양이를 볼 수 있음

 

이제 포트 번호 없이 접속 할 수 있게 하겠다요

 

vi /etc/httpd/conf/httpd.conf

 

 

이렇게 설정해주고, 

 

파일 제일 밑에다 아래와 같은 설정을 추가해 줌

 

<VirtualHost *:80>
    ServerName test.co.kr

    # Tomcat 1의 8080 포트로 프록시
    ProxyPass / http://test.co.kr:8080/
    ProxyPassReverse / http://test.co.kr:8080/

    # 로그 파일 설정
    ErrorLog logs/test.co.kr-error_log
    CustomLog logs/test.co.kr-access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerName abc.co.kr

    # Tomcat 2의 8081 포트로 프록시
    ProxyPass / http://abc.co.kr:8081/
    ProxyPassReverse / http://abc.co.kr:8081/

    # 로그 파일 설정
    ErrorLog logs/abc.co.kr-error_log
    CustomLog logs/abc.co.kr-access_log common
</VirtualHost>

 

작성 해주고,  

 

 

했는디 여전히 포트번호로 접속하니 오류가 났다 알고보니 

 

1. SELinux 설정 확인 및 수정

 

SELinux가 활성화되어 있다면, Apache가 네트워크로 외부 요청을 보내는 것을 차단하고 있을 수 있습니다. 아래 명령으로 SELinux 설정을 수정해 Apache가 외부에 요청할 수 있도록 허용합니다.

setsebool -P httpd_can_network_connect 1
 

이 명령어는 Apache가 네트워크를 통해 Tomcat에 연결할 수 있도록 허용합니다.

 

이렇게 해주니 돌아감.. 

 

그리고 이제 톰캣에 한글 설정 해주겟슴

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>abc.co.kr</title>
</head>
<body>
    <h1>abc.co.kr</h1>
    <p>현재 서버 시간: <%= new java.util.Date() %></p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>test.co.kr</title>
</head>
<body>
    <h1>test.co.kr</h1>
    <p>현재 서버 시간: <%= new java.util.Date() %></p>
</body>
</html>
<Host name="test.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true">
         <Context path="/" docBase="/engine/tomcat1/webapps/test">
         <!-- 가상 폴더 설정: /upload -->
         <Resources>
                <PreResources className="org.apache.catalina.webresources.DirResourceSet"
        base="/upload" webAppMount="/upload" />
         </Resources>
         <Valve className="org.apache.catalina.valves.AccessLogValve"
                directory="/var/log/tomcat1/test"
                prefix="test_access_log"
                suffix=".log"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Context>
 </Host>

 

<Host name="abc.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true">
         <Context path="/" docBase="/engine/tomcat2/webapps/abc">
         <!-- 가상 폴더 설정: /upload -->
         <Resources>
                <PreResources className="org.apache.catalina.webresources.DirResourceSet"
        base="/upload" webAppMount="/upload" />
         </Resources>
         <Valve className="org.apache.catalina.valves.AccessLogValve"
                directory="/var/log/tomcat2/abc"
                prefix="abc_access_log"
                suffix=".log"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Context>
</Host>

 

 

 

이렇게 설정해줬음

 

이제 디비 연결하고 싶어서 

기존에 있던 ROOT는 ROOT_update로 이름을 변경해주고

이클립스에서 war파일 가져와서 VM에 넣어주고 ROOT로 바꿔주셈

그러니까 jsp는 정상적으로 뜨는데 db는 제대로 작동 안되네

 

 

ojdbc8.jar 파일 넣어주고

 

server.xml 제일 밑에 아래의 설정 넣어주셈

 

<GlobalNamingResources>
        <Resource name="jdbc/myDB"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@localhost:1521:xe"
              username="C##CHOCO"
              password="c##choco"
              maxActive="100"
              maxIdle="30"
              maxWait="10000"
              validationQuery="SELECT 1 FROM DUAL"/>
     </GlobalNamingResources>

 

web.xml에서 아래와 같은 설정 더 해 주기

 

<resource-ref>
                <description>Oracle DB Connection</description>
                <res-ref-name>jdbc/myDB</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
  </resource-ref>

안되네에..