Sphinx 검색엔진은 엘라스틱 서치와 같은 널리 알려진 검색엔진이 아니라서 

정리된 문서가 많지는 않다.

특히 PostgresSQL과 연동하는 한글 문서는 거의 없어서 간략하게 정리해보고자한다.


먼저 Sphinx 검색엔진을 이야기하자면 미리 최적화하여 데이터를 인덱싱해두어 빠른 순간검색을 자랑하기에

자동완성과 같은 부분에서 활용 할 수 있다.


여기서의 환경은 AWS RDS-PostgresSQL 를 이용하여 연동하는 방법이다.

PostgreSQL의 경우에는 익숙치 않기에 RDS를 활용하면 UI로 간단히 Managed 할 수 있어서 편하다.

(Free-Tier로 사용가능하다)


#서버 환경 

EC2- Ubuntu 기반 Sphinx

RDS - postgresSQL  


#설치 (EC2 -ubuntu)

// 컴파일 라이브러리 설치

$ sudo apt-get install build essential 


// Sphinx 설치

$ sudo apt-get install sphinxsearch


// PostgreSQL용 Sphinx 확장 모듈 설치

=> https://github.com/andy128k/pg-sphinx

$ git clone https://github.com/andy128k/pg-sphinx


; installation 대로 하면 필요한 라이브러리가 없어서 make시 오류를 뱉는다. 라이브러리를 설치하자

$ sudo apt-get install libpq-dev python-dev

$ sudo apt-get install postgresql-server-dev-all

// 필요한 라이브러리를 다 설치했다고 생각했지만 Make시  뜬금없이 mysql.h 파일을 찾을 없다는 오류를 뱉는다

// sphinx.c:4:19: fatal error: mysql.h: No such file or directory

// mysql client 라이브러리도 설치하자

$  sudo apt-get install libmysqlclient-dev


//이제 make가 될것이다.

$ make
$ make install


rpm --import http://repo.webtatic.com/yum/RPM-GPG-KEY-webtatic-andy 

cd /etc/yum.repos.d/ 

wget http://repo.webtatic.com/yum/webtatic.repo

yum remove -y php php-cli php-common php-devel php-gd php-ldap php-mbstring php-mcrypt php-mysql php-pdo php-xml php php-cli php-common php-gd php-ldap php-mysql php-pdo php-pear php-pear-DB php-pgsql

yum --enablerepo=webtatic --exclude=php*5.4* install -y php php-cli php-common php-devel php-gd php-ldap php-mbstring php-mcrypt php-mysql php-pdo php-xml php php-cli php-common php-gd php-ldap php-mysql php-pdo php-pear php-pear-DB php-pgsql

# su -

# useradd username

# passwd username

(삭제시 userdel -rf username)

# su 사용자계정

# cd;mkdir public_html;chmod 701 public_html;cd ..

# chomod 701 계정명

------------------------------

디비 생성

# mysql -u root -p

mysql >    create database dbname;

mysql >  grant all privileges on dbname.* to 'username'@'localhost' identified by 'password' with grant option;


flush privileges;

(권한부여)


---------------------------

가상호스트

#  vi /etc/httpd/conf/httpd.conf

(Cent OS의 경우)

<VirtualHost *:80>
ServerAdmin moon@moon.com(담장자이메일)
DocumentRoot "/home/moon/www"(계정디렉터리)
ServerName moon.com(도메인주소)
ServerAlias www.moon.com (추가도메인주소)
< /VirtualHost>

추가

아파치 재시작


# vi /etc/httpd/conf/httpd.conf

(Cent OS의 경우)

맨하단에


<virtualhost *:80>
    ServerName domain.com
    ServerAlias *.domain.com
    DocumentRoot "/home/root/public_html"
    RewriteEngine on
    RewriteCond  %{HTTP_HOST}      ^[^.]+\.domain\.com$
    RewriteRule  ^(.+)            %{HTTP_HOST}$1 [C]
    RewriteRule  ^([^.]+)\.domain\.com(.*) /home/$1/public_html/$2
