« Prev : 1 : 2 : 3 :

sendmail.cf 설정

2014/05/28 09:52 / Linux/Etc
이 문서를 다른 웹이나 출판물에 게시할 때는 반드시 출처를 밝혀 주시기 바랍니다.

최종 수정일 : 2001년 8월 14일
글쓴이 : 윤 일(admin@rootman.org)
참고 서적 : Linux 네트워크 서버(출판사 : 삼각형 프레스)

HOW-TO Configuration sendmail.cf

SMTP(Simple Mail Transport Protocol)는 TCP/IP 메일 전송 프로토콜입니다. Linux 에서는 기본적으로 sendmail프로그램을
통해 SMTP를 완벽하게 지원합니다. 간혹 sendmail데몬과 pop3데몬의 역할에 대해 잘못 알고 계시는 분이 계신데 sendmail
은 메일의 발신, 수신, 중계의 역할을 합니다. 즉 sendmail데몬은 메일을 보내고 받고 하는 역할을 합니다.
pop3데몬은 sendmail이 수신한 사용자의 메일을 사용자의 메일 클라이언트에서 받아 볼 수 있는 역할을 합니다.

0. 들어가기 전에
sendmail.cf파일을 다루는 능력이 안된다고 해서 sendmail을 사용할 수 없는건 아닙니다. sendmail을 설치하면 기본적으로 설정되어 있는 sendmail.cf파일만으로도 충분히 아니 만족스러울 정도로 sendmail을 가동할 수 있습니다.
이번 강좌에서 다루는 sendmail.cf 설정들의 설명은 쉽고 자주 이용되는 설정에 대해서만 다룰려고 합니다. 하지만 이번 강좌에서 다루는 내용만으로도 sendmail을 사용하는데 아무런 지장이 없을 것입니다. 센드메일 관련 질문들을 봐도 이 범위에 벗어난 질문은 없는 것 같군요. 사실 더 이상 자세히 다룰 실력도 안되고, 워낙 sendmail의 기능이 많아서...
(800페이지 분량의 sendmail만을 다룬 책도 있습니다)
사실 sendmail.cf 파일에 대해서 공부하는것이 무척 부담스러울 것이다. 부담 되시는 분이나 처음부터 이해가 되지 않아 이 페이지를 닫으실 분들은 "1.3 Options 섹션" 부분만이라도 한번 읽어 보길 바란다.


1. sendmail.cf(sendmail 환경설정)
1.1-1 sendmail.cf의 규칙
-->>sendmail.cf의 각 행들은 다음과 같은 규칙이 적용됩니다.
1) 빈행은 무시한다.
2)
#로 시작하는 행은 주석행이다.
3)
C, D, F, H, K, M, O, P, R, S, V로 시작하는 행은 설정행이다.
4)
하나이상의 빈 공간으로 시작하는 행은 앞 행의 연장이다.

sendmail.cf 파일은 7개의 색션으로 나누어져 있는 아주 복잡한 파일이다.
아마 초보 분들은 sendmail.cf파일을 열고 그 내용의 방대함에 놀라 그냥 파일을 닫는 분도 있을 겁니다. 저도 첨에sendmail.cf 파일을 열어봤을 땐 짜증이 확 밀려 왔으니까.....
우선 간략하게 7개의 섹션들에 대해서 잠깐 살펴보고 넘어 갑니다.. 아주 간략하게.. 지금부터 바짝 긴장 하시길.. ^^;

Local Info

--->> 0이 섹션은 해당 로컬 호스트의 구성 정보를 정의합니다.
Options
--->> sendmail 환경을 정의하는 옵션을 정의 한다.
Message Precedence
--->> sendmail 메시지 순서 값을 정의 합니다.
Trusted Users
--->> 발신인의 주소를 변경할 권한을 갖는 사용자를 정의합니다.
Format of Headers
--->> 메일에 삽입도는 메일 헤더를 정의합니다.
Rewriting Rules
--->> 사용자의 메일 프로그램에 있는 e-mail 주소를 메일 배달 프로그램에 필요한 폼으로 다시 작성하는 명령이 들어 있습니다.
Mailer Definitions
--->> 메일을 배달하는데 사용되는 프로그램을 정의합니다. Mailer가 사용하는 재작성 규칙도 이 섹션에 정의되어
있습니다
.

1.1-2 sendmai.cf에서 사용되는 명령
C : 클래스 정의(문자열)
D
: 메크로 정의
E
: 환경변수 지정
F
: 클래스 정의(file, pipe)
H
: Herder 정의
K
: Key file 정의(map 정의)
M
: mailer 정의
O
: 옵션
P
: Message precedences
R
: 덮어쓰기
S
: Ruleset(새로운 규칙 시작)
T
: Truseted users(사용자 지정)
V
: 설정파일 버젼

1.2 local info 섹션

