태그 글 보관함: 아파치 설정

우분투 서버 18.04 LTS 아파치 톰캣9 연동 버츄얼 호스트 설정

우분투 서버 18.04 LTS에서 아파치와 톰캣9를 설치하고, 톰캣에 디플로이한 war 어플리케이션을 아파치를 경유해서 버츄얼 호스트로 접속하도록 아파치와 톰캣을 연동하는 방법을 설명한다.

톰캣만 써도 잘 되는데 왜 아파치를 경유하냐하면, 아파치에서 워드프레스 등 다른 서비스를 돌리고 있어서 톰캣도 같은 입구(아파치)를 통해서 외부로 연결되는 설정을 하는게 관리하기 편해서 그렇다.
딱히 아파치가 필요하지 않은 경우에는 그냥 톰캣만 기동해서 사용해도 된다.

아파치 톰캣9 설치와 모드 설정

설치는 아래 커맨드 한방으로 간단하게 끝.

아파치 모드 proxy 와 proxy_ajp 를 활성화한다.

proxy_ajp는 mod_jk 대신 사용하는건데 mod_jk는 따로 설치해야 되지만 proxy_ajp는 기본 설치된 모드이기 때문에 편하다. 복잡한 워커 설정도 필요없고.

아파치 site-available conf 설정

버츄얼 호스트 설정을 작성하기 위해서 /etc/apache2/site-available 디렉토리에 test.conf 파일을 생성한다. 내용은 아래처럼 작성.

80 포트로 들어오는 요청에 대해서 서버이름은 test.elmi.page, 디렉토리 /home/elmi/webapps/test 에 대한 접근 모두 허용(Require all granted)
http://test.elmi.page 루트 / 를 AJP 프로토콜로 localhost:8009 로 넘긴다. localhost:8009 는 톰캣에서 AJP 프로토콜로 열어둘 주소/포트.

서브도메인을 추가하고 싶은 경우에는 conf 파일을 복사해서 다른 도메인/디렉토리로 설정하면 된다.

conf 파일을 수정한 경우에는 아래 커맨드로 적용하자.

서비스 리로드에서 에러가 났을 경우에는 아래 커맨드로 내용 확인.

톰캣 server.xml 설정

톰캣의 server.xml을 편집한다. 위치는 /etc/tomcat9/server.xml

아래 8080 포트로 HTTP 연결은 아파치를 통해서 AJP 연결을 할 경우에는 필요 없으니 주석처리하자. (주석처리 안해도 딱히 지장 없음)

주석처리 된 프로토콜 AJP/1.3 부분을 찾아서 주석에서 해제.

호스트 설정에서 appBase 부분을 아파치에서 설정한 DocumentRoot, Directory와 맞추고, 디폴트로 사용되는 localhost 부분은 남겨두고 별도로 Alias로 서브도메인을 넣어둔다.

appBase 디렉토리(/home/elmi/webapps/test)에 ROOT.war 파일을 넣으면 자동으로 ROOT 디렉토리에 압축을 풀어서 디플로이 될 것이다. ROOT.war 파일을 사용하면 http://test.elmi.page/ 도메인 루트로 접속하도록 되는것이고, ROOT.war 이외에 이름 예를 들면 hoge.war 라는 war 파일을 사용하면 http://test.elmi.page/hoge/ 로 접속해야 한다.

서브도메인을 추가하고 싶은 경우에는 Host 태그를 복사해서 name을 name=”test2.elmi.page” 처럼 서브도메인 이름으로 넣으면 된다. 물론 appBase는 다른 곳으로 지정할것.

server.xml 파일을 수정했으면 서버 재기동해서 적용하자.

아파치 로그는 /var/log/apache2, 톰캣 로그는 /var/log/tomcat9 에서 확인 가능하니 뭔가 제대로 안되면 로그 파일을 확인하면 된다.
conf 파일이나 xml 파일 수정 후에 리로드, 재기동하면 에러가 나는 경우는 파일의 문법상 문제이기 때문에 금방 찾아서 고칠 수 있다.

접속 테스트

브라우저로 확인해도 되지만, 내가 쓰는 page 도메인은 SSL 인증서를 발급 받지 않으면 브라우저로 확인이 불가능해서 wget 으로 에러 없이 index.html 파일이 제대로 보이는지 확인했다.