</virtualhost>


예를 들어 aaa.domain.com이라면
$1은 aaa
$2는 index.html이나 index.php

httpd.conf는 순차적으로 읽어오기때문에 가장 하단에 추가해야된다.

htaccess 파일을 만들어주고 그안에다가 아래내용을 만들면된다. 

리눅스로 옮긴 뒤로 .htaccess  점을 붙여준다. 숨김속성입니다. 

-------------------첫번째방법------------------------------------- 
SetEnvIFNoCase Referer "도메인" pass 
SetEnvIFNoCase Referer "google.com" pass 
SetEnvIFNoCase Referer "^$" pass 
<FilesMatch ".(jpg|gif|png|exe)$"> 
Order deny,allow 
deny from all 
allow from env=pass 
</FilesMatch> 

-------------------------두번째방법---------------------------------- 

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?도메인 [NC] 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC] 
RewriteRule \.(jpg|JPG|gif|GIF)$ - [NC,F,L] 


-------------------------세번째방법--------------------------------------- 

  SetEnvIf Referer 도메인 go_in 
  SetEnvIf Referer 도메인 go_in 
  SetEnvIf Referer 다른도메인 go_in 
  SetEnvIf Referer ^$ go_in 

  Order Deny,Allow 
  Allow from env=go_in 
  Deny from all

vi /etc/resolv.conf 


nameserver 168.126.63.1  //첫줄은 자신의 서버 IP
nameserver 168.126.63.2 

# rpm -qa | grep bind

bind-libs-9.3.3-10.el5
bind-9.3.3-10.el5
ypbind-1.19-8.el5
bind-utils-9.3.3-10.el5
bind-chroot-9.3.3-10.el5


=======================================================================================

- CentOS 5.1 설치시 패키지선택에서 DNS 이름서버를 선택하면 위의 내용이 모두 설치됨.
=======================================================================================


네임서버도 설치되어 있나 확인해 보자.

# rpm -qa | grep name
없다...젠장.... 설치해야 한다 ㅠㅠ


# yum install caching-nameserver

( 위에 걸로 설치가 안되면 caching-nameserver-9.3.3-10.el5 다 입력해준다. )

이젠 서버에선 DNS를 설정할 준비가 끝났다.


이해를 돕기위해 사용되는 예제에서 test.net 이란 가상의 도메인과 192.168.1.100 이란 공인IP를 사용하것으로 하겠다.

자신의 도메인과 IP 주소로 바꿔 사용하기 바란다.


1.서버에서 도메인을 제일 먼저 찾는 곳

# vi /etc/hosts
=======================================================================================
127.0.0.1        test.net      localhost
192.168.1.100  ns.test.net  ns
=======================================================================================
위와 같이 바꾸도록 하자


2.서버에서 쓸 dns

# vi /etc/resolv.conf
=======================================================================================
domain test.net
search test.net
nameserver 192.168.1.100
nameserver 168.126.63.1
nameserver 168.126.63.2
=======================================================================================


3.도메인에 대하 ip를 찾을 때 참조할 순서
# vi /etc/host.conf
=======================================================================================
order hosts,bind

==> 초기 설치시 이렇게 되어 있으며, 의미는 /etc/hosts파일부터 찾고, bind에서 찾는다는의미

=======================================================================================


4.Zone 파일 및 케시 DNS서버에 대한 설정

# cd /etc

# ls named*
named.caching-nameserver.conf  named.rfc1912.zones


위 파일 내용들은 caching-nameserver에서 기본적으로 생성되는 것들이다.



# vi /etc/named.caching-nameserver.conf
=======================================================================================
options {
        listen-on port 53 { 127.0.0.1; };

        listen-on port 53 { 111.222.333.444; }; // local machine IP
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;
        query-source-v6 port 53;
        allow-query     { any; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        //match-clients            { localhost; };
        //match-destinations { localhost; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};

=======================================================================================
( 더 자세한 것은 책이나 인터넷을 더 검색해 보기 바란다.... ㅡ.ㅡ )

( 동작하면 되지 않는가 ㅜㅜ )


# vi named.rfc1912.zones

=======================================================================================
zone "." IN {
        type hint;
        file "named.ca";
};
// localhost 에 대한 설정
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };  //다이나믹 하게 업데이트를 허용할것인지 설정한다. 대부분 none
};
// 127.0.0.X 에 대한 역 도메인
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
=======================================================================================