Cwlocalhost
localhost를 w클래스로 정의 한겁니다.
다음에 나오는 Fw와의 차이점은 C는 문자열을 정의하고 F는 파일을 정의합니다.

Fw/etc/mail/local-host-names
Cwlocalhost와 같이 w클래스를 정의하는데 문자열 대신 파일을 정의합니다.
즉 /etc/mail/local-host-names에 추가할 내용을 Cwlocalhost aaa.com bbb.com 으로 설정해도 같은 효과가 납니다..

FR-o /etc/mail/relay-domains
Relay를 허용할 도메인을 설정합니다.
그러나 /etc/mail/access에서 Relay 제어를 할 수 있기 때문에 이 파일은 거의 쓰기 않는 파일입니다.


DnMAILER-DAEMON
sendmail이 return 메일을 보낼 때 사용하는 사용자 이름을 정의한다.
sendmail로부터 return 메일을 받아 본 사람들은 MAILER-DAEMON의 메일을 받아본 기억이 있을 겁니다.


Kmailertable hash -o /etc/mail/mailertable
Mailer 테이블을 작성하는 파일을 정의합니다.
K 명령은 모든 정보와 내부 이름, 데이터베이스의 유형, 이 데이터베이스를 가지고 있는 파일을 정의할 때 사용한다.
K명령은 "mailertable"라는 이름의 데이터 베이스를 선언하는데 이 데이터 베이스는 표준 Unix 데이터베이스 포맷인 hash 포맷으로 되었있다는 것을 정의한다.


Kvirtuser hash -o /etc/mail/virtusertable
가상 유저 테이블을 정의하고 있다.


Kaccess hash -o /etc/mail/access
메일 수신자 데이터 베이스 파일을 정의하고 있다.

1.3 Options 섹션
아마 서버 관리자의 취향에 따라 가장 많이 수정되어 지는 부분이 Options 섹션의 설정들이 아닌가 생각된다.
모든 옵션에 대해서 설명을 하지 않았지만 특별한 경우가 아니면 이 밖의 설정들을 건드릴 일은 없을 것이라고 생각된다.

O SevenBitInput=False
7비트로 받아 들이지 않게 설정하고 있다.


O EightBitMode=pass8
8비트 데이트로 처리하게 설정하고 있다.


O AliasFile=/etc/aliases
aliases파일의 위치를 정의하고 있다.


O MaxMessageSize=1000000
메일의 최대 용량을 제한하는 옵션이다. 기본적으로 주석처리 되어 있어 무제한으로 설정되어 있다.
메일 박스 용량과는 무관한 설정이다.


O DeliveryMode=background
센드메일을 백그라운드로 작동하게 설정하고 있다.


O MaxHopCount=17
최대 메일 포워딩 수를 정의하고 있다.
큐잉 서버를 만들 때 사용되는 것으로 기본적으로 주석 처리 되어 있다.


O HelpFile=/usr/lib/sendmail.hf
help파일의 위치를 정의하고 있다.


O ForwardPath=$z/.forward.$w:$z/.forward
.forward 파일의 위치를 정의하고 있다.
$w는 호스트 이름을 가리키는 매크로 값이고 $z는 사용자 홈 디렉토리를 가리킨다.


O QueueDirectory=/var/spool/mqeue
센드메일의 큐 디렉토리의 위치를 지정한다.
큐 디렉토리는 메일 발송 실패 또는 대기 하고 있는 메일들이 임시로 저장되는 곳이다.


O Timeout.connect=1m
타임 아웃을 1분으로 설정하고 있다.


O Timeout.queuereturn=5d
Return메일이 발송될 시간을 설정하고 있다.
특정 이유로 메일이 5일동안 발송되지 않으면 메일을 보낸 사람에게 반송된다.


O Timeout.queuewarn=4h
메일이 최종 발신지까지 4시간동안 발송되지 않으면 메일을 보낸 사람에게 경고 메일을 보낸다.
sendmail.cf 파일에는 위 3가지 Timeout 설정외에 많은 Timeout 설정들이 있다.


O StatusFile=/var/log/sendmail.st
센드메일의 status 파일의 위치를 지정한다.


O DefaultUser=8:12
Mailer 의 UID와 GID를 설정한다. (UID : 8 , GID : 12)


O MinQueueAge=30m
메일을 바로 발송하지 않고 최소한 30분동안 큐잉 상태로 대기 시킨다. 기본적으로 주석 처리 되어 있다


O


1.4 Mesage Procedure 섹션
메시지 대기열에 들어가는 메시지의 우선 순위를 할당할 때 사용한다. 디폴트로 메일은 "1종 우편물"로 간주되어 0이라는 우선 순위가 할당된다. 우선 순위를 나타내는 수가 음수일 경우 메일로 보낼 에러 메시지가 만들어지지 않기 때문에 대량 메일링에는 낮은 우선 순위를가 유리하다. 아래의 우선 순위 설정들은 수정하지 말고 기본값으로 사용하길 바란다.
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100


