Server 운영/server

apache + tomcat + DB

rnany 2022. 1. 26. 16:18

22/01/26

 

- 이번 실습에서 알게 된 것!

 

Apache

Virtual Host : 하나의 컴퓨터(서버)나 IP러 여러 이름의 도메인을 응용 하게 해주는 것이다. httpd.conf 설정 파일을 열어서 설정을 추가해준다.

NameVirtualHost *:80

# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known 
# server name.
#
<VirtualHost _default_:80>
    ServerAdmin foo@example.com
    DocumentRoot /usr/local/victolee/apache2.0.64/htdocs 
    ServerName localhost 
    ErrorLog logs/localhost-error_log
    CustomLog logs/localhost-access_log common

    <Directory "/usr/local/victolee/apache2.0.64/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Allow from all
    </Directory>
</VirtualHost>

ServerName 사용할 도메인명

ServerAdmin 에러 전송될 이메일

DocumentRoot 도메인 접속시 처음 접속 되는 디렉터리 경로

ErrorLog 로그 경로 및 파일 이름

CustomLog 커스텀 로그 경로

 

 

 

Mod_jk는 AJP 사용 전에 웹서버에서 tomcat으로 보내기 위해 사용하는 모듈이다. URL과 Port를 점검한뒤 WAS로 보낸다.

AJP는 웹서버의 요청을 WAS로 위임하는 프로토콜이다. 8009번으로 들어온 port를 sever.xxml로 설정된 Tomcat에서 받는다.

 

 

 

netstat, ps -ef 명령어를 통한 포트와 tomcat의 동작 확인

설정에 따라서 설정을 0.0.0.0으로 변경하면 0.0.0.0으로 나오고 변경하지 않으면 127.0.0.1로 나온다. 즉 설정 파일에 따라서 다르게 나온다.

 

 

 

+ Ghostcat 취약점

AJP프로토콜을 /wevapps/ROOT 디렉터리 하위 파일을 읽을 수 있는 원격 해킹 취약점이 발견 되었다. 이에 secret key를 활성화 해놓았다. 이것이 secretkey를 false로 해 놓는 이유이다.

KISA나 wins등과 같은 보안 모니터링 업체에서 보내주는 뉴스레터를 확인 하는 것이 중요하다!

 

 

 

 

Tomcat + MySQL

 

web : 사진, 동영상, html과 같이 동작시 변화 요서가 없는 정적 컨텐츠를 처리한다.

was(web application service) : login 창과 같이 처리 과정이 필요한 동적 컨텐츠를 처리한다. (Tomcat, JBoss, JEUS, Django)

 

 

PHP는 apache의 경울 PHP-mysql 모듈을 통해 쿼리를 넣으면 mysql과 연동이 끝난다.

Tomcat은 jsbc를 설치한뒤 프로그램을 사용해서 연동을 한다. -> 한번 해보기!

 

 

 

 

-리눅스 명령어!

netstat 는 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보를 보여주는 도구이다.

-l (listen) : 연결 가능한 상태
-n (number port) : 포트 넘버
-t (tcp) : tcp
-u (udp) : udp
-p : 프로그램 이름 / PID
-a : 모두
-i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인
-r : 라우팅 테이블
-s : 네트워크 통계

 -nlpt : TCP listening 상태의 포트와 프로그램을 보여준다 (netstat -nlpt)

 

 

lsof 는 열려있는 파일을 나열 하는 것으로, 모든 파일과 파일을 열고 있는 프로세스들의 목록을 출력한다.

-u 는 사용자가 오픈한 파일 출력

-u^은 그 사용자를 제외한 것이다.

파일 경로를 주면 해당 파일을 오픈하고 있는 프로세스 리스트를 볼 수 있다.

-i 는 모든 네트워크 포트 정보를 확인 하는 것이다. 

lsof -i TCP:22

로 열려있는 특정 포트의 정보를 볼 수 있다.

 

 

- 원하는 패키지 버전 설치

wget (링크 주소)

tar (다운받은 압축 파일)  압축 풀기

yum localhost (~~) 으로 압축 푼 패키지 설치 가능하다. 이때 패키지 명과 *를 조합해서 쉽게 설치 가능하다.

 

 