named.rfc1912.zones 파일의 맨 아랫 줄에 아래의 내용을 추가한다.

=======================================================================================
zone "test.net" IN { 
type master; 
file "test.net.zone"; 
allow-update { none; }; 
};

zone "1.168.192.in-addr.arpa" { //reverse domain - IP가 역으로 입력되어 있는 것에 주목~!!
type master; 
file "test.net.rev";
allow-update { none; };
}; 
=======================================================================================


zone 파일명은 test.net.zone으로 하였다.

위에서 추가한 도메인에 대한 zone 파일을 만들도록 하자..


# vi /var/named/chroot/var/named/test.net.zone
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2007112101 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                IN      NS      ns.test.net.
                IN      MX  10   mail.test.net.
                    IN      A       192.168.1.100
www            IN      A       192.168.1.100

mail              IN      A       192.168.1.100
*                  IN      A       192.168.1.100
=======================================================================================
# ln -s /var/named/chroot/var/named/test.net.zone /var/named/test.net.zone

(반드시 심볼릭 링크를 걸어야 한다~~!!! <-- 사실 테스트 안해봤다... )


# vi /var/named/chroot/var/named/test.net.rev
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2007122101 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                 IN      NS      ns.test.net.
100             IN      PTR     ns.test.net.
100             IN      PTR     www.test.net.
100             IN      PTR     test.net.
=======================================================================================
위에서 100이란 숫자는 IP의 제일 마지막에 해당하는 숫자이다.

# ln -s /var/named/chroot/var/named/test.net.rev /var/named/test.net.rev


도메인 네임.zero 파일도 꼭 생성// !


자.. 이제 모든 설정은 끝났다.. 사실 이제부턴 네임서버를 변경한 후 하루정도가 지나야 확실한 결과를 얻을 수 있다.

네임서버 변경은 도메인 등록 회사 서비스에 접속 후 변경하면 된다.

또한 방화벽을 설치했다면 외부에서 네임서버로 접근할 수 없으니 주의한다.

네임서버의 포트는 42로 방화벽에서 이 포트를 풀어야 한다.


설치와 설정이 끝났다면, DNS 서버를 시작하도록 한다.

(1) 시작
# /etc/rc.d/init.d/named start


(2) 재시작
# /etc/rc.d/init.d/named reload


(3) 정지
# /etc/rc.d/init.d/named stop


(4) 서버시작시 자동으로 실행

/etc/rc.d/rc3.d 와 /etc/rc.d/rc5.d 에 K로 시작하는 것이 있으면 다음과 같이 해준다.

# mv /etc/rc.d/rc3.d/K번호named /etc/rc.d/rc3.d/S번호named

# mv /etc/rc.d/rc5.d/K번호named /etc/rc.d/rc5.d/S번호named


(5) 호스트 네임 검사
# grep named /var/log/messages


(6) 설정한 도메인 확인하기

# nslookup

> server 168.126.63.1

> set type=any

> test.net


[ 다음은 iptables 사용시 추가할 부분이다 ]

------------------------------------------------------------------------------------------

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
# -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --sport 1024:65535 -j ACCEPT     #상황봐서
# -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --sport 1024:65535 -j ACCEPT   #상황봐서

------------------------------------------------------------------------------------------


[출처] [CentOS] DNS 네임서버 설정 (BIND 9)|작성자 내지팡이

