강좌

  • 웹서버
  • 아파치
  • 톰켓
HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
SSI와 CGI환경변수 활용법
조회 : 3,834  


처음으로

웹호스팅서비스를 이용하여 홈페이지를 운용하고 계신분이라면 SSI라는 것에서 한번쯤은 들어보았을 것이라 생각합니다.

하지만 그 의미와 사용법에 대해서 확실히 알고 나름대로 활용하고 계신분들은 그렇게 많지 않은 것 같습니다.

SSI는 알고보면 정말 쉬우며 HTML 태그를 알고계신분이라면 별다른 노력없이도 자연스럽게 사용할 수가 있는것에 비해 그 활용효과는 실로 놀라운 것입니다.

만약 여러분들께서 웹호스팅서비스를 이용하고계신다면 SSI를 활용해 보십시오.

여기서 설명드리는 내용만 알고계신다면 어떤업체에서 서비스를 받고 있다하더라고 원하시는 대로 사용하실 수 있을 것이라 생각합니다.

SSI란 Server Side Includes의 약자로서 웹페이지 내에서 CGI를 사용하지 않고서도 방문자 카운터, 최종변경일 및 CGI환경변수의 사용등을 간단히 사용할 수 있게 해주는 것으로 CGI환경변수 뿐아니라 일반적인 HTML문서 및 특정명령의 실행결과등을 지정한 위치에 삽입할 수 있는 것입니다.

SSI는 웹문서를 간단히 만들기 위해 생겨났으며 HTML태그와 함께 자연스럽게 사용하며 무엇보다도 별다른 사용법을 익히지 않아도 활용할 수 있다는 점이 큰 장점입니다.

SSI의 실행경로를 알아보겠습니다.

웹서버에 있는 HTML문서는 태그(Tag)까지 그대로 방문자의 웹브라우즈로 전송이 되며 웹브라우즈(클라이언트)에서 태그가 해석되어 그 결과를 보여줍니다.

다시 말해서 일반 HTML문서의 실행은 웹브라우즈에서 행해지게 되지만 SSI 코드는 웹브라우즈로 전송되기 전에 웹서버에서 변환되어 그 결과만을 웹브라우즈로 보내게 됩니다.

즉 SSI코드의 실행은 웹서버에서 행해지게 된다는 점이 HTML문과는 다른 점입니다.

그리고 HTML로만 작성된 웹문서와는 달리 SSI코드가 들어있는 파일의 이름은 .shtml입니다.

.shtml로 된 문서는 웹서버에서 SSI코드를 찾아서 먼저 변환한 후에 웹브라우즈로 보내게 됩니다.

일반문서와 SSI코드가 들어가 있는 shtml문서의 차이점을 간략히 표로 만들어 보면 다음과 같습니다.

 

구분

일반 HTML문서

SSI코드가 포함된 HTML문서

파일구분(확장자)

*.html

*.shtml

Tag번역(코드실행)

client(웹브라우즈)에서 Tag번역

Server(웹서버,Apache)에서 SSI코드번역후 Client(웹브라우즈)로 전송

사용가능코드

html표준태그

웹브라우즈로 결과전송 html표준태그, SSI코드, CGI환경변수, 쉘변수등

사용조건

없음

Web Server의 환경설정필요

[HTML문서와 SSI문서의 비교]


처음으로

 

아파치를 사용하고 있다면 SSI를 사용하기 위해서는 아파치관리자(서버관리자)는 몇가지 설정을 해줘야합니다.

저희 웹호스팅운영팀에서는 다음과 같은 설정을 해두었으므로, 고객여러분께서는 사용만 하시면 됩니다.

하지만 여러분들이 서비스를 받고 있는 웹서버에 어떤설정이 되어있어야하는지 정도는 알고계시는 것도 좋을 것입니다.

SSI코드를 홈페이지에서 사용하기 위해서는 웹서버의 환경파일(httpd.conf)에는 다음과 같은 설정들이 되어있어야 합니다.

 

 

AddType text/html .shtml

AddHandler server-parsed .shtml

 

위의 설정은 httpd.conf(웹서버 환경설정파일)파일내에 위와 같이 설정이 되어있어야합니다.

만약 행 앞에 #(주석)이 붙어 있다면 제거하고 난 후에 아파치를 다시 시작해야 합니다.

이 설정은 "shtml이란 확장자를 가진 문서는 SSI 코드가 포함된 문서이므로 웹서버에서 SSI코드를 찾아서 먼저 해석하라"는 의미입니다.

만약 여러분께서 이장에서 배울 SSI코드가 제대로 실행이 되지않는다면 아마도 이 설정이 되어있지 않은 까닭이 대부분일 것입니다.

따라서 여러분들은 여러분이 가입한 업체에 문의하여 SSI코드를 사용하려고 하니 위와같이 설정을 해달라고 말씀을 하셔야 합니다.

아마도 대부분의 웹호스팅업체에서는 이런설정이 되어있을 것입니다.

하지만 그렇지 않은 업체도 있기 때문에 똑똑한(?) 여러분들이 이런 업체의 서버담당들에게 알려주셔야합니다.

