웹사이트 검색

Rocky Linux 8에서 Nginx와 함께 Apache Tomcat 10을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - Java 설치
  3. 2단계 - 시스템 사용자 만들기
  4. 3단계 - Tomcat 다운로드
  5. 4단계 - Systemd Unit 파일 생성
  6. 5단계 - Tomcat 서비스 시작 및 활성화\n
  7. 6단계 - 방화벽 구성\n
  8. 7단계 - Tomcat 웹 관리 인터페이스 구성
  9. 8단계 - SSL 설치
  10. 9단계 - Nginx 설치
  11. 10단계 - TomCat 실행\n
  12. 결론

Tomcat은 Java 기반 애플리케이션용 오픈 소스 웹 서버입니다. Java Servlet 및 JSP 애플리케이션을 배포하는 데 사용됩니다. Java 서블릿은 서버가 요청 및 응답을 처리하는 방법을 정의하는 작은 프로그램입니다. Tomcat은 Java Servlet, JavaServer Pages, Java Expression Language 및 Java WebSocket 기술의 오픈 소스 구현 역할을 합니다.

여러 버전의 Tomcat을 사용할 수 있습니다. 튜토리얼을 위해 Tomcat 10 설치에 대해 논의할 것입니다. Tomcat 9를 설치하려는 경우 지침은 동일합니다. 변경 사항이 있는 경우 자습서에 지정됩니다.

튜토리얼에서는 Nginx 서버와 함께 Tomcat 10을 설치하여 리버스 프록시 역할을 하고 SSL을 사용하여 보호합니다. Tomcat의 최신 알파 버전인 Tomcat 10.1.x 버전이 있지만 우리는 그것을 설치하지 않을 것입니다.

전제 조건

  • A server running Rocky Linux 8.5

  • A non-sudo user with superuser privileges.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Packages required for the installation.

    $ sudo dnf install wget tar
    

1단계 - 자바 설치

Tomcat 9 및 10에는 Java 8 이상이 필요합니다. Java 플랫폼의 오픈 소스 구현인 OpenJDK 11을 설치합니다.

다음 명령을 실행하여 OpenJDK를 설치합니다.

$ sudo dnf install java-11-openjdk-devel

설치를 확인하십시오.

$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

2단계 - 시스템 사용자 생성

Tomcat을 루트 사용자로 실행하여 보안 위험을 최소화하기 위해 새 시스템 사용자를 생성합니다. 새 사용자의 경우 /opt/tomcat을 홈 디렉터리로 설정합니다.

다음 명령을 실행하여 Tomcat에 대한 새 시스템 사용자를 생성합니다.

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

3단계 - 톰캣 다운로드

최신 버전의 Tomcat v10은 다운로드 페이지에서 다운로드할 수 있습니다. 이 튜토리얼을 작성하는 시점에 v10.0.14가 사용 가능한 최신 버전입니다. Tomcat을 다운로드하기 전에 최신 버전을 확인하십시오.

wget을 사용하여 Tomcat을 다운로드합니다.

$ VERSION=10.0.14
$ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

파일을 /opt/tomcat 디렉터리에 추출합니다.

$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/

Tomcat 설치 디렉터리를 가리키는 최신 버전의 Tomcat에 대한 심볼릭 링크를 만듭니다.

$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

디렉터리의 소유권을 이전에 만든 사용자로 변경합니다.

$ sudo chown -R tomcat:tomcat /opt/tomcat

4단계 - Systemd Unit 파일 생성

다음 단계는 Tomcat 서버가 자동으로 시작될 수 있도록 서비스 파일을 만드는 것입니다.

편집을 위해 /etc/systemd/system/tomcat.service 파일을 만들고 엽니다.

$ sudo nano /etc/systemd/system/tomcat.service

다음 코드를 붙여넣습니다.

[Unit]
Description=Apache Tomcat 10 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

Ctrl + X를 누르고 저장하라는 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

5단계 - Tomcat 서비스 시작 및 활성화

서비스 데몬을 다시 로드하여 Tomcat 서비스를 활성화합니다.

$ sudo systemctl daemon-reload

Tomcat 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable tomcat --now

서비스 상태를 확인하세요.

$ sudo systemctl status tomcat
? tomcat.service - Apache Tomcat 10 Servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-12-17 15:54:28 UTC; 24s ago
  Process: 86219 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 86226 (java)
    Tasks: 19 (limit: 11411)
   Memory: 132.7M
   CGroup: /system.slice/tomcat.service
           ??86226 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties>

Dec 17 15:54:27 howtoforge systemd[1]: Starting Apache Tomcat 10 Servlet container...
Dec 17 15:54:28 howtoforge systemd[1]: Started Apache Tomcat 10 Servlet container.

6단계 - 방화벽 구성

Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

$ sudo firewall-cmd --state
running