./configure \
--prefix=/usr/local/php5.3.7 \
--with-apxs2=/usr/local/apache-httpd-2.2.17/bin/apxs \
--with-mysql=/usr/local/mysql/ \
--with-config-file-path=/usr/local/apache-httpd-2.2.17/conf \
--disable-debug \
--enable-safe-mode \
--enable-track-vars \
--enable-sockets \
--with-mod_charset \
--with-charset=utf8 \
--with-xml \
--with-language=korean \
--enable-mailparse \
--enable-calender \
--enable-sysvsem=yes \
--enable-sysvshm=yes \
--enable-ftp \
--enable-magic-quotes \
--enable-gd-native-ttf \
--enable-url-includes \
--enable-trans-id \
--enable-inline-optimization \
--enable-bcmath \
--with-jpeg \
--with-png \
--with-zlib \
--with-jpeg-dir=/usr \
--with-png-dir=/usr/lib \
--with-freetype-dir=/usr \
--with-libxml-dir=/usr \
--enable-exif \
--with-gd \
--with-ttf \
--with-gettext \
--enable-sigchild \
--enable-mbstring

[출처] php 설치옵션|작성자 멋진태혁

글쓴이 : 오렌지블루


저작권자 이메일 :

출처 : www.koreaphp.co.kr


작성일 : 2002/04/26 13:02:30

글내용

# 1) 문제가 발생했을 때에는 httpd.conf (srm.conf, access.conf) 설정 파일의
# 문법을 제대로 지켰는지 먼저 점검.
#
# /usr/sbin/httpd 명령에 -t 옵션을 주면 문법만 점검합니다.
#
# 예1) 문제가 없는 경우
# # /usr/sbin/httpd -t
# Syntax OK
#
# 예2) 설정에 실수가 있는 경우
# #/usr/sbin/httpd -t
# Syntax error on line 91 of /etc/httpd/conf/httpd.conf:
# ServerType must be either 'inetd' or 'standalone’ ....

# 지시자는 3 개의 기본적인 섹션으로 묶여 있다:
#
# 1. 아파치 서버 프로세스의 전반적인 작동을 제어하는 지시자
# ('global environment, 전체 환경')
#
# 2. 가상 호스트에 의해 처리되지 않는 요청을 모두 처리하는 주 서버 또는
# 기본 서버의 작동을 제어하는 지시자. 이 지시자 내용은 모든 가상 호스트의 기본값이기도 하다.
# 3. 다른 IP 주소 또는 다른 호스트 이름에 대한 요청을 처리할 가상 호스트 설정
# 서버 유형(ServerType)은 inetd 또는 standalone 둘 중 하나이다.
# inetd 방식은 유닉스 플랫폼에서만 지원된다.
ServerType standalone
# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이
# 기록되는 디렉토리의 최상위 경로명.
# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!
ServerRoot "/etc/httpd"

# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을
# 차례대로 읽어나간다. 나중에 있는 2 개의 파일은 현재 아무 내용도
# 없는 빈 상태로 배포되고 있다. 왜냐하면 모든 지시자를 그냥 하나의
# 파일에 적는 것이 더욱 명료하기 때문이다.
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

#
# Timeout: 받기/보내기 타임 아웃 시간
#
Timeout 300

# KeepAlive: 지속성(persistent) 접속을 허가할 것인가 말 것인가?
# (한 번의 접속에서 여러 개의 요청을 처리할 것인가 여부)
# 허가하지 않기 위해서는 "Off"로 설정한다.
# 허가하지 않는 것과 허가하는 것과의 효율 차이는 매우 크다.
KeepAlive On

# MaxKeepAliveRequests: 접속 기간 동안 처리할 수 있는 최대 요
# 청 개수 0 을 넣으면 무한대이다. 높은 성능을 내기 위해서 높은
# 값을 추천한다.
MaxKeepAliveRequests 100

# KeepAliveTimeout: 같은 접속 상태에서 같은 클라이언트의 요청이
# 타임 아웃되는 시간 (초 단위)
KeepAliveTimeout 15

# 아파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지 점검한
#다.
# 만약 MinSpareServers 보다 적다면 여유 서버 프로세스를 생성한다.
# 만약 MaxSpareServers 보다 많으면 불필요한 여유 프로세스를 제거한다.
MinSpareServers 8
MaxSpareServers 20