1.5 Trusted Users 섹션
Trust된 사용자는 메일을 보낼 때 발신의의 주소를 변경할 수 있다. 단 trust된 사용자는 /etc/passwd 파일에 존재하는 사용자이어야 된다. 기본적으로 root, daemon, uucp가 설정되어 있다. 보안상 아래의 값을 변경하는 일은 없기 바란다.
Troot
Tdaemon
Tuucp


1.6 Format of Headers 섹션
메일 헤더를 정의하는 부분이다.
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
$.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.)
$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
(using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u
for $u; $|;
$.$b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>

#^L


1.7 Rewritng Rules 섹션
R$* $#error $@ 5.7.1 $: "550 Relaying denied"
이 설정은 localhost에서만 RELAY를 허용하라는 설정이다. 절대 주석 처리 되어 있으면 안된다.
만약 주석 처리 되어 있을 경우 스패머들의 놀리터가 될 수 있다.


Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
M=1000000, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u
위의 "M=1000000" 설정을 통해서 사용자가 사용할 수 있는 전체 메일 용량이 아니라 들어오는 메일 용량을 제한 할 수
있다. 기본적으로 설정이 되어 있지 않다. (단위: bytes)

==============================================================================================
출처 :
https://www.linux.co.kr/home/lecture/index.php?cateNo=6&leccode=390&secNo=65&theNo=389

2014/05/28 09:52 2014/05/28 09:52
샤이 이 작성.

당신의 의견을 작성해 주세요.

/proc 설명

2014/02/04 10:09 / Linux/Etc
/proc 내부 내용 설명

loadavg 지난 1,5,15 분간의 평균 시스템 부하
uptime 부트 이래로 총 가동 시간(초) 과 프로세스에 의해 사용된 총 시간
meminfo 메모리와 스왑의 사용 및 프리 바이트
kmsg 커널에 의해 읽혀질 커널 메시지
version 커널 또는/그리고 배포본의 버전
cpuinfo 프로세서(CPU) 파라메터
pci 현재의 PCI 슬롯 사용 정보
self/ 현재 /proc를 억세스하고 있는 프로세스 정보
net/ 네트워크 계층 설명
scsi/ 개개의 scsi 장치에 관한 정보를 갖는 파일들이 위치함.
malloc kmalloc 과 kfree 운영 정보 모니터링
kcore 커널 코어 덤프
modules 단일 적재 모듈에 관한 정보
stat 일반 리눅스 통계
devices 커널에 등록된 시스템 장치에 관한 정보
interrupts 인터럽트 할당 정보
filesystems 현재의 파일시스템 구현
ksyms 커널에의해 익스포트된 심볼
dma 사용중인 DMA 채널
ioports 현재 사용중인 입출력 포트
smp SMP가 활성화 돼 있을 경우 각 CPU 정보
cmdline 부트시에 커널에 넘겨진 파라메터
sys/ 중요한 커널과 네트워크 정보
mtab 현재 마운트된 파일 시스템
md 다중 디바이스 드라이버 정보(활성화 되었을 경우)
rc 확장 리얼타임 클럭
locks 현재 락(locked)된 파일
Numbered Directories - 숫자로 된 디렉터리는 그 PID의 실행 프로세서 정보이다.

=====================================================================================
출처:https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=linuxserver&wr_id=20850
2014/02/04 10:09 2014/02/04 10:09
샤이 이 작성.

당신의 의견을 작성해 주세요.

########################################## git 설치
cassandra-pdo 소스를 다운받기 위해서는 git이 필요하며 다음 명령어로 git을 설치 합니다.

#yum install git

centos 6 은 yum 으로 가능하지만 centos 5는 소스를 다운로드하여 설치 하여야 합니다.

http://distfiles.macports.org/git-core/

#wget http://distfiles.macports.org/git-core/git-1.8.2.2.tar.gz
#tar zxvf git-1.8.2.2.tar.gz
#cd git-1.8.2.2
#./configure
#make && make install

cassandra-pdo 프로젝트 url

http://code.google.com/a/apache-extras.org/p/cassandra-pdo/

다음 명령어로 cassandra-pdo 소스를 다운 받습니다.

#git clone https://code.google.com/a/apache-extras.org/p/cassandra-pdo/

cassandra-pdo를 설치하기 위해서는 thrift 와 boost 라이브러리가 필요하며 공식 홈페이지는 다음과 같습니다.

http://thrift.apache.org/download/

http://www.boost.org/users/download/

########################################## thrift 설치
thrift 의 경우 0.9.0 버전까지 나왔으나 cassandra-pdo 설치 중 (centos 5.8 환경) 에러가 발생하여 0.7.0 버전을 사용 하였습니다.

#wget http://archive.apache.org/dist/thrift/0.7.0/thrift-0.7.0.tar.gz
#tar zxvf thrift-0.7.0.tar.gz
#cd thrift-0.7.0
#chmod +x configure
#./configure
#make
#make install

########################################## boost 라이브러리 설치
boost 라이브러리의 경우 yum으로 설치시 필요한 라이브러리가 충족되지 않아 소스를 다운받아 설치 합니다.

#tar zxvf boost_1_53_0.tar.gz
#mv boost_1_53_0 /usr/local/boost_1_53_0
#cd /usr/local/boost_1_53_0
#./bootstrap.sh
#./b2
#ln -s /usr/local/boost_1_53_0 /usr/local/boost_1_53_0/include

########################################## cassandra-pdo 설치
이제 cassandra-pdo를 설치하며 php는 5.3.8 버전에서 테스트 하였습니다.

#cd $down_path/cassandra-pdo
#$php_path/bin/phpize
#./configure --with-php-config=$php_path/bin/php-config --with-boost-dir=/usr/local/boost_1_53_0
#make

centos 5 또는 32bit 에서는 다음과 같은 에러가 발생할 수 있습니다. (centos6 64bit 에서는 미발생)

cassandra_statement.cpp:231: error: ‘tsrm_ls’ was not declared in this scope
make: *** [cassandra_statement.lo] 오류 1

에러 발생시 cassandra_statement.cpp 파일의 (2013/05/07 ver.) 231 라인에 다음과 같이 TSRMLS_FETCH(); 을 추가하여야 합니다.
========================================================================
static long pdo_cassandra_marshal_numeric(pdo_stmt_t *stmt, const std::string &binary)
{
    if (sizeof(long) < binary.size()) {
        TSRMLS_FETCH();
        pdo_cassandra_error(stmt->dbh, PDO_CASSANDRA_INTEGER_CONVERSION_ERROR, "The value is too large for integer datatype", "");
        return LONG_MAX;
    }

    const unsigned char *bytes = reinterpret_cast <const unsigned char *>(binary.c_str());

    long val = 0;
    size_t siz = binary.size ();
    for (size_t i = 0; i < siz; i++)
        val = val << 8 | bytes[i];

    return val;
}
========================================================================
make 후 생성되는 modules/pdf_cassandra.so 파일을 php extension 디렉토리에 복사하여 php.ini에 등록한 후 아파치를 재가동 하면 됩니다.

php 모듈 추가 관련은 다음 url 참고
http://www.worldwalker.co.kr/entry/php-재설치-없이-확장모듈-추가하는-방법

2013/05/07 10:47 2013/05/07 10:47
샤이 이 작성.

당신의 의견을 작성해 주세요.

카산드라 (ver:1.2.4)

centos 5.9 에서 테스트 하였으며 6.3 에서는 에러가 발생.. 일단 6.3은 패스

카산드라 다운로드

http://cassandra.apache.org/download/

바이너리 파일을 받아 압축해제로 바로 사용할 수 있으며 소스 파일을 사용할시 apache-ant로 컴파일 하여야 합니다.

java 1.6.0_19 이상을 설치하여야 하며 1.7은 추천하지 않는다고 합니다.

java 설치시 소스파일을 다운받아서 설치하고 컴파일 해도 되며 여기서는 간단하게 yum 으로..

#yum install java-1.6.0-openjdk-1.6.0.0-1.28.1.10.10.el5_8

다운받은 카산드라 바이너리 파일을 압축해제

#tar zxvf apache-cassandra-1.2.4-bin.tar.gz

환경 설정 파일은 $cassandra_path/conf/cassandra.yaml

로그 및 데이터 파일은 기본으로 /var/log/cassandra, /var/lib/cassandra 하위로 설정 되어 있으니 적절히 수정하여 사용하면 되며

외부 클라이언트에서 사용하기 위해서는 환경 설정파일의 rpc_address: localhost 를 rpc_address: 0.0.0.0 으로 변경 합니다.

실행방법은

#$cassandra_path/bin/cassandra -f

그냥 실행하면 segmentation fault 가 발생하며 $cassandra_path/conf/cassandra-env.sh 파일의 다음 라인을 수정 합니다. (1.2.4 의경우 193 라인)

JVM_OPTS="$JVM_OPTS -Xss180k"  =>  JVM_OPTS="$JVM_OPTS -Xss280k"

수정후 재가동 하면 9160 포트가 오픈되며 실행이 되며 접속 확인은 다음과 같이 가능 합니다.

#$cassandra_path/bin/cassandra-cli
Connected to: "Test Cluster" on 127.0.0.1/9160
Welcome to Cassandra CLI version 1.2.4

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown]