- php 설치 오류

 

yum -y install epel-release하면 

이렇게 다운이 안되는 오류가 생기는 경우가 있다.

 

cd /etc/yum.repos.d/

vim epel.repo에서 다음과 같이 미러리스트를 주석 처리한뒤

yum clean all

yum repolist

하고 다시 설치하면 된다.

 

-php 모듈 관리

/etc/php.ini에 있는 모듈에 대한 주석을 풀어서 관리해주면 사용하게 설정 할 수 있다.

모듈을 설치, 파일 주석 관리를 통해서 php 모듈을 관리 할 수 있다.

 

 

- apache + tomcat 연동

apache + tomcat 은 기존  https://nnany.tistory.com/31 의 [(2)-2. mod_jk로 연동하기] 을 통해서 연동 하였다.

이 실습은 정적 페이지는 appache가 처리하고, 동적 페이지는 tomcat이 처리하게 한다. 둘다 tomcat이 처리하게 하길 원한다면

vi /etc/httpd/conf/httpd.conf 의 파일을 수정 (위의 블로그에선 vi /etc/httpd/conf.d/mod_jk.conf로 파일을 나눴다.)하면 된다. (태희매니저 블로그 참고 하였다. https://hee611.tistory.com/34)

 

<정적 동적 모두 tomcat이 처리하게 하는 구문>

LoadModule jk_module modules/mod_jk.so
<VirtualHost *:80>
 ServerName localhost

 JkMount /*.jsp tomcat
 JkMount /*.json tomcat
 JkMount /*.xml tomcat
 JkMount /*.do tomcat
</VirtualHost>

vi /etc/httpd/conf.modules.d/mod_jk.conf를 만들어 설정 파일 나눴다.

<IfModule mod_jk.c>

 JkWorkersFile conf/workers.properties
 JkShmFile run/mod_jk.shm
 JkLogFile logs/mod_jk.log
 JkLogLevel info
 JkLogStampFormat "[%y %m 5d %H:%M:%S] "
</IfModule>

 

<동적만 tomcat이 처리하게 하는 구문>

LoadModule jk_module "/etc/httpd/modules/mod_jk.so" 

JkWorkersFile       /etc/httpd/conf/workers.properties
JkShmFile           /var/run/mod_jk.shm
JkLogFile           /var/log/httpd/mod_jk.log
JkLogLevel          info
JkLogStampFormat    "[%y %m %d %H:%M:%S] " 

<IfModule mod_jk.c>
      JkMount /*.jsp app1Worker
</Ifmodule>

따로 처리하게 하는, 기존 구문인데 비교 해보자.

 

 

- php + DB 연동

https://nnany.tistory.com/35 참고한다.

 

http, php, db 를 yum으로 설치 해준다.

yum install -y httpd

yum install -y mariadb mariadb-server

yum install -y php php-mysql php-mbstring php-pdo php-gd

 

 

- DB 설정

mysql -u root -p 을 사용해서 mysql로 접속한다.

CREATE USER 'testuser'@localhost IDENTIFIED BY '1234'; 로 유저를 생하고

GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost'; 접속할 수있는 권한 준뒤에 

FLUSH PRIVILEGES;  설정을 적용한다.

CREATE DATABASE sqlDB ; 로 DB 만들어 준다.

systemctl restart mariadb

 

- DB PHP 연결 php 설정

vim /var/www/html/info.php

<?php
phpinfo();
?>

를 통해 이 웹페이지에 들어가면 어떤 php 모듈이 들어가 있는지 확인 할 수 있다.

 

vim /var/www/html/test.php

<?php
   $con=mysqli_connect("localhost", "testuser", "1234", "sqlDB");
   if ( mysqli_connect_error($con) ) {
      echo "MySQL 접속 실패 !!", "<br>";
      echo "오류 원인 : ", mysqli_connect_error();
      exit();
   }
   echo "MySQL 접속 완전히 성공!!";
   mysqli_close($con);
?>

 

를 사용해 해당 페이지로 들어가면 DB 연동 여부를 확인 할 수 있다.