# 처음 시동할 때 만들 서버의 갯수 -- 합리적인 근사치여야 한다.
StartServers 10

# 서버 프로세스의 최대값, 즉 동시에 접속할 수 있는 클라이언트 갯수를
# 제한하는 값이다.
MaxClients 150

# MaxRequestsPerChild: 각 자식 프로세스가 죽기 전까지 처리할 수 있는
# 요청 갯수. 메모리 누출이나 자원 누출 방지
MaxRequestsPerChild 100

# Listen: 아파치를 기본값 이외에도 특정 IP 주소 또는 포트에 연결하도록
# 해준다. 지시자도 참고하라.
#Listen 3000
#Listen 12.34.56.78:80

# BindAddress: 이 옵션을 사용하여 가상 호스트를 지원할 수 있다.
# 이 지시자를 이용하여 서버가 귀기울일 IP 주소를 지시할 수 있다.
# , Listen 지시자도 참고하라.
#
#BindAddress *

# 동적 공유 객체(Dynamic Shared Object, DSO) 지원
# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련
#된 지시자를 사용하기에 앞서 알맞게 `LoadModule' 지시자로 모듈을 지시
#해주어야 한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은 아파치
#1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는 httpd 바
#이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을 알고 싶
#을 때에는 `httpd -l' 명령을 실행한다.
#
# 주의: 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이
# 아무렇게나 순서를 바꾸지 말라.
#
# 모듈 관련 문서는 HTML 형식으로 "/home/httpd/manual/mod" 에 있음
# 주의: LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라 나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.
LoadModule env_module modules/mod_env.so .....

# 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지
# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를
# (ExtendedStatus Off) 제어한다. 기본값은 Off 이다.
#
#ExtendedStatus On

# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.
# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는
# root 권한으로 실행되어야 한다.
Port 80

#
# httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은
# httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자
# 권한으로 전환해야 한다.
#
User nobody
Group nobody

# ServerAdmin: 서버에 문제가 발생했을 때 메일을 보낼 메일 주소. 이 주소는 예를 들어 에러 문서와 같이 서버가 생성하는 페이지에 나타날 것이다.
ServerAdmin root@localhost

# ServerName은 클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우 호스트 이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제 이름이 아닌 'www'를 사용하도록 하는데 사용할 수 있다.)
# 주의: 호스트 이름을 아무렇게나 만들어선 안된다. 이 이름은 여러분의 호스트에 주어진 타당한 DNS 이름이어야 한다. 잘 모르겠으면 네트웍 관리자에게 문의하라. 호스트가 등록된 DNS 이름을 갖고 있지 않는 경우에는 이 곳에 IP 주소를 적는다. 어찌 되었든 IP 주소를 사용하여(예를 들어 http://222.25.27.29/) 접속할 수 있다. 이런 식으로 해서 리다이렉션이 작동하도록 할 수 있다.
ServerName www.aaaa.com

# DocumentRoot: 제공할 문서의 상위 디렉토리.
DocumentRoot "/home/httpd/html"

# 아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와 기능을 허용할 것인지 거부할 것인지 여부를 설정할 수 있다. 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도 영향을 미친다. 우선, "기본값"을 매우 제한적인 상태로 설정한다.

Options FollowSymLinks
AllowOverride None


None : 어떤 옵션도 사용할 수 없다.
All : MultiViews 옵션을 이용할 수 있다.
Indexes : URL에 지정된 디렉토리에 지정된 파일(ex.index.html)이 없을 경우 디렉토리 목록을 보여준다.
Includes : 서버측의 추가적인 정보를 제공
FollowSymLinks : 디렉토리 상의 심볼릭 링크를 사용가능케 함
FollowSymLinksIfOwnerMatch : 디렉토리 상의 심볼릭 링크를 사용가능케 함(Owner가 매칭되었을때만!)
ExecCGI : CGI 스크립트를 실행할 수 있게끔 함
MultiViews : All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용한다.