이외에도 웹서버에는 몇가지 확인해 줘야하는 것들이 있으나 이는 웹서버담당들이 알아서 해줄 것입니다.

여러분들은 그냥 서버담당들에게 SSI를 사용할 수 있도록 설정해 달라고 하시면 됩니다.


처음으로

 

먼저 SSI 코드의 사용형식을 알아보도록 하겠습니다. 우선 간단한 SSI 코드 활용예를 보십시오.

다음과 같은 SSI코드가 들어 있는 웹문서가 있다고 하겠습니다.

이 문서중 <!-- 와 -->사이에 있는 코드가 SSI코드입니다.

 

<html>

<head>

<title>SSI의 간단한 사용예</title>

</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">

<font size="4"><b>SSI의 간단한 사용예</b></font><p>

<p>

저희 사이트를 방문해 주셔서 감사합니다.<p>

방문하신분의 정보를 간단하게 확인하겠습니다.<p>

1.방문하신 날짜는<!--#echo var="DATE_LOCAL" -->입니다.<p>

2.방문자님의 IP Address는 <!--#echo var="REMOTE_ADDR" -->입니다.<p>

3.방문자께서 사용하신 웹브라우즈는 <!--#echo var="HTTP_USER_AGENT" -->입니다.<p>

4.이 문서의 최종 수정일은 <!--#echo var="LAST_MODIFIED" -->입니다. <p>

</body>

</html>

[SSI코드의 예]

위의 파일이름은 sample.shtml로 했으며 이 파일은 보통의 HTML문서와 크게 달라 보이지는 않지만 이탤릭체로 된 부분은 좀 생소할 것입니다.

자세히 보면 HTML 태그 중에 주석(<!-- -->)처리하는 태그로 사용된 것을 볼 수 있으며 이 부분이 바로 SSI 코드인 것입니다.

웹서버에서는 이런 코드를 만나면 그에 해당하는 실행을 하게되며 그 결과값을 다른 HTML 태그들과 함께 웹브라우즈로 전송하게 됩니다.

아래의 결과는 위의 SSI코드가 포함된 sample.shtml를 웹브라우즈로 불러본 것입니다.

 


이 결과를 보면 표시된 부분은 SSI코드가 해당 결과값으로 나타난 것입니다.

이번 예와 같이 SSI 코드를 사용하면 CGI 프로그램 없이도 CGI 프로그램을 한 것과 유사한 결과를 얻을 수 있다는 이유 때문에 SSI를 사용하려는 것입니다.

자, 그럼 SSI의 사용형식과 SSI 코드에 대해서 좀더 구체적으로 알아보도록 하겠습니다


자, 그럼 SSI의 사용법과 예를 보았으니 구체적인 SSI Code들에 대해서 알아보겠습니다.

앞의 예에서 보신바와 같이 SSI 명령어의 사용형식은 다음과 같습니다.

<!--#command tag1="value1" tag2="value2" -->

예) <!--#echo var="LAST_MODIFIED" -->

HTML의 주석태그의 형식을 그대로 사용하며 뒷부분의 --> 앞에는 반드시 한 개이상의 공간(space)이 있어야 합니다.

먼저 SSI에서 사용되는 명령어들은 다음과 같습니다.

 

 

command

tag

의 미

config

errmsg

SSI코드가 HTML문서 내에서 문맥검사시에 에러가 발생하면 어떤 메시지를 절달할 것인가를 결정한다.

timefmt

SSI코드에서 날짜를 출력할 때 사용할 새로운 포맷을 정해준다.

sizefmt

파일의 크기를 표시할 때 사용될 형식을 결정한다.

bytes로 하면 바이트단위로 표기되며, abbrev로 하면 킬로바이트나 메가바이트형식으로 단축형으로 표기된다.

include

virtual

지정한 문서를 해당위치에 포함시킨다. 이때 가상경로를 사용할 수 있다.

file

지정한 문서를 포함시킬 때 상대경로를 사용할 수 있다. 즉, ../등으로 시작하는 상대경로를 지정하여 포함시킬 문서를 지정할 수 있다는 것이다.

echo

var

SSI변수와 CGI환경변수의 값을 출력해 준다.

fsize

virtual

지정한 파일의 크기를 출력해 준다. 이 명령은 include 명령어와 같이 virtual tag와 file tag를 사용할 수 있으며, 표시 단위는 config명령어의 sizefmt에 종속해서 표시된다.

file

flastmod


지정한 파일의 최근 수정일을 표시하며, config명령어의 timefmt에서 지정한 형식에 준해 표시된다.

exec

cmd

exec는 쉘명령이나 CGI스크립트를 실행시켜주는 명령어로 cmd tag는 지정한 쉘명령어를 실행시켜준다.

cgi

CGI스크립트를 실행시켜주는 tag이다.

 

이제 command부분과 tag부분 그리고 value부분에 대해서 알아보도록 하겠습니다.

몇가지 실제 예를 들어 보겠습니다.

 