외부 서버로의 접속은 cassandra-cli -host IP

2013/05/06 17:43 2013/05/06 17:43
샤이 이 작성.

당신의 의견을 작성해 주세요.

/var/spool/clientmqueue 디렉토리에 파일 쌓이는 현상

/var/spool/clientmqueue 에는 sendmail 에서 보낸 메일의 목적지가 불붕명 할 경우 메일이 임시저장
되었다가 목적지가 확인이 되면 mqueue로 보내서 메일을 발송한다고 함.

sendmail을 사용하지 않을 경우에는 logwatch에서 로그를 메일로 발송하기 때문에 발생함.
그중에서 logwatch의 메일발송 기능을 없애러면

/etc/mail/submit.cf
----------------------------------------------
# queue directory
O QueueDirectory=/var/spool/clientmqueue <- 요부분 주석처리
----------------------------------------------

그리고

/var/spool/clientmqueue 폴더 안에 들어가서 ll 하면 다운먹으니까
리스트 보지말고 바로

# ls | xargs rm -f
쳐주면 삭제됨! 시간이 좀 걸림!

기타 다른 방법으로는~

/etc/crontab 에서
----------------------------------------------
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
----------------------------------------------
MAILTO=root에 있는 root를 제거
========================================================================
출처: http://supermono.tistory.com/75