# 다음 값에는 "None", "All", 또는 "Indexes", "Includes", "FollowSymLinks", "ExecCGI", "MultiViews"의 자유로운 조합이 가능하다.
Options Indexes FollowSymLinks Includes
# 다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤 옵션을 마음대로 제어할 수 있는지 결정한다. "All" 또는 "Options", "FileInfo", "AuthConfig", "Limit"의 자유로운 결합이 가능하다.
AllowOverride None

# 서버로부터 자료를 얻어갈 수 있는 위치(ex. IP등)를 제어한다.
Order allow,deny
Allow from all


# UserDir 디렉토리에 대한 접근을 제어한다. 다음은 사용자 홈 페이지에 대하여 읽기만 가능하도록 한 예제 설정 내용이다.
UserDir public_html


AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

Order allow,deny
Allow from all


Order deny,allow
Deny from all




# DirectoryIndex: 준비된 HTML 디렉토리 인덱스로 사용할 파일이나 파일 목록의 이름을 나열한다. 여러 개를 나열할 때는 스페이스로 구분한다.
DirectoryIndex index.php3 index.html index.shtml index.cgi

# AccessFileName: 각 디렉토리에 대하여 접근 제어 정보 내용을 담고 있을 파일 이름
AccessFileName .htaccess

# 다음 행은 웹 브라우져가 .htaccess 파일을 접근할 수 없도록 하는 설정이다. .htaccess에는 인증 정보가 들어있는 경우가 빈번하므로 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다. 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라. 만약 AccessFileName 설정을 다른 파일명으로 바꾸었다면 알맞게 .htaccess를 그 이름으로 바꾸어준다.

Order allow,deny
Deny from all


# CacheNegotiateDocs: 기본적으로 아파치는 내용에 따라 협상된 문서에 대해서는 "Pragma: no-cache" 내용을 전송한다. 이 행은 프록시 서버로 하여금 문서를 캐쉬하지 않도록 요청한다. 다음 행의 주석을 풀면 이 기능을 해제하고 모든 프록시가 문서들을 캐쉬할 수 있도록 한다.
#CacheNegotiatedDocs

# DefaultType이란 파일 확장자와 같은 것을 통해 MIME 타입을 알 수 없는 문서에 대하여 사용할 기본 MIME 타입을 말한다. 여러분의 서버에 주로 텍스트나 HTML 문서가 많다면 "text/plain"을 쓰는 것이 좋다. 대부분이 실행 프로그램이나 이미지 등 바이너리인 경우에는 웹 브라우져가 텍스트라고 생각하여 바이너리 파일을 화면에 표시하지 않도록 하기 위해 "application/octet-stream"를 적는다.
DefaultType text/plain

# mod_mime_magic 모듈을 사용하면 파일의 내용을 가지고 파일의 타입에 힌트를 얻는다. MIMEMagicFile 지시자를 사용하여 모듈에게 힌트 정보가 저장되어 있는 파일을 설정한다. mod_mime_magic은 기본 서버의 일부가 아니다.(따라서 LoadModule 설정을 사용하여 모듈을 추가해야 한다.) 또는 서버를 다시 컴파일해서 mod_mime_magic을 추가해야 한다. 그렇기 때문에 컨테이너에 포함되어 있는 것이다. 다음 설정은 모듈이 서버에 포함되어 있을 때에만 MIMEMagicFile 지시자를 처리하도록 해준다.

MIMEMagicFile conf/magic


# HostNameLookups: 로그에 클라이언트의 FQDN이름 또는 IP 주소만을 기록할 지 여부. 예를 들어 www.apache.org (on) 또는 204.62.129.132 (off) 기본값이 off 인 이유는 각 클라이언트 요청이 올 때마다 최소한 1 번 이상의 네임 서버 요청이 발생하기 때문이다. 그러나 꼭 필요한 경우에는 이 기능을 켜둔다.
HostnameLookups Off

# ErrorLog: 에러 기록 파일의 위치. 컨테이너 안에서 ErrorLog 설정을 하지 않으면 그 가상 호스트에 관련된 에러 메시지도 역시 이 곳에 기록된다. 컨테이너 안에서 에러 로그 파일을 정의하면 관련된 에러 메시지는 그 파일로 저장된다.
ErrorLog logs/error_log

