1 2 3 4 5 6 L

Page Header > Subtitle

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

 

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_101003http://blog.lael.be/wp-content/uploads/2015/03/Citrix_ForwardProxy_101003-602x400.jpg 602w, http://blog.lael.be/wp-content/uploads/2015/03/Citrix_ForwardProxy_101003.jpg 1080w" sizes="(max-width: 648px) 100vw, 648px" style="box-sizing: border-box; margin: 0.857143rem auto; padding: 0px; border: 0px; vertical-align: baseline; height: auto; display: block; max-width: 100%; border-radius: 0px; clear: both;">

 

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

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

 

 

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

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

 


 

 

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

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

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 8.43.28

 

#vi /home/myuser/www/index.php
1
<?php session_start(); echo "HELLO PHP! "; echo date("Y-m-d h:i:s"); ?>

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 8.40.19

 


/etc/tomcat7/server.xml

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 8.48.16

 

#vi /home/myuser/www/ROOT/index.jsp
1
2
3
4
5
HELLO JSP!
 
<%= new java.util.Date() %>
 
<% // response.sendRedirect("test.jsp"); %>

 

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 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/

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.09.11

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.10.43

 

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

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

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.11.32

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

*Apache 가 처리한 경우

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.13.20

 

*Tomcat 이 처리한 경우

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.13.35

 

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

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

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

DocumentRoot 와 Directory 옵션도 바꾼다.

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.16.27

 

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

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.19.33

 

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.21.11

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.21.28

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

 


 

보안설정.

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

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

&#49828;&#53356;&#47536;&#49399; 2015-03-29 &#50724;&#54980; 9.24.03

 

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

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기
captcha
자동등록방지 숫자입력

Server

번호 제목 글쓴이 날짜 조회수
67 Simple CORS using .htaccess file. 미도어묵 03-08 689
66 HTTPS/DNS 차단 이해하기 미도어묵 02-14 738
65 HTTP proxying cloudflare custom port 미도어묵 01-02 715
64 Nginx HTTPS Let's Encrypt 무료 인증서 설치하기 우분투 16.04 미도어묵 10-17 356
63 리눅스 sftp log 남기기 미도어묵 01-25 454
62 PHP | [CentOS 7] PHP 5.4 to PHP 7.1 업그레이드 미도어묵 01-22 618
61 우분투(ubuntu) kernel 업그레이드 시 boot 용량 부족, 의존성 문제 미도어묵 01-11 524
60 firewall.sh , reboot.sh 미도어묵 01-10 337
59 사용자 계정 추가, mysql 계정추가등 shell script 미도어묵 01-10 341
58 Ubuntu 한 서버에서 PHP, JSP 동시에 사용하기 미도어묵 01-08 352
57 Ubuntu JSP서버세팅 미도어묵 01-08 341
56 pid 값으로 강제 종료 스크립트. 미도어묵 12-22 335
55 mysql(mariadb) 테이블별 mysqldump 백업 - shell script 미도어묵 12-22 349
54 Cloudflare - Get visitors real IP without extension(cloudflare_realip.conf) 미도어묵 12-18 334
53 shell script 일정 이상 cpu 점유시 강제 kill 미도어묵 12-07 350
52 리눅스 모니터링 툴 htop 미도어묵 11-09 386
51 [OS X, Ubuntu] 터미널에서 tmux 사용해 보기 미도어묵 11-09 409
50 우분투 보안 업데이트만 설치하기 미도어묵 11-07 365
49 nginx config , rewrite, allow, deny(web && node) 미도어묵 11-01 337
48 특정 IP만 SSH 접속 허용하기 미도어묵 09-30 382