2013/04/10 17:32 2013/04/10 17:32
샤이 이 작성.

당신의 의견을 작성해 주세요.

RewriteRule 설정

2013/04/05 14:40 / Linux/Etc


.htaccess의 예


php_flag register_globals on
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www)\.domain\.co\.kr$ [NC]
RewriteRule (.*) http://www.domain.co.kr/$1 [R=301,L]
ErrorDocument 401 http://www.domain.co.kr/401error.html


간단하게 요정도?
난 RewriteCond와 RewriteRule에 대해서만 언급해보려한다.
RewriteEngine On은 Rewrite모듈의 사용을 위해 기본적으로 On으로 설정해두는것이 좋다.
RewriteBase는 기본적으로 .htaccess가 위치안 물리적 경로로 설정하지만 Rewrite의 쓰임이 너무 광범위하기에 다르게 쓰이는 경우도 많다.
그 외에 RewriteOptions, RewriteLog, RewriteLogLevel, RewriteLock, RewriteMap등은 심화과정이므로 취급하지 않습니다 ^^;;

이 글은 완벽하지 않다. 잘쓴 글도 아니고 잘 되어있는 글도 아니다.
하지만 당신이 컴퓨터에 대한 열정이 있고 그만큼의 노력이 있었으며 독학에 재능이 있다면 이정도의 글로도 만족할것이라 믿는다. (쓸데없는 잡담이 너무 많은거 뺴고... ㅡㅡ;;)

이제 본론으로 고고-


Rewrite모듈은 URL Rewrite 엔진일까?

RewriteCond와 RewriteRule의 기본 형태
RewriteCond와 RewriteRule의 기본 형태는 이렇다.

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution

RewriteCond는 RewriteRule을 위해 존재하기도 하지만 RewriteRule은 RewriteCond를 위해 존재하기도 한다.
하지만 순서는 거의 대부분 Cond후에 Rule이 온다.
Cond는 생략하고 Rule만 있는경우도 많다.
기본형태는 이러하지만 RewriteCond만 있을수도 있고 RewriteRule만 있을수도 있으며 둘다 여러개일수도 있고 둘중 하나만 여러개일수도 있다. 순서도 맘대로라서 엄청나게 다양한 수법이 가능하다 ㅋ

처리 경로(흐름)
제일 먼저 Rule의 Pattern에 어긋나지 않는다면 Cond의 TestString으로 가서 조건검사를 시작한다. 그후 CondPattern을 지나 Substitution으로 처리되어 조건에 만족하게 된다.

다음을 보자

...
RewriteRule Pattern Substitution

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution

RewriteRule Pattern Substitution
...

위의 경우 Cond와 Rule이 막 써있다 ㅋ 두개 이상의 Rule이 있을경우 위 Rule이 처리, 적용된 결과가 다시 두번째 Rule에 적용된다. 또 아래 Rule이 있다면 그 결과가 다시 검사될것이다.
혹은. 위의 조건에 맞지 않는 값이라면 다음 Rule로 넘긴다.


이하부터는 패턴, 대용(대체), 조건패턴등의 한글화를 섞어 쓰겠다.
Cond는 조건의 약자이고 Rule은 그대로 규칙, 법이다.

특수 문자
프 로그래밍을 하면서 그 프로그램 내부 코드나 명령어로 쓰이고 있어서 쓰지 못하는 문자가 많다. 여기서도 마찬가지이다. 하지만 어디서나 존재하는 Escape문자 있으니 여기서는 "\"(역슬래쉬(원))표시가 쓰인다. 보통 .이 잘못쓰일것을 대비하여 \.로 쓰는게 보통이다.
예 : domain.co.kr ==> domain\.co\.kr
주로 점.이나 대괄호[], 괄호()등에 쓰인다.