예1) 해당문서의 최종수정일을 지정된 위치에 출력하려고 한다.

SSI 코드 : <!--#echo var="LAST_MODIFIED" -->

 

예2) 홈페이지 방문자의 IP Address를 표시하려고 한다.

SSI 코드 : <!--#echo var="REMOTE_ADDR" -->

 

예3) 지정된 문서를 삽입하려고 한다.

SSI 코드 : <!--#include virtual="sample.html" -->

 

예4) 지정한 위치에서 sample.cgi라는 CGI 스크립트를 실행하려고 한다.

SSI 코드 : <!--#exec cgi="sample.cgi" -->

 

예5) 해당파일이 존재하는 디렉토리의 정보(파일등)를 확인하려한다.

SSI 코드 : <!--#exec cmd="ls -l" -->

 

예6) 홈페이지 방문자가 사용하고 있는 웹브라우즈를 표시하려고 한다.

SSI 코드 : <!--#echo var="HTTP_USER_AGENT" -->

 


이에 대한 예는 얼마든지 있으며 예제파일을 만들어서 실제로 웹브라우즈로 불러서 이들 결과가 어떻게 출력이 되는지를 확인해보시면 이해가 좀더 빠를 것입니다.

이번에는 일반적인 CGI 환경변수에 대해서 알아보도록 하겠습니다.

CGI의 환경변수는 많습니다.

그중 중요한 환경변수 몇가지를 예를 들어보겠습니다.

 

<html><head><title>SSI의 간단한 사용예</title></head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">

<font size="4"><b>CGI환경변수를 사용한 SSI예</b></font><p><p>

1. <!--#echo var="GATEWAY_INTERFACE" --><br>

2. <!--#echo var="SERVER_SOFTWARE" --><br>

3. <!--#echo var="SERVER_NAME" --><br>

4. <!--#echo var="SERVER_ADMIN" --><br>

5. <!--#echo var="SERVER_PROTOCOL" --><br>

6. <!--#echo var="DOCUMENT_ROOT" --><br>

7. <!--#echo var="REQUEST_METHOD" --><br>

8. <!--#echo var="REMOTE_ADDR" --><br>

9.<!--#echo var="scRIPT_NAME" --><br>

10.<!--#echo var="scRIPT_FILENAME" --><br>

11.<!--#echo var="SERVER_PORT" --><br>

12.<!--#echo var="HTTP_USER_AGENT" --><br>

13.<!--#echo var="HTTP_COOKIE" --><br>

</body></html>

SSI코드로 사용한 CGI환경변수

 

이파일의 이름은 sample2.shtml 이며 결과를 웹브라우즈에서 확인한 것은 다음과 같습니다.

 

위의 소스파일과 아래의 결과를 각각의 번호를 참조하면서 확인해보시기 바랍니다.



1번 : GATEWAY_INTERFACE : 보통 웹서버와 어플리케이션 간의 인터페이스

표준으로서 결과에서 보듯이 일반적으로 CGI의 버전을 표시함.

 

2번 : SERVER_SOFTWARE : 실행중인 웹서버(여기서는 아파치)의 버전을 표시함.

 

3번 : SERVER_NAME : 방문한 페이지의 도메인을 표시함. httpd.conf파일의 가상호스트로 설정된 부분중 "ServerName www.manualand.co.kr"에서 정보를 가져와 보여준다.

 

4번 : SERVER_ADMIN : 웹서버 관리자의 전자우편주소를 나타낸다. 서버에러등의 경우에 서버관리자에게 전자우편을 보내라는 메시지를 접하면 주로 사용되는 전자우편주소이다.

httpd.conf파일의 가상호스트로 설정되어 있는 "ServerAdmin webadmin@manualand.co.kr"을 보여준다.

5번 : SERVER_PROTOCOL : HTTP 프로토콜 버전에 대한 정보

 

6번 : DOCUMENT_ROOT : 웹서버의 홈페이지의 홈디렉토리를 표시함. httpd.conf파일의 맨 마지막에 위치한 가상호스트의 설정에 지정되어 있는 "DocumentRoot /home/ileshk/public_html" 값이다.


7번 : REQUEST_METHOD : CGI프로그램에서 쓰이는 인수 전달방법에 대한 정보. GET과 POST이 있다.

 

8번 : REMOTE_ADDR : 방문한 가입자의 IP Address를 출력해 준다.

 

9번 : scRIPT_NAME : 현재 실행중인 파일명을 나타낸다.

 

10번 : scRIPT_FILENAME : 현재 실행중인 파일의 절대경로를 나타낸다.

 

11번 : SERVER_PORT : 현재 실행중인 웹서버의 사용포트.

 

12번 : HTTP_USER_AGENT : 방문자가 사용중인 웹브라우즈에 대한 정보.

 

13번 : HTTP_COOKIE : 쿠키정보를 보여준다.

 

이상으로 SSI에 대해서 알아보았습니다. 이들 코드들은 좀 더 다른 방향으로 얼마든지 활용가능하므로 다양한 용도로 활용해 보기 바랍니다.


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=220


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
박성수
파파
헐렁고수