'Server'에 해당되는 글 9건
- 2009/09/18 Upgrading Parallels Tools in CentOS 5.3
- 2009/08/07 mod_rewrite의 설치 및 설정 (1)
- 2007/09/07 Fedora Grub 복구
- 2007/09/07 삼바 서버 설정
- 2007/09/07 YUM (Yellowdog Updater, Modified)을 이용한 페도라 리눅스 패키지 관리
- 2007/09/03 Apache 2.2.4 + php 5.2.3 install for Windows
- 2007/08/09 trac 사용을 위한 Subversion + apache install options (1)
- 2007/06/29 trac Install
- 2007/06/29 Windows 환경에서 APM 설치
mod_rewrite는 Apache의 기능으로, 모듈을 넣어 사용가능하다.
이는 URL(도메인 이하의 패스)의 리디렉트나 위장, 치환등을 실시할 수 있다.
일반적으로 정규표현을 이용해서 RewriteRule를 적을수 있다.
정규표현식에 관해서는 정규표현관련 페이지를 참고하길 바란다.
* 설치 관련정보
rpm, yum、apt-get, tar.gz, make install, shell・환경변수
* 설치
Apache2의 경우는 ./configure에
--enable-so --enable-rewrite=shared
을 붙여서 make한다.
버전에 따라서 서식이 약간 틀려질수 있다.
Apache・aprのインストール・設定을 참고
그 후 Apache의 modules 디렉토리에 mod_rewrite.so가 있는지 확인.
httpd.conf에
LoadModule rewrite_module modules/mod_rewrite.so
행을 추가 또는 주석처리되어 있으면 주석을 삭제.
* RewriteRule - httpd.conf 에 적는 경우
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L,R]
</IfModule>
* RewriteRule - .htaccess 에 적는 경우
.htaccess에관해서는, .htaccessのサンプル・設定을 참조。
RewriteEngine on
RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L,R]
* RewriteRule - httpd.conf(VirtualHost)에 적는 경우
<VirtualHost 192.168.1.2>
ServerName www.example.com
DocumentRoot /test/htdocs
RewriteEngine On
RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L]
<Directory "/test/htdocs">
Options Includes ExecCGI MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
* RewriteRule 작성방법 및 해설
RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L]
의 경우,
http://도메인명/sample/ 에 접속하면
http://도메인명/shop/sample/ 로 주소처리하여 표시하고,
브라우저에서는, http://도메인명/sample/ 으로 주소를 표시한다.
http://도메인명/sample/test/test.php 에 접속하면
http://도메인명/shop/sample/test/test.php 로 주소를 처리하여 표시하고
브라우저에서는, http://도메인명/sample/test/test.php 으로 주소를 표시한다.
[L]은 정의된 최종행을 의미한다.
이 행 이후의 RewriteRule은 무시된다.
가장 맨 마지막행에 적는다.
아무것도 적지 않아도 OK.
[R]은 리다이렉트를 실행.
RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L,R]
의 경우,
http://도메인명/sample/ 으로 접속하면
http://도메인명/shop/sample/ 로 주소처리하여 표시하고,
브라우저는 http://도메인명/shop/sample/ 으로 주소를 표시한다.
http://도메인명/sample/test/test.php 으로 접속하면
http://도메인명/shop/sample/test/test.php 로 주소를 처리하여 표시하고
브라우저는 http://도메인명/shop/sample/test/test.php 으로 주소를 표시한다.
RewriteRule ^/blog/view/([0-9]+)/?$ /blog/view/index.php?id=$1
의 경우,
http://도메인명/blog/view/1234/ 으로 접속하면
http://도메인명/blog/view/index.php?id=1234 로 주소처리하여 표시하고
브라우저는 http://도메인명/blog/view/1234/ 으로 주소를 표시한다.
「/」???「?」(을)를 넣어놓은 것은, 야후등의 검색 엔진에서는 URL의 뒤의 slash를 삭제한 URL를 인덱스에 등록하기 때문에, URL의 뒤로 slash가 있어도 없어도 액세스 할 수 있도록 하고 있다.
RewriteRule ^/abc/([0-9,a-z,A-Z]+)/([0-9,-]+)/?$ /abc/test.php?id=$1&date=$2
의 경우,
http://도메인명/abc/suzuki/2006-01-01/ 으로 접속하면
http://도메인명/abc/test.php?id=suzuki&date=2006-01-01 로 주소처리하여 표시하고
브라우저는 http://도메인명/abc/suzuki/2006-01-01/ 으로 주소를 표시한다.
* RewriteRule 샘플
<VirtualHost 192.168.1.2>
ServerName www.example.com
DocumentRoot /test/htdocs
RewriteEngine On
RewriteRule ^/sample/(.*)$ /shop/sample/$1
RewriteRule ^/blog/view/([0-9]+)/?$ /blog/view/index.php?id=$1
RewriteRule ^/abc/([0-9,a-z,A-Z]+)/([0-9,-]+)/?$ /abc/test.php?id=$1&date=$2 [L]
<Directory "/test/htdocs">
Options Includes ExecCGI MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
==========================================================================================================================
==========================================================================================================================
mod_rewrite 설정으로 userid.domain.com 사용하기
원하는 결과는 "http://www.domain.com/~userid" 를 사용치 않고
"http://userid.domain.com" 또는 "http://blog.domain.com/userid" 와 같이 서비스 할 목적입니다.
간단히 정리해서 올립니다.
모두 3가지 부분으로 나누어 설명할수 있습니다.
1. 네임서버 설정
2. mod_rewrite 모듈 탑재
3. 아파치 conf 화일에 rewrite 관련 설정
1. 네임서버 설정
-------------------------------------------------------------
해당하는 zone 파일의 호스트 이름에 "*" (아스트리크) 문자를 사용합니다.
* IN A 111.222.333.444
2. mod_rewrite 모듈 탑재
-------------------------------------------------------------
(A) 아파치의 모듈들이 설치된 디렉토리 (/usr/local/apache/libexec 등)에 mod_rewrite.so 가 존재할 경우 "C" 로 건너뛰면 됩니다.
(B) 아파치의 모듈들이 설치된 디렉토리에 mod_rewrite.so 가 없는 경우.
enb CFLAGS="-DEAPI" \
./configure \
--prefix=/etc/httpd \
--enable-module=so \
--enable-shared=max \
--enable-module=rewrite \
--enable-shared=rewrite
make
make install
(C) 아파치 conf 화일에서 다음을 확인합니다.
LoadModule rewrite_module livexec/mod_rewrite.so
AddModule mod_rewrite.c
3. 아파치 conf 화일에 rewrite 관련 설정
-------------------------------------------------------------
ServerAdmin admin@domain.com
DocumentRoot /home/httpd/html
ServerName www.domain.com
ServerAlias domain.com *.domain.com
ErrorLog logs/domain.com-error_log
CustomLog logs/domain.com-access_log common
### Vitual User Hosts
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteCond %{HTTP_HOST} !^domain\.com$
RewriteCond %{HTTP_HOST} ^[^.]+\.domain\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.domain\.com(.*) /home/$1/html$2
---------------------------------------------------------------------------------
추가적으로 모듈만 컴파일 해서 추가할 경우(DSO로 컴파일 했을 경우만 해당)
1.3.X 버젼에서 mod_rewrite 적재
아파치소스(./configure 명령을 한번도 내리지 않은 원본소스를 말함) 디렉토리에서
# ./configure --enable-module=rewrite
# cd src/modules/standard
# gcc -shared -o mod_rewrite.so mod_rewrite.o
# cp mod_rewrite.so /usr/local/apache/libexec/
2.X 버젼에서
# /usr/local/apache/apxs -c -I/usr/include/gdbm mod_rewrite.c
# gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
# /usr/local/apache/apxs -i mod_rewrite.so
컴파일 이후에 추가해야 하는 라인도 아파치 버젼에 따라 다릅니다.
2.X 이후 버젼은 아래와 같습니다.
----------------------------------------------------------
LoadModule rewrite_module modules/mod_rewrite.so
< IfModule mod_rewrite.c>
RewriteEngine On
Rewriterule ^/(.*)$ /index.php?$1
< /IfModule>
----------------------------------------------------------
위와 같이 하면 index.php 파일은 이름 없이도 불러와집니다.
1.3.X 버젼에서는 아래와 같습니다.
LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c
LoadModule은 관련된 리스트가 있는 맨 아래에 추가 해주시고 AddModule도 역시
관련 리스트가 있는 맨 아래에 추가해주시면 됩니다.
==========================================================================================================================
==========================================================================================================================
아래 링크에 URL rewriting guide 가 설명되고 있다.
http://httpd.apache.org/docs-2.0/misc/rewriteguide.html
http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
mod_rewrite모듈에 대한 일본어 설명(현재 일본에서 보는 관계루다가...)이 있는 페이지...
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
개인 페이지
http://kimbio.pe.kr/manual/ko/rewrite/rewrite_guide_advanced.html
기억을 위해 간단히 설명을 옮겨 적어 놓는다.
----------------------------------------
일단은 .conf파일에 또는 root디렉토리의 .htaccess 파일에
RewriteEngine on
추가하면 rewrite엔진을 사용할 수 있당.
원하는 내용은 아래처름 정규표현식을 사용하면 URI를 변경할 수 있다.
RewriteRule ^old\.html$ new.html
위 규칙은 old.html요청을 new.html요청으로 바꿔서 처리한다(transparently).
만약에 강제로 new.html로 표시하려면 flag로 [R]을 사용한다.
RewriteRule ^old\.html$ new.html[R]
아래 규칙은 static URI를 dynamic URI로 바꾸어 처리한다.
정규표현식을 통해 여러개의 요청에 대한 변환을 간단히 표현할 수 있다.
RewriteRule ^products/([0-9][0-9])/$ productinfo.php?prodID=$1
위 규칙은 URL이 products/12/ 또는 products/90/ 이런 형태의 요청이 발생할 경우
내부적으로 productinfo.php?prodID=12 또는 productinfo.php?prodID=90 으로
바꿔서 처리한다. [0-9]는 0~9까지의 임의의 숫자 하나를 의미 한다.
[a-z]는 소문자a~z를 [A-Z]는 대문자 A~Z, [a-zA-Z]는 영문자 한자를 의미한다.
()로 감싸고 있는 부분은 back-reference라고 하는 것으로 변수처럼 변환될 패턴에서
사용된다. back-reference 순서대로 $1,$2 형태로 사용하게 된다.
위의 예에서는 back-reference가 한개이며 $1부분이 치환되게 된다.
하지만, products/12 같은 요청은 처리를 못한다. '/'가 없기 때문인데
가능한 방법은 다양하겠지만, 간단히 다음처럼 룰을 작성하면 가능하다.
RewriteRule ^products/([0-9][0-9])$ products/$1/ [R] <-- flag를 사용하여 다시 rule적용
RewriteRule ^products/([0-9][0-9])/$ productinfo.php?prodID=$1
=======================================================================================================================
=======================================================================================================================
웹호스팅하는 서버를 관리하다 보면...
새로운 입주가 발생할 때 마다...
웹서버 세팅을 바꾸어야 하는데..
매우 귀찮은 일임이 틀림없다.
게다가 아파치의 한계로 인해..
무한히 가상 서버를 등록할 수도 없다.
(정확한 수치는 모르나... 100여개 이내로 보인다.)
아파치에는 rewrite라는 아주 훌륭한 기능이 있다.
"mod_rewrite를 사용할 수 없다면
당신이 아파치에서 사용할 수 있는 것은 없다."
라는 말이 있을 정도다.
이글은 rewrite모듈을 이용하여 보다 편리하게
가상도메인을 관리하고자 하는 이들을 위한 작은 팁을 제공한다.
몇가지 전제 조건:
아파치 버전 : > 1.3.20
서버IP : 192.168.0.1
서버기본 도큐먼트루트* : /var/www/html/ (Redhat 기본)
가상도메인들의 루트* : /var/www/vhost/도메인네임
ex) /var/www/vhost/wiki.domain.com/ /var/www/vhost/domain.com/
등록되지 않은 가상도메인들은 모두 서버기본 도큐먼트루트가 시작된다.
(* 상기의 내용은 충분히 변경 가능하다.)
운영방법
가상도메인의 등록이 필요하면..
ftp나 쉘접속으로 /var/www/vhost에
해당 도메인네임과 동일한 디렉토리를 만들어 주는 것으로 마무리된다.
ex) mkdir /var/www/vhost/new.domain.com
그밖의 기능
자동 리다이렉션.
DNS에 *.domain.com 등으로 등록되어 있고,
/var/www/vhost/www.domain.com이란 디렉토리를 생성했을 때
http://domain.com http://foobar.domain.com 모두
http://www.domian.com 으로 자동 리다이렉트가 된다.
하지만, foobar.domain.com란 디렉토리 역시 있을 경우..
http://foobar.domain.com 은 /var/www/vhost/foobar.domain.com으로
연결되고 그밖에는 모두 http://www.domain.com 으로 리다이렉션이 된다.
만약
/var/www/vhost/domain.com으로 등록되어 있을 경우에는
http://www.domain.com http://foobar.domain.com 모두
http://domian.com 으로 리다이렉트가 된다.
여기서도 마찬가지로 foobar.domain.com란 디렉토리 있을 경우..
http://foobar.domain.com 은 /var/www/vhost/foobar.domain.com으로
연결되고 그밖에는 모두 http://domain.com 으로 리다이렉션이 된다.
디렉토리 이름끝에 자동으로 / 붙여주기.
ex) http://domain.com/somedir -> http://domain.com/somedir/
한계
mod_rewrite가 참으로 유용하긴 하나.. 한계도 있다.
일단 alias나 scriptalias가 반영되지 않는다.
및의 예에는 /cgi-bin/이라는 scriptAlias를
rewriteRule를 사용 강제로 반영시키는 예제다..
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
RewriteRule /cgi-bin(/.*)$ /cgi-bin$1 [L,PT]
또 한가지 자동 리다이렉션은..
http://domain.com http://www.domain.com 이 두유형에 대해서만 지원한다.
물론 변경할 수는 있다.
가상도메인내에 파일에서는
환경변수 DOCUMENT_ROOT값이 무의미하다.. (/var/www/html로 고정..)
그래서 VIRTUAL_DOCUMENT_ROOT라는 새로운 환경변수를 사용한다.
만약 DOCUMENT_ROOT를 스크립트중에 사용한다면.
대신 VIRTUAL_DOCUMENT_ROOT를 이용하면된다.
마무리
아래의 내용을 편집하거나 혹은 자세한 설명이 필요하다면.
아래의 URL을 참조하기 바란다.
http://httpd.apache.org/docs/mod/mod_rewrite.html
http://httpd.apache.org/docs/misc/rewriteguide.html
그리고 디버깅이 필요하면 아래의 두줄에 주석을 풀어주면 된다.
# RewriteLog "/var/www/vhost/rewrite.log"
# RewriteLogLevel 9
경고 상당히 많은 로그가 발생하므로 디버깅 목적이 아니면...
반드시 주석처리를 해놓을 것!!
사용중 문제가 발생하거나, 의문이 생기면.. 이글에 리플을 달아주세요. :)
자세한 동작방식에 대해서는 언급하지 않았는데..
기회가 나면, mod_rewrite의 간략한 문법 소개와 함께 올리도록 하겠습니다.
<VirtualHost 192.168.0.1>
ServerAdmin <a href="mailto:foo@bar.com">foo@bar.com</a>
ServerName *
DocumentRoot /var/www/html/
DirectoryIndex index.php index.html index.htm
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
RewriteEngine On
# for Debug
# RewriteLog "/var/www/vhost/rewrite.log"
# RewriteLogLevel 9
RewriteRule ^/cgi-bin(/.*)$ /cgi-bin$1 [L,PT]
RewriteRule ^(.*) %{HTTP_HOST}$1
RewriteCond /var/www/vhost/%{HTTP_HOST} -d
RewriteRule ^(.+) /var/www/vhost/$1 [s=4,E=VIRTUAL_DOCUMENT_ROOT:/var/www/vhost/%{HTTP_HOST}/]
RewriteCond /var/www/vhost/www.%{HTTP_HOST} -d
RewriteRule ^(.*) http://www.$1 [L,R]
RewriteCond %{HTTP_HOST} !^www\..+$
RewriteCond /var/www/vhost/www.$2 -d
RewriteRule ^([^.]+.)([^/]+)(.+)$ http://www.$2$3 [L,R]
RewriteCond /var/www/vhost/$2 -d
RewriteRule ^([^.]+.)([^/]+)(.+)$ http://$2$3 [L,R]
RewriteRule ^([^/]+/)(.*) %{DOCUMENT_ROOT}$2 [s=1]
RewriteCond $1$2 ^.*[^/]$
RewriteCond $1$2 -d
RewriteRule ^(/var/www/vhost/)(.+[^/])$ http://$2/ [L,R]
RewriteCond $1$2 ^.*[^/]$
RewriteCond $1$2 -d
RewriteRule ^(/var/www/html/)(.+[^/])$ http://%{HTTP_HOST}/$2/ [L,R]
HostNameLookups off
</VirtualHost>
***********************************************************************************************
mod_rewrite의 개념...
일반 적인 아파치의 기능은
요청된 URL에 적절한 파일을 HTTP에 맞게 전송하는 것이다.
mod_rewrite는 요청된 URL에 대해
관리자가 목적에 맞게 변경하여 요청자에게 응답할 수 있는 기능을 제공한다.
인용:
예 일반적인 경우
httpd.conf :
DocumentRoot : /some/local/path/
요청 :
http://host/somedir/somefile.html
서버가 응답하는 실제 내용
/some/local/path/somedir/somefile.html
인용:
예 :Rewrite
httpd.conf :
DocumentRoot : /some/local/path/
RewriteRule ^/somedir/(.*)$ /anotherdir/$1
요청 :
http://host/somedir/somefile.html
서버가 응답하는 실제 내용
/anotherdir/somefile.html
이와 같이 실제 요청자의 웹브라우저에 표시되는 URL을 통해
서버의 예상되는 위치에 존재하는 파일을 읽어 전송하는 것이 아니라,
별도의 위치에서 전송할 수 있도록 해주는 것이다.
이런 기능외에 로드발랜싱이나 프록시와 같은 기능으로 연결하거나,
혹은 다른 URL로 redirect를 시킬 수도 있다.
기본적으로 rewrite엔진에 넘겨지는 것은 경로(path)이다.
경로라 하면... http://host:80/somedir/somefile.html 에서
/somedir/somefile.html 까지를 의미하고, 포트와 호스트네임은 포함되지 않는다.
웹서버는 이 내용을 기준으로 하여 절적한 파일을 읽어 들이게 되는데...
바로 mod_rewrite는 웹서버가 이 경로와 다른 경로를 읽어 들일 수 있도록 하는 기능을 제공하는 것이다.
몇가지 접근하는대 필요한 개념은 아래와 같다.
입력자 : 웹서버
응답대상: 웹서버
입력값 : "(상대) 경로(path)"
출력값 : "(절대)경로 혹은 요청자에게 답변하는 내용."
mod_rewrite라고 했듯이 모듈이기 때문에..
상대자는 오직 웹서버 뿐이다. 즉 입력값을 받는 것도 답변을 하는 것도
웹서버라는 것이다.
그리고... 입력값은 상대 경로이다. (당연하겠지만)즉 서버내 물리적 위치가 아니다.
하지만 응답을 하는 것은 절대경로로 응답해야 한다. 서버가 실제로 읽어 들일
물리적 위치를 지정하는 것이다.
이정도의 주의 사항을 가지고 접근하기 바란다.
RewriteRule 1
RewriteRule은 입력값을 변경해주는 유일한 키워드이며, mod_rewrite의
핵심이라고 할 수 있다.
#Syntax:
RewriteRule Pattern Substitution flags
패턴에 따라 넘겨 받은 값을 치환(Substitution)하는 것이다.
패턴과 치환에 관한 방식은 펄의 정규화 표현식과 유사하다.
php의 ereg_replace나 혹은 sed, vi의 치환 명령에 익숙하다면
쉽게 접근할 것이다.
이 것에 대한 자세한 내용은 나중에 다루고..
이번엔 이명령의 중요한 개념에 대해서 설명하고자 한다.
문법에서 보여주는 것대로 한다면,
패턴에 맞게 입력값을 나누고, 거기에 맞게 치환하는 것으로 보인다.
근데 여기에 함정이 있다.
아래의 PHP Code를 보자.
<?php
function RewriteRule($pattern, $Substitution, $flags= 0)
{
//웹서버에서 넘겨 받아 거나 이전의 RewriteRule의 결과값
global $URL;
// 정규화 표현식 실행
$tmp = ereg_replace($pattern,$Substitution,$URL);
// 결과물이 URL과 일치하면.. 즉 패턴에 일치하지 않고
//아무런 변화가 없으면 함수를 빠져나간다.
if($tmp == $URL) return ;
//정규화표현식의 실행값을 반영한다.
$URL = $tmp;
//추가적인 기능이 지정되어 있지 않으면, 함수를 종료한다.
if($flags== 0) return ;
//추가적인 기능에 L이 있으면 해당 기능을 수행한다.
if(ereg("L",$flags){
something about "L";
}
//추가적인 기능에 P가 있으면 해당 기능을 수행한다.
if(ereg("P",$flags){
something about "P";
}
.
.
.
.
}
?>
좋은 코드는 아니다.
하지만.. RewriteRule의 동작방식을 이해하는 데는 충분하다고 본다.
RewrieRule은 단순히 치환기능만이 있는 것이 아니라
Condition 즉 특정한 패턴의 검출 여부에 따라
동작을 수행 혹은 수행하지 않는
조건문을 함께 포함하고 있는 구조다.
이 점을 놓치면, rewrite를 이해하는데 매우 고생스럽다.
RewriteRule /cgi-bin(/.*)$ /cgi-bin$1 [L,PT]
먼저 설명이 안됀 플래그 L,PT가 있다..
PT에 대해서는 나중에 설명을 하고..
L에 대해서만 설명하겠다.
L이란 Last Rule의 약자로... 이 RewriteRule 뒤의 라인을 점부 무시하라는 뜻이다.
위의 내용은
요청된 URL중에 /cgi-bin이란 내용이 포함된 내용을 치환하고,
/cgi-bin$1이란 내용을 중심으로 Rewrite를 종료하라는 뜻이다.
그런데.. 요청된 내용에 /cgi-bin이란 내용이 없으면 어떻게 될까?
정답은 해당 RewriteRule은 무시가 된다.
이렇듯 단순한 치환명령이 아니라, 조건이 포함되어 있는 명령이라는 것을 명심하자.
» 댓글을 쓰실려면 로그인하거나 사용자 등록하십시오.
mudori 씀 (목, 2004/01/15 - 11:43am)
그래도 버철호스트 올인입니다.
» 댓글을 쓰실려면 로그인하거나 사용자 등록하십시오.
i09000 씀 (목, 2004/01/15 - 1:25pm)
저는 어떤 주소로 접속을 하던지 간에... 같은 페이지로 이동을 하고 싶은데요....
예> 사용자ID.도메인.com이렇게 접속을하면
php등을 이용해서 접속경로에 따라서 처리를 다르게 해줄 생각인데요....
어떻게 해야 할지........
영.... 많이 복잡한데요... 어떻게 해야 하죠??
» 댓글을 쓰실려면 로그인하거나 사용자 등록하십시오.
지리즈 씀 (화, 2004/01/20 - 11:59pm)
<VirtualHost 192.168.0.1>
ServerAdmin foo@bar.com
ServerName *
DocumentRoot /var/www/html/
</VirtualHost>
간단히 위와 같이 ServerName에 *을 사용하면 됩니다.
혹은
ServerName *.foobar.com
이런 식으로 처리하면 됩니다.
<VirtualHost 192.168.0.1>
ServerName *.bar.com
DocumentRoot /var/www/bar
</VirtualHost>
<VirtualHost 192.168.0.1>
ServerName *.foo.com
DocumentRoot /var/www/foo
</VirtualHost>
Fedora Grub 복구
컴퓨터에 원도우와 리눅스가 같이 설치 되어 있었는데
원도우를 재 설치 이후 Grub가 깨져 버렸다.
여기서 grub를 재 설치 하여 복구 하는 방법을 설명한다.
## grub 복구 작업
1. 리눅스 설치 CD 1번 삽입 후 => 부팅메뉴에서(F5) => linux rescue ; 복구모드로 부팅
2. 복구모드 설정시 네트워크설정 No -> 그다음 Continue ; 부팅시 몇가지 설정한다.
# chroot /mnt/sysimage ; 기존의 시스템으로 전환 : CD => 내시스템으로
# cd /boot/grub -> ls ; grub가 올바르게 남아있는지 확인/ grub.conf 확인
# /sbin/grub ; grub prompt를 띄움
# root (hd0,1)
; 첫번째 하드의 두번째 파티션이 /boot이므로.. , extf2 file system..확인)
# quit로 나온다.
# grub-install /dev/hda ; grub 재설치 한다.
재부팅 후 확인(부팅시 커서 위치 바꾸는것은 grub.conf 파일 찾아서 수정하면 된다.)
- SMB 란?
SMB(Server Message Block)는 윈도우 시스템이 다른 시스템의 디스크나 프린터와 같은 자원을 공유할 있도록하기 위해 마이크로소프트사와 인텔이 만든 규약입니다.
- CIFS 란?
CIFS(Common Internet File System) 는 인터넷을 위해 SMB 프로토콜의 확장 버전입니다. SMB 프로토콜에 DNS(Domain Name Service)를 이용한 확장성, 유니코드를 따르는 파일 이름 지원기능을 덧붙여, 윈도우와 유닉스/리눅스 환경을 동시에 지원하는 인터넷의 표준 파일 규약입니다.
- 삼바를 쓰는 이유는?
네트워크 환경에 윈도우 NT 서버가 있음에도 불구하고 삼바를 사용하는 이유는 무엇일까요? 단지 공짜라는 이유로 이를 설명하기에는 무리가 따릅니다. 다음과 같은 이유를 생각해 보도록 하겠습니다.
- 삼바는 기존 네트워크 환경에 물려있는 이종 운영체제를 하나로 통합해서 관리하며 사용할 수 있도록 허용한다. 윈도우 NT, 윈도우 98만이 사무실이나 연구실에서 사용하는 운영체제의 전부가 아니다. 매킨토시, 윈도우 98, 윈도우 ME, 솔라리스, 리눅스, FreeBSD, HP-UX와 같은 운영체제가 혼재할 경우 삼바가 유일한 대안이다.
- 삼바는 파일서버 뿐 아니라 인쇄 서버로서 중요한 구실을 맡는다. 오라일리에서 나온 "Network Printing"을 살펴보면 유닉스(리눅스) 서버에 프린터를 물려 놓고, 중앙 집중식으로 관리하는 방법을 소개하는데, 여기서 윈도우 기계와 통신을 삼바로 처리한다.
- 삼바는 주 도메인 관리기로 동작할 수 있다. 삼바를 사용하면 윈도우 98/ME나 윈도우 NT 워크스테이션 그룹을 묶기 위해 더 이상 윈도우 NT 서버가 필요 없다.
- 삼바를 사용하면 여러 윈도우 NT 서버를 두는 대신 강력한 유닉스 기계 하나로 대체할 수 있다.
- 삼바로 할 수 있는 일
- 한 대의 리눅스 컴퓨터에 붙은 하드디스크를 여러 명의 윈도우 사용자가 각각 고유권한을 가지면서 공유하고 싶을 때. → 삼바를 설치하고 각 개인별로 공간을 줍니다. (학교의 경우겠죠?)
- 비싼 윈도2000 서버를 들이지 않더라도 삼바가 도메인 관리 기능을 하기 때문에 사용자들을 그룹화하여 그룹 구성원이 아닌 경우 네트워크 출입을 통제할 수 있습니다. 곧, 허가되지 않은 아이디로는 윈도 네트워크 접속이 안되게 할 수 있습니다.
- 리눅스에서 윈도에 달린 프린터를 이용하고 싶을 때. 리눅스는 프린터 설정이 만만찮죠? → smbclient 패키지를 사용하여 인쇄합니다.
ㅁ 삼바 설치하기
삼바는 리눅스 설치시 전체설치를 선택하면 자동으로 설치가 됩니다. 만약 리눅스에서 삼바가 시스템에 설치되어 있는지 확인하려면 아래와 같이 해 보십시오.
# rpm -qa | grep samba
설치가 되어 있지 않았다면, 배포판 CD에서 위에 나온 samba 패키지를 설치합니다. 배포판 씨디의 Redhat/RPMS폴더에 있습니다. 설치하려면 아래와 같이 하면 됩니다.
# rpm -Uvh samba-2.0.7-36.rpm
(samba-2.0.7-36.rpm 은 패키지 버전에 따라 다를 수도 있습니다)
=윈도 NT 나 2000 과 같은 네트워크에 있다면 2.2.x 버전대의 삼바를 사용하기 바랍니다.
ㅁ 삼바 설정하기
삼바 서버를 구동하기 위해서는 먼저 네트워크 환경에 맞게 설정을 해야 합니다.
삼바의 설정파일은 /etc/samba 디렉토리 아래에 있으며, smb.conf 가 설정파일입니다.
삼바의 설정은 매우 복잡하며 환경에 따라서 다양한 설정 방법등이 존재하므로 처음부터 모든 것을 설정하기 보다는 가장 기본적인 것부터 설정해 나가는 것이 효율적입니다. 먼저, 필자가 작성한 가장 쉬운 smb.conf 를 보며 설명하겠습니다.
먼저, 기본 smb.conf 를 백업한 후 작성 합니다.
기본 smb.conf 는 나중에 좋은 참고서가 됩니다. 이글을 보신 후 꼭 살펴보시기 바랍니다.
|
[root@www /]# cd /etc/samba # mv smb.conf smb.conf.back # vi smb.conf |
[제가 설정한 smb.conf]
|
[global] workgroup = 교무 [homes] [public] [anakii] |
위 설정 파일에 대해 설명을 하도록 하겠습니다.
|
[global] server string = 삼바파일 서버 log file = /var/log/samba/%m.log security = SHARE encrypt passwords = yes client code page = 949 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 [homes] comment = 홈디렉토리 browseable = no writable = yes [public] comment = 공유폴더 path = /home/public public = yes writable = yes [anakii] comment = anakii's directory valid users = anakii public = no writable = yes |
자 이제 준비가 끝났습니다. 다음과 같은 명령어로 삼바서버를 재 시작하세요.
# /etc/rc.d/init.d/smb restart
- 삼바 서버 구성요소 설정
(1) 데몬: 삼바를 이용하기 위해서는 두 개의 데몬이 필요하다.
1) 기본 데몬
ㄱ. smbd : smb 데몬 - 파일과 프린터 공유, 사용자의 권한 부여 및 확인
ㄴ. nmbd : 클라이언트를 위해 NetBIOS nameserver를 지원하고 browsing(서비스 통지)한다.
2) 스크립트 데몬 파일: 실제 데몬을 구동하고 정지시키는 데몬으로 스타트시키면 smbd와 nmbd 데몬을 띄운다.
/etc/rc.d/init.d/smb start|stop
(2) 환경 파일: smb.conf
1) 개요: smb.conf는 삼바의 환경 설정 파일로 파일 안의 구성은 win.ini와 비슷하다. 크게 Global Settings과 Share Denitions로 나누고
다시 각 내용은 [] 기호를 이용하여 섹션(Section)으로 구분한다.
2) 역할: 삼바를 제어하는 환경 파일이다. 이 파일에서 외부와 공유시킬 시스템 자원과 어떠한 제약을 할 것인지를 지정한다.
3) 위치: 보통 /etc디렉토리에 위치하나 배포판에 따라 /etc/samba 디렉토리에 위치할 수도 있다.
4) 파일 내부의 유형
ㄱ. #으로 시작하는 행 : 이 행은 주석 처리되어 무시된다.
ㄴ. ;으로 시작하는 행 : 이 행들도 주석 행으로 간주되어 무시된다. 보통 이런 행은 설정 행이 작동하지 않도록 하는데 사용된다.
;대신에 #을 사용해도 된다.
이 두 가지 유형의 주석이 사용되는 이유는 #은 유닉스에서 사용하는 주석이고. ;는 윈도우에서 사용하는 주석이라 두 가지 모두 사용한다.
ㄷ. [ ]을 사용하는 행: 섹션을 정의한다. 하나의 섹션이 정의된 후 그 다음 섹션이 정의될 때까지의 행들은 해당 섹션에 속한다.
ㄹ. name = value 행: 사용하는 옵션과 해당 값을 설정하는 행들이다.
5) 기본적인 섹션
ㄱ. [global] : 삼바 서버의 전체적인 환경 설정을 담당하는 섹션
ㄴ. [homes] : 사용자들이 자신의 홈 디렉토리로 접근할 때의 권한을 설정하는 섹션
ㄷ. [printers]: 프린터 관련 권한을 설정하는 섹션
(3) 실행 파일
1) smbclient
ㄱ. 설명 : 유닉스를 위한 삼바 클라이언트 명령어로 윈도우의 서버로 접근하기 위해 사용한다.
ㄴ. 사용법
smbclient [option] [접속하고자 할 호스트 명]
ㄷ. option
-L : 접속하고자할 호스트 명을 입력한다.
-U : 접속할 때의 사용자 명을 입력한다.
ㄹ. 사용예
a. [root@www root]# smbclient -L system2 -U administrator
=> system2라는 호스트에 administrator라는 권한으로 접속한다.
b. [root@www root]# smbclient -L system2 -U administrator%1234
=> system2라는 호스트에 administrator라는 권한으로 접속하는데 패스워드는 1234이다.
c. [root@www root]# smbcleint \\\\system2\work -U administrator
=> system2라는 호스트의 work라는 디렉토리를 administrator권한으로 접속한다.
2) smbmount
ㄱ. 설명 : 공유된 윈도우 폴더를 유닉스에서 마운트할 때 사용하는 명령이다.
ㄴ. 사용법
smbmount "윈도우 호스트의 공유 폴더" "마운트할 디렉토리 명" [-o option]
ㄷ. option : -o를 기본적으로 적어야 하고 key=value형태로 적는다.
ㄹ. 사용예
[root@www root]# smbmount //system2/work /mnt/win -o username=administrator
=> system2의 work라는 공유폴더를 /mnt/win이라는 디렉토리로 마운트한다. 권한자는 administrator이다.
3) smbprint : 삼바 호스트의 프린터에 프린트를 하기 위한 스크립트
4) smbprint.sysv : smbprint와 같지만 System V계열 유닉스에서 사용한다.
5) smbstatus : 현재의 삼바 연결 상태를 보여준다.
6) smbrun : 삼바 호스트의 응용 프로그램 실행을 용이하게 하는 스크립트이다.
7) testparm
ㄱ. 설명 : 삼바의 환경 설정 파일인 smb.conf 파일의 설정이 제대로 되었는지 확인하는 명령이다.
ㄴ. 사용법
testparm [환경 설정 파일 경로] [IP 주소]
ㄷ. 사용예
a. [root@www root]# testparm
=> 현재 서버에서 /etc/smb/smb.conf 파일의 설정을 확인한다.
b. [root@www root]# testparm /etc/smb/smb.conf 192.168.1.3
=> 192.168.1.3의 IP 주소를 갖는 삼바 서버의 /etc/smb/smb.conf 파일의 설정을 확인한다.
8) nmblookup
ㄱ. 설명: WINS 서버에 질의할 때 사용하는 명령이다. DNS 서버에 질의하는 nslookup 명령과 유사하다.
ㄴ. 사용법
nmblookup option
ㄷ. option
-U : 서버 이름을 지정한다. 보통 -R 옵션과 같이 사용한다.
-R : 조회할 이름을 지정한다.
ㄹ. 사용예
a. [root@www root]# nmblookup samba.org -R 'IRIX#1B'
=> samba.org라는 서버에 IRIX#1B라는 이름을 조회한다.
b. [root@www root]# nmblookup \*
=> 브로드캐스트 영역에 있는 모든 이름을 조회한다.
- SAMBA의 구성요소 및 SAMBA 명령어들
- 삼바설정디렉토리 : /etc/samba
- 삼바설정파일 : /etc/samba/smb.conf
- 삼바데몬
. 삼바 주데몬 : /usr/sbin/smbd
. NetBIOS 네임서비스 데몬 : /usr/sbin/nmbd
- 삼바 실행 : /etc/rc.d/init.d/smb start
- 삼바 중지 : /etc/rc.d/init.d/smb stop
- 삼바 재시작 : /etc/rc.d/init.d/smb restart
- 삼바 사용자 등록 명령어 : smbadduser
- 삼바 클라이언트 프로그램 : smbclient
- 삼바 마운트 프로그램 : smbmnt
- 삼바 사용자 패스워드 변경 명령어 : smbpasswd
- 삼바 프린트를 위한 스크립트 : smbprint
- 삼바 운용상태를 확인하는 명령어 : smbstatus
- 삼바 설정파일 검증 명령어 : testparm
- 삼바 사용자 매칭 파일 : smbusers
- 삼바 컴퓨터정보 매칭 파일 : lmhosts
- 삼바 백업 명령어 : smbtar
- 삼바 프린트 테스트 프로그램 : testprn
@ YUM (Yellowdog Updater, Modified)을 이용한 페도라 리눅스 패키지 관리
☞ Packages
페도라 코어의 각 버전마다 네트워크 서버를 이용하여 몇 개의 저장소를 제공하고 있다. 패키지 코어에 포함되어 있는 소트트웨어 관리툴은 이미 다음 3개의 저장소 설정을 포함하고 있다.
- Base
디스크에 포함되어 있는 페도라 코어와 같은 릴리즈
- Updates
Base에서 제공되는 패키지의 최신 버전들
- Extras
추가적으로 선택할 수 있는 수많은 소프트웨어 패키지들
사용자는 패키지 그룹 개념을 사용하여 관련 패키지 묶음을 선택하여 설치하는 것이 가능하며 이런 패키지 그룹을 확인하기 위해 'yum grouplist' 명령을 수행한다. 패키지 그룹은 관련 패키지를 포함하므로 패키지 별로 선택할 경우 관련 패키지를 별도로 설치해야 하는 번거로움을 줄일 수 있다.
☞ 패키지 이름 규칙
tsclient-0.132-6.i386.rpm
- 패키지 이름 : tsclient
- 버전, 릴리즈 : tsclient-0.132-6
- 하드웨어 아키텍처 : tsclient.i386
하드웨어 아키텍처는 i386, noarch, ppc, x86_64와 같은 값을 가진다.
☞ X윈도우에서 소프트웨어 관리툴 사용하기
- 패키지 저장소로부터 새로운 소프트웨어 설치
- 개개의 패키지 파일로부터 새로운 소프트웨어 설치
yum install tsclient # 패키지 설치 yum groupinstall "MySQL Database" # 패키지 그룹 설치
- 시스템에 설치된 소프트웨어의 업데이트
yum update tsclient yum groupupdate "MySQL Database"
- 시스템에서 원치않는 소프트웨어의 제거
yum remove tsclient yum groupremove "MySQL Database"
☞ yum을 이용한 패키지 찾기
패키지 이름과 속성을 이용한 찾기
yum list tsclient # 패키지 이름 yum list tsclient-0.132 # 패키지 이름과 버전, 아키텍처등 사용
yum grouplist
yum provides 파일경로
확장된 찾기
yum search PalmPilot # 패키지 이름 일부 이용 yum provides libneon # 패키지에 포함된 파일 이름을 갖는 모든 패키지 yum provides MTA # 파일 이름이나 서비스 이름중 MTA가 포함된 모든 패키지 yum list tsc\* # 이름이 tsc로 시작하는 모든 패키지 목록
※ 참고 예제 - bash 업데이트 설치
# which bash => bash 파일이 있는 파일경로를 확인한다.
# yum provides /bin/bash => bash가 포함된 패키지를 찾는다.
# yum list bash.i386 => 패키지를 확인한다.
# yum update bash.i386 => 업데이트 항목을 찾아서 가능하면 업데이트 한다.
※ 참고 예제 - 아파치 서버 & MySQL Database 설치
# yum grouplist => 그룹패키지 목록을 찾아준다.
# yum groupinstall "MySQL Database" => MySQL 패키지 설치, 다운로드 'yes' 선택
-> list : 패키지 업데이트 가능한지 알아볼때 사용
-> provides : 해당파일이 포함된 패키지 찾아볼때 사용
=======================================================
☞ 인터넷 느릴때 테스트 순서
1. Ping 게이트웨이 테스트
2. traceroute 168.126.63.1 => 한국통신 DNS 서버로 라우팅 테스트
3. 라우트 했을때 표시되어 있는 IP 주소를 Ping 테스트
4. 사이트가 해외 어디에서 IP를 받아오는지 확인 테스트
=> 트래픽이 많이 걸린다는것은 ping 테스트의 타임오차가 심하다. 시간이 걸리더라도
전체적으로 일정한 시간으로 표시된다면 정상으로 봐도 된다.
apache는 install 버전으로 설치하고, php는 zip으로 묶인 버전을 다운로드 받아 압축을 해제해서 설치를 완료 한다. 그리고 아래의 과정대로 설정을 하면 된다.
[dll 복사]
php 설치 폴더에 있는 아래 파일들을 windows/system32 로 복사 한다.
php extension 에서 필요로 하는 파일들 이므로 전부 복사할 필요는 없습니다.
필요한 파일만 복사 하시면 됩니다.
libeay32.dll
ssleay32.dll
fdftk.dll
gds32.dll
libmcrypt.dll
libmhash.dll
msql.dll
ntwdblib.dll
libmysql.dll
[php.ini 설정]
php 설치폴더에 있는 php.ini-dist를 php.ini로 php 설치 폴더에 복사한 후 아래 내용을 수정해 준다.
extension_dir = "C:/php설치폴더/ext/" 수정
다음은 필요한 extension들을 추가해 줍니다. 기본적으로 모두 정의된 상태에서 주석처리 되어 있습니다.
필요한 부분의 주석을 해제 하는 것으로 대부분의 설정을 할수 있습니다.
예 : ) extension=php_mysql.dll
[httpd.conf]
# Virtual hosts
Include conf/custom/httpd-vhosts.conf
# PHP settings
Include conf/custom/httpd-php.conf
[custom/httpd-vhosts.conf]
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@ex.com
DocumentRoot D:/workspace/ex
ServerName www.ex.com
ErrorLog logs/www.ex.com-error_log
CustomLog logs/www.ex.com-access_log common
</VirtualHost>
<Directory "D:/workspace/ex">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
[custom/httpd-php.conf]
# For PHP 5 do something like this:
LoadModule php5_module "php5 설치 폴더/php5apache2_2.dll"
<IfModule php5_module>
AddType application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "php5 설치폴더"
DirectoryIndex index.html index.htm index.php
</IfModule>
./configure --prefix=/usr/local/httpd-2.0.59 --enable-suexec \
--enable-so --with-suexec-caller=bin \
--enable-ssl --with-ssl=/usr --enable-cache \
--enable-ext-filter --with-z=/usr/include --enable-dav \
--with-dbm=db4 --with-berkeley-db=/usr
#subversion SWIG Python Bindings
./configure --with-python=/usr/bin/python2.5 && make && make install
#subversion
cp configure configure.orig
sed -e 's/"103029"/"103031"/g' configure.orig > configure
./configure --with-zlib \
--with-apxs=/usr/local/httpd-2.0.59/bin/apxs \
--with-dbm=db4 \
--with-berkeley-db=/usr
make && make install
make swig-py && make install-swig-py
echo /usr/local/lib/svn-python > /usr/lib/python2.4/site-packages/subversion.pth
./configure --prefix=/usr/local/httpd-2.0.59 --enable-suexec \
--enable-so --with-suexec-caller=bin \
--enable-ssl --with-ssl=/usr --enable-cache \
--enable-ext-filter --with-z=/usr/include --enable-dav \
--with-dbm=db4 --with-berkeley-db=/usr
#subversion SWIG Python Bindings
./configure --with-python=/usr/bin/python2.5 && make && make install
#subversion
cp configure configure.orig
sed -e 's/"103029"/"103031"/g' configure.orig > configure
./configure --with-zlib \
--with-apxs=/usr/local/httpd-2.0.59/bin/apxs \
--with-dbm=db4 \
--with-berkeley-db=/usr
make && make install
make swig-py && make install-swig-py
echo /usr/local/lib/svn-python > /usr/lib/python2.4/site-packages/subversion.pth
1. 필요한 패키지를 다운로드 해서 설치 합니다.
apache 2.0.59
php 5.2.3 (no install version)
mysql 5.0.x
ZendOptimizer 3.2.8
2. DLL 파일 복사
php 설치 폴더에 있는 아래 파일들을 windows/system32 로 복사 한다.
php extension 에서 필요로 하는 파일들 이므로 전부 복사할 필요는 없습니다.
필요한 파일만 복사 하시면 됩니다.
libeay32.dll
ssleay32.dll
fdftk.dll
gds32.dll
libmcrypt.dll
libmhash.dll
msql.dll
ntwdblib.dll
libmysql.dll
3. 시스템 환경 변수 추가
시스템 환경변수 PATH에 php설치폴더와 php설치폴더/ext를 추가 한다.
4. php.ini 설정
php 설치폴더에 있는 php.ini-dist를 php.ini로 php 설치 폴더에 복사한 후 아래 내용을 수정해 준다.
(apache2에서만 유효 합니다. apache1.3x의 경우 windows 폴더로 복사)
extension_dir = "C:/php설치폴더/ext" 수정
extension=php_mysql.dll 주석 해제
5. httpd.conf 설정
# For PHP 5 do something like this:
LoadModule php5_module "c:/php설치폴더/php5apache2.dll"
AddType application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "C:/php설치폴더"
DirectoryIndex index.html index.html.var index.php
6. PEAR 설치
php설치 폴더에 있는 go-pear.bat를 실행 합니다.
PEAR BASE 패키지가 설치가 되면 추가로 필요한 패키지의 install은
pear.bat(또는 peardev.bat) install [패키지네임] 으로 설치 하시면 됩니다.
ex) pear.bat install DB



