IT/Linux

[Linux] Nginx 설치 및 다중 tomcat 연동

Erynn 2023. 4. 24.
Naver Cloud Platform
OS : CentOS 7.8
nginx-1.22.1 / tomcat-9.0.73

 

다운로드

1. nginx, tomcat 다운로드

wget http://nginx.org/download/nginx-1.22.1.tar.gz
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz

 

2. 압축해제

tar -xvzf nginx-1.22.1.tar.gz
tar -xvzf apache-tomcat-9.0.73.tar.gz

 


Nginx

1. nginx 계정 생성

useradd --shell /sbin/nologin --home-dir /usr/local/nginx nginx

 

2. nginx 설치

 

nginx 설치 명령어는 반드시 압축해제한 nginx 폴더 안에 들어가서 실행해야 한다.

 

(1) ./configure

 

설치 명령어를 크게 나누어보면, 위치설정 / 유저 및 그룹 설정 / 모듈 설정 으로 볼 수 있다.

이 중 각자에 맞게 수정 및 가감할 수 있다.

[root@hh-test-01 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --modules-path=/usr/local/nginx/modules --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_realip_module --with-http_v2_module --with-http_ssl_module --with-http_addition_module --with-pcre

 

※ 예시 : 아래는 일반적으로 사용되는 구성이다.

./configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre  --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module

 

(2) make && make install

 

이 과정까지 완료하면 ./configure에서 설정한 경로에 nginx 관련 폴더와 파일이 생긴 것을 확인할 수 있다.

[root@hh-test-01 nginx-1.22.1]# make && make install

 

 

 

3. 설정파일 생성 및 수정

 

 

(1) nginx.conf 설정파일 수정

 

아래 설정파일 내용을 보면  include /usr/local/nginx/conf/conf.d/*.conf 라는 내용이 있는데,

conf.d 하위의 .conf로 끝나는 파일의 설정들도 가져온다는 의미이다. 

[root@hh-test-01 conf]# vim /usr/local/nginx/conf/nginx.conf

worker_processes  auto;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;

    log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    include /usr/local/nginx/conf/conf.d/*.conf;

#연동할 tomcat 포트 설정
#이름은 원하는대로 설정

upstream test {
        server localhost:8010;

}
upstream book {
        server localhost:8020;

}
}

 

(2) conf.d 폴더 생성

 

/usr/local/nginx/conf 하위에 conf.d 폴더가 없다면 생성해준다.

위에서 언급했듯 우리는 이미 nginx.conf 파일에 /conf.d 에 있는 설정파일을 읽으라는 설정을 해놓았다. 

mkdir /usr/local/nginx/conf/conf.d

 

(3) conf.d 에 설정파일 생성

 

tomcat을 두 개 설정해볼 예정이므로 설정파일도 두개 (0.test.conf / 1.book.conf)를 만들어 준다.

[root@hh-test-01 conf]# vim /usr/local/nginx/conf/conf.d/0.test.conf

server {
        listen       80;
        server_name  test.com;
        client_max_body_size 20M;

   access_log  logs/access.test.log;
        error_log  logs/error.test.log error;
   server_tokens off;

        location / {
                index  index.jsp;
                proxy_pass              http://test;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        Host $http_host;
                fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }

        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \$ {
            proxy_pass              http://test;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }

        location ~ \.do$ {
            proxy_pass              http://test;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }

        location ~ \.jsp$ {
            proxy_pass              http://test;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }
}
[root@hh-test-01 conf]# vim /usr/local/nginx/conf/conf.d/1.book.conf

server {
        listen       80;
        server_name  book.com;
        client_max_body_size 20M;

   access_log  logs/access.book.log;
        error_log  logs/error.book.log error;
   server_tokens off;

        location / {
                index  index.jsp;
                proxy_pass              http://book;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        Host $http_host;
                fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }

        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \$ {
            proxy_pass              http://book;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }

        location ~ \.do$ {
            proxy_pass              http://book;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }

        location ~ \.jsp$ {
            proxy_pass              http://book;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            fastcgi_param REMOTE_ADDR $http_x_real_ip;
        }
}

 


tomcat

 

1. JAVA 설정

이전에 다운로드 받았던 tomcat 폴더 안에 JAVA 경로를 잡아준다.

[root@hh-test-01 bin]# vim /root/apache-tomcat-9.0.73/bin/catalina.sh

JAVA_HOME=/usr/java/jdk1.8.0_361-amd64

 

2. tomcat 설정 파일 복사

#tomcat 설정파일이 위치할 폴더 생성

mkdir -p /usr/local/tomcat/test/tomcat9
mkdir -p /usr/local/tomcat/book/tomcat9

#아래 폴더는 테스트를 위해 index.jsp를 생성할 폴더 (*선택)
mkdir -p /usr/local/tomcat/test/www
mkdir -p /usr/local/tomcat/book/www


#다운로드 받은 tomcat파일을 위에서 생성한 폴더에 복사
[root@hh-test-01 apache-tomcat-9.0.73]# cp -a * /usr/local/tomcat/test/tomcat9/
[root@hh-test-01 apache-tomcat-9.0.73]# cp -a * /usr/local/tomcat/book/tomcat9/

tomcat 설정파일 옮긴 후 결과창

 

3. jsp 파일 생성(*선택)

#test tomcat jsp 파일
vim /usr/local/tomcat/test/www/index.jsp

test tomcat

#book tomcat jsp 파일
vim /usr/local/tomcat/book/www/index.jsp

book tomcat

 

4. tomcat 설정파일(server.xml) 수정

기본 설정파일에서 변경 및 추가한 내용만 작성하였다.

vim /usr/local/tomcat/test/tomcat9/conf/server.xml

#Server port변경 (*선택)
<Server port="8610" shutdown="SHUTDOWN">

#Tomcat port변경 (이전 nginx-tomcat 설정 시 사용하기로 한 포트)
<Connector port="8010" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
               
                     
# 테스트를 위해 만든 jsp 경로 지정 (*선택)                     
<Host name="localhost"  appBase="/usr/local/tomcat/test/"
      unpackWARs="true" autoDeploy="true">

# 해당 포트로 들어왔을때 바라볼 경로
<Context path="/" reloadable="true" docBase="www" />
vim /usr/local/tomcat/book/tomcat9/conf/server.xml

<Server port="8620" shutdown="SHUTDOWN">

<Connector port="8020" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Host name="localhost"  appBase="/usr/local/tomcat/book/"
            unpackWARs="true" autoDeploy="true">

<Context path="/" reloadable="true" docBase="www" />

실행 및 테스트

1. tomcat 실행

/usr/local/tomcat/test/tomcat9/bin/startup.sh
/usr/local/tomcat/book/tomcat9/bin/startup.sh

 

2. nginx 실행

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

 

3. 포트 확인

nginx 80, tomcat 8010 / 8020 이 정상적으로 떠져있는지 확인한다.

netstat -nltp

 

4. 테스트 (*선택)

 

(1) hosts 파일 변경

 

테스트를 위해 임시로 hosts 파일을 변경하여 호출해보았다.

공인IP, 사설IP 모두 넣어준다.

vim /etc/hosts

 

 

(2) 테스트

 

각각 설정한 도메인으로 접근했을때, 설정한 톰캣의 index.jsp 파일을 띄우주는 걸 확인할 수 있다.