RewriteCond
RewriteCond의 기본 구문은 이미 위에서도 나왔다.
그곳 Test스트링부분에 $N이나 %N이 쓰인다면 역참조 기능을 제공하게된다.
여기서 N은 (1<=N<=9)이다.
$N의 경우 현재 처리되고있는 Rule에서 가르키고 있는 패턴이 그룹으로 묶여 제공된다.
$N을 하나의 변수처럼 사용할수 있게되는것이다.
아래도 나와있지만 괄호로 그룹을 묶은 부분이 변수로 사용된다.

RewriteCond %{HTTP_HOST} ^[^.]+\.domain\.co\.kr$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.domain\.co\.kr(.*) /home/$1/htdocs$2

위 예제의 경우 도메인 앞의 URI를 $1로 그 뒤 경로를 $2로 지정하여 특정 디렉토리의 내용을 읽도록 하는 내용이다.
이것을 짧게 한줄로 고쳐보자면

RewriteRule ^([^.]+)\.domain\.co\.kr(.*) /home/$1/htdocs$2

요정도?

%N은 현재 처리중인 Cond에서 가르키고있는 조건과 일치한 패턴이 그룹으로 묶여 제공된다.
이건 잘 안쓰이는것같아서 정말 잘쓰이는 다음으로 패쓰~

%{Name}의 경우 해당 서버의 변수를 가지고 올수있다.
변수의 개수는 정말 엄청나게 많다. 하지만 자주 쓰이는 변수들은 아래를 통해서 한번 확인해보세요 ^^

Server Name : domain.com
Protocol : HTTP/1.1
Server Port : 80
Method : GET
Servlet Path : /index.php
Remote Host : 192.168.0.4
Remote Port : -1
Remote Address : 192.168.0.4
Content Length : 0
Header_Accept : text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Header_User-Agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Header_Referer : null
Local Name : domain.com
Local Port : 80
Locale : ko_KR
Scheme : http
Request URI : /index.php

Request URL : http://domain.com/index.php


CondPattern
CondPattern에서 쓰이는 내부 명령어? 특수명령어?등을 알아보도록하자

-d => 디렉토리를 뜻한다.
결론적으로 Test스트링이 디렉토리를 가리키거나 포함하고 있을때 처리된다.
-f => 파일을 뜻한다.
Test스트링이 파일을 가리키거나 포함하고 있을때 처리된다.
-l => 심볼릭링크를 뜻한다.
Test스트링이 심볼릭링크를 가리키거나 포함하고 있을때 처리된다.
심볼릭 링크가 뭐냐고 물으신다면 리눅스나 유닉스를 공부해보세요 ^^ 라고 답하고 싶다^^

그리고 느낌표(!)는 부정을 뜻한다.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://test.domain.co.kr/$1

위의 예제는 Request내용이 디렉토리나 파일을 가르키고 있지 않을경우 저쪽 사이트로 돌리라는 뜻. ^^
$1로 하위주소는 유지하려하고 있습니다 ^^

[Flag]
라인마다 Flag라 불리우는 깃발을 달수가 있습니다. 일종의 옵션으로 작용합니다 ^^

F => 403에러 Forbidden페이지로 된다.
L => Last라는 뜻입니다. 위의 Cond들은 여기까지만 적용된다
아래부터는 새로 시작 되겠지용~
N => 새로운 Rule이 시작된다는 깃발.
QSA => Cond의 대용을 지난 결과에 덧붙인다.
NE => Out될 값에 특수문자가 HexCode로 되어 포함되어있는경우
R => 리다이렉션. 무조건 넘긴다. 뒤 주소로 넘긴다는 뜻이지요 ^^
NC => 대소문자 구별없다는 뜻.
OR => 프로그래밍의 or와 비슷하다.


아래를 참고하시죠 ^^

RewriteCond %{REMOTE_HOST} ^domain.* [OR]
RewriteCond %{REMOTE_HOST} ^DOMAIN.* [OR]
RewriteCond %{REMOTE_HOST} ^DOMAIN2.* [NC]
RewriteRule ^(.*)$ http://www.domain.co.kr/$1 [R,L]

domain나 DOMAIN나 DOMAIN2나 domain2로부터 접속한 접속에 대하여 리다이렉트한다. http://www.domain.co.kr/로 접속하게된다. 보통 IP주소를 적게되겠다.

RewriteRule
여기부터는 아주 간단간단하게... ㅡㅡ;

텍스트

. => ?과 같습니다. 무엇이든 하나의 문자를 뜻합니다. A가 될수도 있고 Z가 될수 있다. 반드시 한글자.
[A] => 역시 하나의 문자가 올수 있다는 뜻. ex) a[eo]t => aot 혹은 aet
[^A] => 문자는 올수 없다는 뜻~ A부터 Z까지~



? => 0개 또는 1개의 텍스트.
* => 0개 또는 1개 이상의 텍스트.
+ => 1개 이상의 텍스트. 0은 될수 없다.



그룹

(텍스트) => 위의 텍스트에 속한 세가지를 조합하여 쓸수 있다
예로 (..)는 두글자라는 거지요 ^^
몇번째 그룹이냐에 따라서 위에 설명한 $N의 변수로 불러 쓸수있니다.



