Back to writing
미분류 3 min read HYEONG HWAN, MUN

Ubuntu 한 서버에서 PHP, JSP 동시에 사용하기

요청에 의해서 한 서버에서 PHP와 JSP를 동시에 구동하는 방법을 설명하고자 한다.

 


이 글은 동시구동 방법에 대해서 설명하고 있습니다.

아래의 단계를 진행하시려면 먼저 서버에 Ubuntu-Apache-PHP 및 Ubuntu-Tomcat-JSP 가 설치되어 있어야 합니다.

설치되어 있지 않으면 기존 글 Ubuntu-Apache-PHP, Ubuntu-Tomcat-JSP 을 참조하여 먼저 설치해주세요.


 

먼저 간단한 이론 2가지를 이해하고 가도록 하자.

 

1) 포트 바인딩

우리가 사용하는 TCP/IP 네트워크에서 서버간 통신은 IP 주소 + PORT 번호로 이루어진다.

당연한 이야기겠지만 네트워크 프로그램도 IP 주소 + PORT 번호로 연결을 설정한다.

 

당신이 웹서버 프로그램에 IP 주소를 지정하지 않으면 (나를 포함 대부분 지정하지 않는다),

기본값으로 0.0.0.0 (=모든 IP 라는 뜻) 이 지정된다.

즉 아무런 설정을 하지 않았다면

Apache 는 0.0.0.0:80 을 사용하고

Tomcat 은 0.0.0.0:8080 을 사용한다.

 

Apache 와 Tomcat 을 설치한 상태에서 Tomcat 의 포트를 80 으로 바꾸면

이미 사용중(Already in use) 에러가 발생한다.

 

2) 프록시(Proxy) 및 리버스 프록시(Reverse Proxy)

ISAProxy

Proxy 서버란?

사용자 와 Web Server 중간에서 요청을 처리하는 것이다.

세팅을 하면 아래의 역할을 수행할 수 있다.

- 방화벽 역할을 수행할 수 있다.

- 부하 분산(Load Balancing)을 할 수 있다.

- 특정 요청(특정 IP나 특정 사이트)에 대해서 필터링 할 수 있다.

 

Proxy 의 종류에 Forward Proxy 와  Reverse Proxy 가 있는데, 웹에서 부하분산에 쓰이는 것은 Reverse Proxy 이다.

Proxy 서버가 능동적으로 설정된 분배(또는 필터링, 방화벽) 작업을 하면 Reverse Proxy 이다.

Proxy 서버가 수동적으로 네트워크 기능을 시키는 대로 하는 것은 Forward Proxy 이다.

Forward Proxy 는 방화벽등으로 네트워크 통신이 원활하지 않을 때 사용자의 네트워크 명령을 대신 수행해 주는 것이다. (패킷 경유지)

여러분이 warning.or.kr 사이트를 뚫기 위해서 해외의 서버를 경유하는 것이 Forward Proxy 이다.

Citrix_ForwardProxy_101003

 

스크린샷 2015-06-13 오후 10.26.07

<크롬의 확장프로그램 Zen**** 는 크롬의 프록시 설정을 제어 할 수 있다>

 

 

이제 작업해보자. 당연히 리버스 프록시 작업을 할 것이고, 대상 서버는 자기자신이다.

즉 내가 요청을 받아서 특정 요청을 나의 다른 프로그램에 proxying 하는 것이다.

 


 

 

Apache 는 80포트에서 구동중이고 Tomcat은 8080포트에서 구동중이라고 가정한다.

/etc/apache2/sites-available/test1.com.conf

스크린샷 2015-03-29 오후 8.43.28

 

#vi /home/myuser/www/index.php

[code language="php"]

<?php session_start(); echo "HELLO PHP! "; echo date("Y-m-d h:i:s"); ?>

[/code]

스크린샷 2015-03-29 오후 8.40.19

 


/etc/tomcat7/server.xml

스크린샷 2015-03-29 오후 8.48.16

 

#vi /home/myuser/www/ROOT/index.jsp

[code language="php"]

HELLO JSP!

<%= new java.util.Date() %>

<% // response.sendRedirect("test.jsp"); %>

[/code]

 

스크린샷 2015-03-29 오후 8.51.03


 

두 프로그램이 동시에 같은 IP:PORT 를 사용할 수 없기 때문에,

Apache (PHP) 를 앞단에, Tomcat을 뒤에서 구동시키도록 하겠다.

 

Apache 프로그램에서 ProxyPass 관련 구문을 해석할 수 있도록 설정

#a2enmod proxy

 

http 로 proxy 할 수 있도록 변경

#a2enmod proxy_http

 

아파치 재시작

#service apache2 restart

 


 

사용 예시에 따라서 3가지 방법을 적도록 하겠다.

 

1. 사이트의 모든 요청을 Tomcat 이 처리하도록 수정

ProxyPass / http://test1.com:8080/
ProxyPassReverse / http://test1.com:8080/

스크린샷 2015-03-29 오후 9.09.11

스크린샷 2015-03-29 오후 9.10.43

 

2. 사이트의 특정 경로만 Tomcat 이 처리하도록 수정

ProxyPass /tomcat http://test1.com:8080
ProxyPassReverse /tomcat http://test1.com:8080

스크린샷 2015-03-29 오후 9.11.32

경로에 따라 요청을 처리하는 프로그램이 다르다.

*Apache 가 처리한 경우

스크린샷 2015-03-29 오후 9.13.20

 

*Tomcat 이 처리한 경우

스크린샷 2015-03-29 오후 9.13.35

 

3. PHP, JSP를 동시에 같은 경로에서 사용.

*이 방식을 사용할 경우 보안에 특히 신경써야 한다. 파일 업로드시 확장자 제한을 한번 더 확인하도록 하자.

ProxyPassMatch ^/(.*\.jsp(/.*)?)$ http://localhost:8080/$1

DocumentRoot 와 Directory 옵션도 바꾼다.

스크린샷 2015-03-29 오후 9.16.27

 

파일도 동일한 경로에 위치하게 하고.

스크린샷 2015-03-29 오후 9.19.33

 

스크린샷 2015-03-29 오후 9.21.11

스크린샷 2015-03-29 오후 9.21.28

.jsp 파일만 Tomcat 이 받아서 실행.

 


 

보안설정.

Tomcat 이 서비스 뒤로 숨어야 한다.

#vi /etc/tomcat7/server.xml
address="127.0.0.1" 추가

스크린샷 2015-03-29 오후 9.24.03

 

Tomcat 을 재시작하면, 서비스는 구동중이나 외부에서의 접근은 차단될 것이다. 즉 프록시로만 접근가능.

 

Filed under