HTTP 및 HTTPS 포트를 허용합니다.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

변경 사항을 적용하려면 방화벽을 다시 로드하십시오.

$ sudo firewall-cmd --reload

7단계 - Tomcat 웹 관리 인터페이스 구성

웹 관리 인터페이스는 사용자 인증 정보를 만든 후에만 액세스할 수 있습니다.

Tomcat 사용자 및 역할은 /opt/tomcat/latest/conf/tomcat-users.xml 파일에 정의되어 있습니다. 편집할 파일을 엽니다.

$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml

줄 앞에 다음 줄을 추가합니다. 사용자 이름과 암호를 자격 증명으로 바꿉니다.

관리자 및 관리자 Tomcat 포털에 대해 서로 다른 자격 증명을 선택합니다.

<tomcat-users>
<!--
    Comments
-->
<role rolename="manager-gui"/>
    <user username="manager" password="managerpassword" roles="manager-gui" />
<role rolename="admin-gui"/>
	<user username="admin" password="adminpassword" roles="admin-gui"/>
</tomcat-users>

Ctrl + X를 누르고 저장하라는 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

기본적으로 Tomcat 인터페이스는 localhost에서만 액세스할 수 있습니다. 어디서나 액세스해야 하는 경우 구성해야 합니다.

편집을 위해 /opt/tomcat/latest/webapps/manager/META-INF/context.xml을 엽니다.

$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml

다음 줄을 제거하거나 아래에 지정된 대로 로 묶어 주석 처리하십시오.

<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

모든 IP 주소에서 액세스를 허용하는 것은 보안상 위험합니다. 공인 IP 주소에서만 액세스를 허용하여 제한할 수 있습니다. 공용 IP 주소가 22.22.22.22인 경우 다음과 같이 줄을 변경합니다.

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|22.22.22.22" />

허용된 IP 주소 목록은 세로 막대(|)로 구분됩니다. 단일 IP 주소를 추가하거나 정규식을 사용할 수 있습니다.

Ctrl + X를 누르고 저장하라는 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

/opt/tomcat/latest/webapps/host-manager/META-INF/context.xml 파일에서도 동일한 변경을 수행합니다.

완료되면 Tomcat 서버를 다시 시작하십시오.

$ sudo systemctl restart tomcat

8단계 - SSL 설치

Lets Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 설치해야 합니다.

먼저 EPEL 저장소를 다운로드하여 설치해야 합니다.

$ sudo dnf install epel-release

다음 명령을 실행하여 Certbot을 설치합니다.

$ sudo dnf install certbot

SSL 인증서를 생성합니다.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d tomcat.example.com

위의 명령은 서버의 /etc/letsencrypt/live/tomcat.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Lets Encrypt 자동 갱신을 위한 챌린지 웹루트 디렉터리를 만듭니다.

$ sudo mkdir -p /var/lib/letsencrypt

SSL을 갱신하기 위해 Cron 작업을 생성합니다. 인증서를 확인하고 필요한 경우 갱신하기 위해 매일 실행됩니다. 이를 위해 먼저 /etc/cron.daily/certbot-renew 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/cron.daily/certbot-renew

다음 코드를 붙여넣습니다.

#!/bin/sh
certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

실행 가능하도록 태스크 파일에 대한 권한을 변경하십시오.

$ sudo chmod +x /etc/cron.daily/certbot-renew

9단계 - Nginx 설치

Rocky Linux 8.5는 Nginx의 안정적인 최신 버전과 함께 제공됩니다. 다음 명령을 사용하여 설치하십시오.

$ sudo dnf module install nginx:1.20

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.20.1

Nginx 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable nginx --now

편집을 위해 /etc/nginx/conf.d/tomcat.conf 파일을 만들고 엽니다.

$ sudo nano /etc/nginx/conf.d/tomcat.conf

다음 코드를 붙여넣습니다.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  tomcat.example.com;

    access_log  /var/log/nginx/tomcat.access.log;
    error_log   /var/log/nginx/tomcat.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/tomcat.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/tomcat.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  tomcat.example.com;
    return 301   https://$host$request_uri;
}

완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx 구성 파일 구문을 확인합니다.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

새 구성을 활성화하려면 Nginx 서비스를 다시 시작하십시오.

$ sudo systemctl restart nginx

10단계 - TomCat 실행

브라우저에서 https://tomcat.example.com을 실행하면 다음 화면이 열립니다.

이제 7단계에서 구성한 로그인 자격 증명을 사용하여 서버 상태, 관리자 앱 및 호스트 관리자 페이지에 액세스할 수 있습니다.

결론

이것으로 Rocky Linux 8.5 기반 서버에 Tomcat 서버를 설치 및 구성하고 Nginx 리버스 프록시를 통해 제공하고 SSL을 사용하여 보호하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.