Anchors

^ => 줄의 시작을 나타낸다 ex) ^a => a로 시작
$ => 줄의 끝을 말한다. ㄷㅌ) a$ => a로 끝
==========================================================================
출처 : http://mycastor.tistory.com/77
2013/04/05 14:40 2013/04/05 14:40
샤이 이 작성.

당신의 의견을 작성해 주세요.

RRD tool 사용 중 서버 이전이나 복구 시 다음과 같은 에러 메세지가 발생하며 동작이 안될 시
(ex: cacti 모니터링 툴)

ERROR: This RRD was created on another architecture

rrd 파일의 경우 32bit 와 64bit가 호환되지 않아 그냥 사용할 수 없습니다.

원본 rrd 파일이 있는 곳에서 rrdtool 로 xml 로 생성한 후 xml 파일을 사용할 시스템에서 rrd 파일로 복원
해서 사용하실 수 있습니다.

ex)
rrd 파일이 있는 디렉토리 상위에 특정 디렉토리를 생성한 후 (여기서는 ../rrd 로 생성)

다음과 같이 입력하여 현재 디렉토리의 *.rrd 파일을 ../rrd/*.xml 파일로 덤프

# for i in ./*.rrd;do rrdtool dump $i ../rrd/$i.xml;done

사용 할 시스템에 생성한 *.xml을 모두 복사 한 후 리스토어 (여기서는 ../rra 로 리스토어)

# for i in ./*.xml;do rrdtool restore "$i" "../rra/${i%.xml}";done

생성된 rrd 파일의 소유권한을 rrd 파일을 사용하는 데몬의 유저로 변환하는 것도 잊지 말아야 합니다.

#
chown cacti.cactiuser *.rrd

2013/01/29 18:08 2013/01/29 18:08
샤이 이 작성.

당신의 의견을 작성해 주세요.

리눅스와 윈도우가 인식하는 \n(개행문자)에는 차이가 있다.

윈도우는 엔터키를 눌러 개행문자입력할 경우 해당 개행문자는 Carriage Return(CR)과 Line Feed(LF)가 함께 들어가게 된다. 즉, CR과 LF가 함께 들어가야만 하나의 라인이 끝난것으로 인식을 하는것이다.

하지만 리눅스는 Carriage Return(CR) 하나만으로 윈도우의 CR+LF기능을 함께 처리 한다.
따라서 윈도우에서 작성한 텍스트 파일 또는 소스파일을 그대로 Linux 시스템에 올리게 되면 해당 파일이 정상적인 작동을 하지 않는 경우가 발생 할 수 있는 것이다.

이는 윈도우에서 작성할때 입력된 CR은 VI에서 인식이 되나 LF가 인식이 되지 않기 때문이며, LF코드값을 삭제해 주면 정상적인 사용이 가능하다.

LF 코드값은 리눅스에서는 Vi 라는 에디터 프로그램을 이용하여 간단히 수정할 수 있다.

Vi에서 해당 파일을 오픈할때 그냥 오픈할 경우 LF값이 보이지 않으므로 바이너리(Binary)로 열어 코드값을 치환한다.


Ex ) vi -b 파일명


이걸 몰라 삽질을 20분!!! ㅜ_ㅜ 완전 안습쓰나미다... ㅜ_ ㅜ


PS. vi -b 파일명으로 열었을때 ^M 문자가 보이는 경우 정상적으로 스크립트가 실행되지 않을때가 있습니다. 이럴땐 ^M 문자를 없애야 하는데 이걸 어떻게 없애야 할지 걱정스러울 때가 있을 것 입니다. (아시는 분은 패에에에스~ ~)

vi에서 제일 아래 행으로 내리세요 (Shift + G)
: 를 누르셔서 실행창을 띄우신 후 아래와 같이 입력 하시면 됩니다.

: 1, s/^M//g
여기서 ^M을 입력하는 방법은 Ctrl키를 누르신 상태에서 V와 M을 순서대로 누르시면 입력이 가능 합니다.

vi 편집기에서(바이너리 모드가 아닌 일반모드) 다음 명령어로 각 os 개행문자를 수정할 수 있습니다.

:set ff=dos
:set ff=unix

=======================================================================
출처:http://blog.lovetonight.net
추가:샤이
2011/07/06 10:56 2011/07/06 10:56
샤이 이 작성.

당신의 의견을 작성해 주세요.

zend 3.3.9 설치 방법

2010/04/29 16:55 / Linux/Etc

Zend 3.3.9 설치 방법


Zend 3.3.9 압축 해제 후 data 디렉토리 하위의 해당 버전 디렉토리 안에 있는 ZendOptimizer.so 파일을
/usr/local/php/lib 등에 복사한 후 php.ini 파일에 다음 라인 추가 후 아파치 재가동


zend_optimizer.version=3.3.9
zend_extension=/usr/local/php/lib/ZendOptimizer.so

2010/04/29 16:55 2010/04/29 16:55
샤이 이 작성.

당신의 의견을 작성해 주세요.

출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=74863319&qb=ZHNuPTQuMC4wLCBzdGF0PURlZmVycmVk&enc=utf8&section=kin&rank=1&sort=0&spq=0&pid=fImrqloi5Tlssb7vS84sss--453176&sid=@6PVShQ1o0sAAFlqmXIAAAA9
============================================================================

Aug 12 11:43:24 SMEV_V2 sendmail[6946]: n7C2Qh8V002849: to=<aaa@mycompany.com>, delay=00:16:41, xdelay=00:00:00, mailer=esmtp, pri=210473, relay=mailrelay.mycompany.com., dsn=4.0.0, stat=Deferred: Connection timed out with mailrelay.mycompany.com.

Deferred 란 말은 일시적 실패를 말합니다.
이 메시지는 큐에 저장되고 이후에 암암리에 다시 전송 시도될 것입니다.

Aug 12 11:43:24 SMEV_V2 sendmail[6946]: n7C2Qh8V002849: to=<aaa@mycompany.com>, delay=00:16:41, xdelay=00:00:00, mailer=esmtp, pri=210473, relay=mailrelay.mycompany.com., dsn=4.0.0, stat=Deferred: Connection timed out with mailrelay.mycompany.com.

mailrelay.mycompany.com 이 접속이 안되는 모양입니다.
네트워크 구성의 문제일 가능성이 높습니다.
아니면 mailrelay.mycompany.com 에 방화벽이 있다던가요.

그냥 커맨드라인에서 ping 같은 것으로 올바르게 서버 ip주소를 찾는지
테스트를 해보시기 바랍니다.

그담에는 텔넷으로 mailrelay.mycompany.com에 접속해서 메일이 올바르게 전송되는지 확인해봅니다.
이거는 sendmail이 하는 일을 그대로 흉내내는 겁니다.

$ telnet mailrelay.mycompany.com 25
Trying 1.2.3.4...        # 이건 mailrelay.mycompany.com의 주소가 나오겠죠
Connected to mailrelay.mycompany.com (1.2.3.4).
Escape character is '^]'.
220 mailrelay.mycompany.com ESMTP Sendmail 8.13.1/8.13.1; Thu, 13 Aug 2009 07:40:26 +0900
HELO myserver.merong.com # 지금 접속하는 서버의 이름을 알려줍니다.
250 pareto01.ideapool.kr Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <aaa@mycompany.com>      # 발송자 주소입니다.
250 2.1.0 <aaa@mycompany.com>... Sender ok
RCPT TO: <bbb@mycompany.com>         # 수신자 주소입니다.
250 2.1.5 <bbb@mycompany.com>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
From: AAA <aaa@mycompany.com>
To: BBB <bbb@mycompany.com>
Subject: This is a test message #1

Hi, there.
.
250 2.0.0 n7CMeQUe005955 Message accepted for delivery
QUIT
221 2.0.0 mailrelay.mycompany.com closing connection
Connection closed by foreign host.
$
   
첫번째 라인과 같이 숫자로 시작하는 행은 서버가 응답한 것입니다.
파란 배경으로 된 글자는 직접 입력해야 하는 내용입니다.

Subject: 같은 헤더 라인과 본문 사이에는 빈 줄이 하나 들어가야 합니다.
본문이 끝나면 '.'을 입력해서 본문이 끝났다고 알려줘야 합니다.
(본문의 끝을 의미하는 기호는 <엔터>.<엔터>입니다.)

마지막에 message accepted 란 말이 메일이 제대로 발송 되었다는 말입니다.

이 테스트로 mailrelay.mycompany.com 가 발송하는 서버에 대해서
차단을 했는지 등등을 알아 볼 수 있습니다.

메일 서버는 접속 서버의 이름, 발송자 주소와 수신자 주소를
보고 차단할건지 말건지 결정하는 경우도 있으므로
서버이름 발송자 주소와 수신자 주소는 적절하게 바꿔가면서
테스트 해보셔야 합니다.

메일 서버 설정에 따라서는 일정시간 동안 입력을 안하면
서버측에서 접속을 끊어버리므로 미리 입력할 내용을 쳐놨다가 붙여 넣으시면 좋습니다.

대부분의 경우 메일을 여러차례 보내게 되므로 제목을 계속 바꿔주는게 좋습니다.
이게 메일이라는게 완벽한 실시간 응답이 아니므로
어떤 설정에서 발송한 메일이 제대로 도착했는지 나중에 구분이 쉬워집니다.
위 예에서는 #1 같이 번호를 붙여서 구분하도록 했습니다.

2010/03/23 16:45 2010/03/23 16:45
샤이 이 작성.

당신의 의견을 작성해 주세요.

« Prev : 1 : 2 : 3 :