# LogLevel: error_log에 기록될 메시지 분량을 제어한다. debug, info, notice, warn, error, crit, alert, emerg 등의 값이 가능하다.
# alert, emerg.
LogLevel warn

# LogLevel: error_log에 기록될 메시지 분량을 제어한다. debug, info, notice, warn, error, crit, alert, emerg 등의 값이 가능하다.
# alert, emerg.
LogLevel warn

# 다음 지시자는 CustomLog 지시자(아래 참고)에서 사용할 몇 가지 형식에 대한 별명을 정의한다.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# 접근 로그 파일의 위치와 형식(공통 로그파일 형식) 컨테이너 안에서 접근 로그파일 설정을 하지 않으면 모든 기록이 이 파일에 남게 된다. 이와 반대로 각 마다 접근 로그파일을 정의하면 모든 처리가 바로 그 파일에 기록된다.
CustomLog logs/access_log common
# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는 다음 지시 내용의 주석 처리를 해제하라. 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다. 에이전트 로그를 남기면 여러분의 사이트에 방문하는 브라우져의 종류에 대한 통계를 낼 수 있다. ( 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로 직전에 방문한 사이트를 말한다. )
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는 (통합 로그파일 형식) 다음 지시 내용을 사용하라. 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!
#
#CustomLog logs/access_log combined

# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록, mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다. "Email"로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.
# On | Off | EMail 중 하나로 설정한다.
#ServerSignature On
# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음) 형식은 다음과 같다.
# Alias 가짜이름 실제이름
# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야 처리함을 잘 알아두자. 따라서 "/icons"는 별칭 처리되지 않고 "/icons/"만 별칭 처리된다.
Alias /icons/ "/home/httpd/icons/"


Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all

# ScriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다. ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다. 맨 뒤에 붙는 "/" 에 대한 규칙은 Alias와 마찬가지이다.
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"

# "/home/httpd/cgi-bin" 부분은 ScriptAlias로 별칭 처리된 실제 CGI 디렉토리로 설정해야 한다.

AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all

# localhost에서는 지역 시스템 문서를 접근할 수 있도록 허용한다. (레드햇 리눅스 6 설정으로부터 인용)
Alias /doc /usr/doc

order deny,allow
deny from all
allow from localhost
Options Indexes FollowSymLinks


# Redirect를 사용하면 서버의 이름공간에 존재했으나 현재에는 존재하지 않는 문서에 대하여 클라이언트에게 통보할 수 있도록 해준다. 이렇게 함으로써 위치가 변한 새로운 문서를 어디에서 찾을 수 있는지 클라이언트에게 알려줄 수 있다.
# 형식: Redirect 예전URI 새URI
# FancyIndexing은 예쁜 디렉토리 목록 또는 표준적인 디렉토리 목록 여부를 결정한다.
IndexOptions FancyIndexing

# AddIcon으로 시작하는 지시자는 서버에게 다양한 파일, 파일명 확장자에 대하여 어떤 아이콘을 보여 줄 것인지 말해준다. 이 값들은 FancyIndexing을 사용하는 경우에만 해당된다.
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
....
# DefaultIcon이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한 기본 아이콘 파일을 설정한다.
DefaultIcon /icons/unknown.gif

# AddDescription은 서버 자동 생성 인덱스의 파일명 뒤에 간단한 설명을 넣을 때 사용한다. FancyIndexing을 사용할 때에만 보인다.
# 형식: AddDescription "설명" 화일명
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
#
# ReadmeName은 서버가 디렉토리 목록 뒤에 내용을 덧붙여 넣을 README 파일의 이름을 설정한다. HeaderName은 디렉토리 인덱스 앞에 내용을 덧붙일 파일명을 설정한다. 서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다. 만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로 추가한다.
ReadmeName README
HeaderName HEADER