404 에러가 잘 나올텐데 아파치 access 로그부터 확인해서 연결이 잘 들어오고 있나 확인하자. 아파치에 문제가 없으면 그 다음은 톰캣의 억세스 로그를 보면 된다.
주로 디렉토리 경로가 잘못된 경우가 많으니 아파치의 conf 파일과 톰캣의 server.xml 에서 디렉토리 경로를 다시 잘 확인해 보자.

우분투 14.04->18.04 워드프레스 이행

워드프레스가 PHP 5.3을 더이상 지원하지 않아서 워드프레스 업데이트가 되지 않았다.
이전에 워드프레스 버전업을 하지 않아서 워드프레스가 해킹 당한적이 있기 때문에 바로 PHP 버전을 올려서 워드프레스를 업데이트 하려 했지만, 우분투 14.04에서는 PHP 5.3 이상을 공식적으로 지원하지 않고, PHP 7.x대에 저장소도 14.04 버전은 없어져 버려서 업데이트 불가. 결국 우분투 버전을 올리기로 결정.

가상 서버를 하나 더 생성해서 우분투 18.04 설치 후, 이행하기로 했다.

할일.
0. 서버 설치 후 설정
1. 아파치, PHP, DB를 설치
2. 워드프레스 이행
3. DB 이행
4. 워드프레스 접속 확인
5. 기타 서버 이행 작업

0. 서버 설치 후 설정

서버 설치하면 항상 하는 서버 IP 고정 설정과 SSH 포트 변경부터 했다.

IP 설정하는 파일이 바뀌었다.

50-cloud-init.yaml 파일 내용

변경내용 적용, 확인, 구글에 접속 테스트.

SSH 포트 변경
포트 부분만 바꿔주고 저장 후, 서비스 재시작.

1. 아파치, PHP, DB를 설치

우분투 18.04에 APM 설치하는건 apt install 만 하면 되니까 생략.은 아니고…
일단 아파치는 설치 되어 있다.
이전 우분투 서버에서 conf 파일을 옮겨 온다.

SCP로 복사하면 간단.

사이트 설정 파일을 enable로 심링크.

아파치 리로드 후에 문제가 생기는 경우에 확인.
주로 모듈이 설치 되지 않아서 생기는 경우가 많은데 해당 모듈을 설치해 주면 된다.

내 경우는 proxy_ajp가 활성화 되지 않아서 에러가 났으므로 proxy_ajp를 활성화.

이후, 아파치 리로드 해 보니 문제 없이 기동 되었다.

2. 워드프레스 이행

기존 서버에 워드프레스에 테마라든지 이런저런 이유로 파일을 수정해서 사용하고 있었기 때문에 새 서버에 워드프레스를 설치해서 데이터를 옮기지 않고, 기존 서버에 워드프레스 파일들을 그대로 가져 와서 사용하기로 했다.

기억하고 있던 tar로 압축하려 했으나 실패하고 요즘 주로 쓰고 있던 zip로 압축.(하려 했으나 zip이 없어서 설치)

winscp로 파일 전송 후에, 압축 해제.(하려 했으나 unzip이 없어서 설치)

아파치가 워드프레스 디렉토리를 사용 할 수 있도로 권한을 변경해준다.

3. DB 이행

mariadb(이후 mysql로 부름)를 설치했다.

루트 아이디가 패스워드가 없이 설치 되기 때문에 패스워드 없이 mysql에 접속 된다. mysql_secure_installation을 실행해서 루트 패스워드를 설정. 루트 패스워드를 넣고 mysql에 접속 확인.

데이터베이스 단위로 덤프를 떠서 bzip으로 압축.

새 서버로 압축한 파일을 옮긴 후에 bzip으로 압축 해제한다.

임포트하기 전에 mysql 에서 데이터베이스를 생성하고, 덤프 파일을 임포트.

4. 워드프레스 접속 확인

브라우저로 서버IP로 접속해 보고, 아파치에서 내보내는 에러라면 일단 아파치에 접속은 되는 것이니 에러 로그를 확인하고, 접속 조차 안되는 것 같으면 억세스 로그도 확인해 본다.

에러 로그에 뜬 플러그인에서 발생하는 에러를 구글에서 검색, curl, php7.3-curl가 없어서 그러는 것 같으니 설치. 아파치 재기동 후 다시 에러 로그를 확인.

에러 로그에 PHP 함수 preg_replace() 에서 에러 발생.
PHP 7.3에서는 -문자 앞에 \으로 이스케이프 시켜야 한단다.

