2015년 3월 27일 금요일

우분투 1404 server 위에 apache2 mysql tomcat7 설치 후 배포!!! mod-jk 사용 X (apache2 와 tomcat7 분리)



mod-jk의 역할은 80번 (아파치포트)로 들어 오는 것을 8080(톰캣포트)로 자동으로 연결해준다. 우리는 mod-jk를 사용하지 않기 때문에 80 포트로 들어오면 .html, .js, .css 파일을 제외한 나머지는 proxy 를 이용해 8080포트로 보낼 것이다.
우선 나같은 경우는 이런 경우를 생각하지 않고 front-end와 back-end를 한 프로젝트로 구성했는데, 보통 front-end 와 back-end 프로젝트를 나눠서 만들고 각각 배포를 달리한다. (front는 서버에 back은 was에) 이렇게 하기 위해서는 uri로 구분지어야 한다. (그런것 같다..ㅜㅜ) 예를들어 /test/로 들어오는 모든 요청은 backend로 보내고 나머지는 front에서 처리한다 이런식이다.
나는 기존에 이런 구성이 아니었기 때문에 프로젝트를 조금 수정한다.
Edit

프로젝트 수정 /api 로 오는 모든 요청은 tomcat으로 보낸다.

1) 컨트롤러에 RequestMapping("/api")
@Controller
@RequestMapping("/api")
public class TodoController {
2) js 파일에서 ajax로 보내는 모든 uri에 /api 붙여준다. 좀 노동이지만..
$http.get("./api/todos/all").success(function
여담 - 앞에 ./ 는 프로젝트 명이 어떻게 될지 모르기 때문에 상대 경로를 적어주는 것.
. 은 자기 자신 폴더를 의미함.
Edit

filter가 필요하다

apache에서 들어온 요청을 다른 서버에 있는 tomcat으로 보내는 것이기 때문에 접근제한 에러가 날 것이다. 아마
access-control-allow-origin 가 헤더게 없습니다.
이런식의 에러문구가 나타난다.
access-control-allow-origin 를 헤더에 넣기 위해서는 filter를 만들어 줘야한다.
package kr.co.kware.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
그리고 web.xml에도 filter 설정을 해준다.
<filter>
<filter-name>SimpleCORSFilter</filter-name>
<filter-class>
kr.co.kware.web.filter.SimpleCORSFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>SimpleCORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  • 이후에 나는 maven packaging 과정에서 javax.servlet 이 없다는 에러가 났는데.
pom.xml에 아래와 같이 넣어주니 해결됨.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Edit

apache2 설정파일에서 proxy 설정 해준다 (여기가 핵심)

  • 혹이 이전에 mod-jk가 설치되어있다면
#sudo find / -name jk.*
파일을 찾아서 지워준다. 2개였던 것으로 기억함.
#sudo vi /ect/apache2/sites-available/000-default.conf
여기에서 JkMount 로 된 것들을 모두 주석(#) 처리한다.
mod-jk가 역할을 안하는지 확인하려면
http://localhost:80 -> 접속시 우분투 아파치 화면
http://localhost:8080 -> 톰캣 접속화면
이 다르게 보여야 한다.
이제 본격적으로 apache2 설정파일을 수정해보자. (정적파일외 모든것은 tomcat으로 가게끔!)
먼저 아파치 설정파일로 이동
#sudo vi /ect/apache2/sites-available/000-default.conf
  • mod-jk 를 사용 했다면 JkMount 로 된 것들을 모두 주석(#) 처리한다.
  • DocumentRoot를 기본 설정인 /var/www/html 로 바꾼다
  • apache에서 처리하는 파일을 모두 /var/www/html 로 이동시켜야 한다. 그리고 처음 요청이 들어오는 것이 여기!!
    앞서 말했지만 프론트엔드와 백엔드 프로젝트를 따로 구성해, 프론트엔드 프로젝트를 /var/www/html 에다가 배포하고, 백엔드 프로젝트를 /var/lib/tomcat7/webapps 에 배포하는 것.
    우선 나는 같은 곳에서 만들었기 때문에 .war 파일을 /var/lib/tomcat7/webapps 에 넣고 html,js,css 파일을 /var/www/html 이동함.
  • 혹시 DocumentRoot가 /var/lib/tomcat7/webapps/ROOT 로 되어 있으면 주석 처리.
  • 프록시 설정을 적어준다.
ProxyPass /api http://localhost:8080/api
ProxyPassReverse /api http://localhost:8080/api
/api 로 시작되는 uri 는 모두 http://localhost:8080/api 서버로 간다는 뜻이다.
  • tomcat의 server.xml 에 프록시 등록
<Connector port="8080" ...
proxyName="localhost"
proxyPort="80"/>
  • 프록시에 링크 걸어두기
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/proxy_connect.load /etc/apache2/mods-enabled/
프록시를 등록했으면 링크 걸어서 사용가능한 프록시?로 링크를 걸어주는것...같..? ? ??ㅎㅎ 여튼 해줘야한다!!!
준비끝!!!!!
Edit

아파치와 톰캣을 재시작 해주자

#sudo service apache2 restart
#sudo service tomcat7 restart

댓글 1개:

  1. Lucky Club Live Casino Review & Ratings | Luckyclub.live
    Read our in-depth luckyclub review of Lucky Club Live Casino, including information on its VIP program, games, VIP welcome, payments, live

    답글삭제