# IndexIgnore는 디렉토리 인덱싱에 있어 목록에서 제외시킬 파일명을 설정한다. 쉘 스타일의 와일드 카드를 사용할 수 있다.
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
# AddEncoding은 특정 브라우져(모자익/X 2.1+)로 하여금 자료를 받으면서 정보의 압축을 풀 수 있도록 해준다. 주의: 모든 브라우져가 이 기능을 지원하는 것은 아니다. 이름이 유사하기는 하지만 다음부터 나오게 될 Add로 시작하는 지시자들은 FancyIndexing과는 관련이 없다.
AddEncoding x-compress Z
AddEncoding x-gzip gz

# AddLanguage는 문서의 언어를 명시한다. 내용 협상 과정을 통해 브라우져가 이해할 수 있는 언어의 문서를 제공하는 것이 가능하다. 접미어(suffix)는 언어 키워드와 꼭 같은 필요는 없다. 예를 들어 폴란드어(Polish)로 된 문서는 네트웍 표준 언어 코드가 pl 이지만 펄 스크립트와 확연히 구별하기 위해 "AddLanguage pl .po"라고 사용한다.
AddLanguage ko .ko
AddLanguage en .en
....

# LanguagePriority는 내용 협상 중 동점이 발생하는 경우 언어 우선권을 부여한다. 언어의 우선권을 내림차순으로 나열하면 된다.
LanguagePriority ko en fr de




# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다. 예를 들어, PHP3 모듈(아파치 배포파일에 포함되어 있지 않다)에 대해서는 다음과 같이 사용한다.
#AddType application/x-httpd-php3 .php3
#AddType application/x-httpd-php3-source .phps

#다음은 PHP/FI (PHP2)를 위한 것입니다. AddType application/x-httpd-php .phtml

# AddHandler를 사용하면 특정 파일 확장자와 "처리기"를 연결하거나 특정 파일 타입에 특정 동작(action)을 연결할 수 있다. 서버에 내장되어 있거나 또는 Action 명령을 사용하여 추가할 수 있다.(아래 참고)
# 서버 측 포함(SSI) 또는 ScriptAlias 처리된 디렉토리 외부에 존재하는 CGI 스크립트를 사용하고 싶을 때는 다음 내용의 주석을 없앤다.

# CGI 스크립트를 사용하기 위해:
AddHandler cgi-script .cgi
# 서버 처리 HTML 파일 사용하기 위해:
AddType text/html .shtml
AddType text/html .htm
AddHandler server-parsed .shtml

# 아파치의 send-asis HTTP 파일 기능을 사용하기 위해서는 다음 행의 주석을 없앤다.
#AddHandler send-as-is asis

# 서버 처리 이미지 맵 파일을 사용하려면...
AddHandler imap-file map
...

# 프록시 서버 지시자. 프록시 서버 기능을 작동시키려면 다음 행의 주석을 해제시켜준다.
#
#ProxyRequests On
#
#
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#


# HTTP/1.1 "Via:" 헤더를 처리할 것인지 여부를 결정한다. ("Full"은 서버 버전을 포함하고 "Block"은 나가는 모든 자료에서 Via: 헤더를 제거한다.)
# Off | On | Full | Block 중 하나의 값을 지정한다.
#ProxyVia On

# 캐쉬 기능도 사용하기 위해서는 다음 행의 주석을 풀어준다: (CacheRoot가 없으면 캐쉬하지 않음)
#CacheRoot "/home/httpd/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
#




-------------------------------------
httpd.conf test
/usr/sbin/httpd -t
Binary 직접 실행
/usr/sbin/httpd
Script로 실행
/etc/rc.d/init.d/httpd start|stop|restart
zone "localdomain" IN { //도메인만 들어감.
type master;
file "localdomain.zone"; //포워드 파일로 링크
allow-update { none; };
}; //forward 부분

zone "127.0.0." IN { //3옥텟 거꾸로 작성 ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ(127.0.0./0~255)
type master;
file "localhost.rev"; //리버스 파일로 링크
allow-update { none; };
}; //REV부분

+ Recent posts