워드프레스에서 DB 접속이 안된다. info.php로 확인해 보니 mysql 모듈이 없어서 설치 후 아파치 재기동.

워드프레스 첫 화면은 잘 보이는데 다른 페이지로 이동하면 404 에러 발생. 아파치 rewrite 모듈이 활성화 되어 있지 않아서 생기는 문제라 모듈 활성화 후 재기동.

5. 기타 서버 이행 작업

cron 으로 하던 작업 이행 할 것.
fail2ban 설치해서 ssh 로 계속 접속 시도하는 경우에 밴.

서버 타임존 설정

키보드 레이아웃 설정

마무리

이 정도 작업을 하면 서버 이행 작업이 끝난다.
여러 날에 걸쳐서 해서 정확하지는 않지만, 6시간쯤 정도 걸린듯.

수고 했다.

Could not reliably determine the server’s fully qualified domain name

우분투 서버 14.04 LTS 아파치 apache2 설치 후 기동시에 아래와 같은 에러 메시지가 출력될 때 해결 방법.

이 메시지는 아파치 기동시에 터미널이나 /var/log/apache2/error.log 파일로 출력이 되는데, 아파치 웹서버 운용에 지장이 있는 에러 메시지는 아니다. 그냥 둬도 문제가 없다.

하지만, 신경쓰이니 없애도록 하자.

ServerName 이 지정되어 있지 않아서 FQDN(Fully Qualified Domain Name) 을 결정하지 못한다니 ServerName 을 지정하도록하자. 버추얼 호스트 설정에서 ServerName 을 지정하고 있거나, 특별히 사용하고 있는 호스트명이 없다면 localhost 를 사용한다.

tee 명령은 화면 출력 내용을 파일과 화면 출력 양쪽으로 보내는 명령이다. 아래 명령으로 ServerName 을 정의를 servername.conf 파일에 쓰고, 아파치에 적용시키자.

conf 파일을 활성화

아파치 리로드

이제 /var/log/apache2/error.log 파일을 봐도 처음과 같은 에러는 출력되지 않을 것이다.

아파치 웹컨텐츠 압축 mod_deflate 설정과 mime type 알아보기

우분투 서버 14.04 LTS 에서 설치한 아파치 Apache/2.4.7 는 웹컨텐츠를 압축하기 위해서 mod_deflate 를 사용한다. 기본적으로 활성화 되어 있고, 웹에서 사용하는 일반적인 파일들은 미리 정의가 되어 있기 때문에 그냥 쓰는 일이 많지만, 웹컨텐츠 중에서 좀 특수한 파일이 있을 경우에는 압축이 되지 않는 경우가 있다.

나 같은 경우에는 워드프레스 젯팩을 설치했는데 그 안에 Genericons.svg 라는 파일이 압축이 되고 있지 않았다. 이 파일은 텍스트 파일로 78Kb 나 되는 사이즈를 가지고 있다.
이 사실은 구글의 PageSpeed Insights 에서 알게 되었다. 운영중인 사이트/블로그의 속도를 개선하기 위해서 쓰면 좋을듯하니 이용해보자.

Genericons.svg 파일이 압축되고 있지 않다.
Genericons.svg 파일이 압축되고 있지 않다.

각설하고, svg 라는 확장자를 가진 이 파일을 아파치에서 압축하는 방법을 알아보자.

deflate.conf 파일 수정

위에서 아파치에서 압축은 mod_deflate 을 사용한다고 했다. 이 모듈의 설정 파일은 deflate.conf 이고 이 파일은 /etc/apache2/mods-enabled 에 있다. 열어서 수정하도록 하자.

파일을 열어보면

이렇게 mime type 로 압축 송신할 파일들을 정의해 둔 것을 볼 수 있다.

svg 파일의 mime type 을 알아보기 위해서는 아래 파일을 참조하자.

vi 에서 / 키로 검색 모드로 들어가서 svg 를 입력하면 아래와 같이 mime type 이 image/svg+xml 이라는 것을 확인할 수 있다.

다시 deflate.conf 파일로 돌아가서 아래와 같이 압축할 파일의 정의를 추가한다.

설정을 적용시키기 위해서는 아파치 재기동이 필요하다.

PageSpeed Insights 에서 다시 확인한 결과 압축이 적용되어 압축 사용 항목이 통과 되어 있다.

압축 사용에 문제 없음!
압축 사용에 문제 없음!