RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
출처 블로그 > 살 맛나는 세상
원본 http://blog.naver.com/xacti/80002321360
1. httpd.conf
A. config 에서 성능에 대한 요소들

i. KeepAlive Off
한번 connection 하면 바로 connection을 끊지 않고 유지를 하는 기능인데 Off를 해야 더 많은 client 들의 request 처리를 할 수 있다. KeepAlive On 상태이면 MaxKeepAliveRequests, KeepAliveTimeOut 값을 적절히 조절해야 된다.

ii. Timeout 30
connection 시점부터 완료 될때까지의 최대 시간값 이다. network 이상이상 등으로 connection 환경이 비정적인 client connection 들이 많아지면 apache child process 새 connetcion 처리를 위해 계속 fork하게 될것이고 server의 과부하가 생긴다.

iii. HostnameLookups Off
apache 기본값은 Off 이며 On 으로 되어 있으면 connection하고 있는 cilent IP 주소가 역 추적되고 그 정보가 log file등에 쓰인다. 그렇기 때문에 성능에 좋지 않다.

iv. FollowSymLinks
Options FollowSymLinks 가 설정되어 있다면 symlinks에 대한 보안검사를 수행한다. symlinks에 대한 보안검사에 따라서 성능이 좋지 않게되며 불필요한 경우라면 설정하지 않는게 좋다.

v. Options SymLinksIfOwnerMatch
설정되어 있다면 각 directory를 모두 점검해서 각각의 lstat system call을 하게 되므로 성능이 저하된다.

vi. AllowOverride None
AllowOverride all 로 설정된경우 모든 filename component에 대해서 .htaccess file을 열게된다. 이 file을 한번더 열게 됨으로서 성능이 좋지 않게 되며 이것이 필요없는 경우라면 AllowOverride None 을 사용해야 된다.

vii. Negotiation
DirectoryIndex index 처럼 wildcard를 사용 하는 것 보다 DirectoryIndex index.cgi index.pl index.shtml index.html 와 같이 complete list로 사용하는 것이 좋다. complete list 에서는 가장 먼저 선택되는 순으로 나열하는 것이 좋다.

viii. MaxRequestsPerChild 0
apache child process가 memory leak 이 없고 사용자 module 로 작성한 부분이 견고하다고 판단되면 0 (unlimited)로 설정하는 것이 좋다.

ix. Apache 2.0 Multi-Processing Modules 에 따른 Process Creation  


1. prefork  

A. apache 1.3 의 계승(default) 된것이며 thread 를 지원하지 않는 Unix 계열을 위해 남겨둔 것이다.

B. MinSpareServers, MaxSpareServers, StartServers 지시자를 적절히 조절해야 된다.

C. MaxClients 수는 Client connection 이 너무 많다면 server의 spec에 따라 적절하게 제한 해야 한다.


2. worker

A. parent 로 부터 fork 된 child process는 고정된 숫자의 thread 를 가지고 있으며 StartServer에 지정된 숫자 만큼 child process 생성한다.

B. ThreadPerChild 에 고정된 숫자 만큼 child process 내 Thread 개수 생성

C. StartServer × ThreadPerChild 숫자만큼의 Thread가 Server Start시에 생성되고 request에 따라 MaxClient 값까지 증가 한다.

D. 각각의 thread 들은 connection들의 listen 과 serve 를 한다.

E. request 가 늘어나면 parent 는 child process 를 fork 하여 ThreadPerChild에 지정된 숫자 만큼의 thread 를 생성한다. request 가 늘어나면 parent 는 child process 를 kill 하여 child process 내에 있던 thread를 한꺼번에 kill 한다.  MaxSpareThreads, MinSpareThreads 지시자 사용하여 적절히 조절해야 한다

F. apache 2.0.35 test 결과로는 child process 를 늘이고 child process 내에 thread 숫자를 줄이는 것이 더 성능이 좋았는데 이유는 thread 간의 경합문제가 생기는 것으로 판단된다.  


2. modules
compile 시 포함되는 불 필요한 module을 없애서 fork 및 불필요한 system call 의 부하를 줄인다.

A. Core Features and Multi-Processing Modules

i. core
basic server operation을 위해서 꼭 필요하다.

ii. mpm_common
multi-processing module (MPM) 을 위한 common module

iii. MPM module 로서 각 OS에 따라서 1개만 포함 되게 된다.


1. mpm_netware
   Novell NetWare 를 위한 multi-processing module
2. mpm_winnt
   Windows NT 를 위한 multi-processing module
3. perchild
   각각의 process 들이 다양한 다른 userid 를 가지고 serving 을 할 수 있는 multi-processing module 이며 실험 단계 이다.
4. prefork
   apache 1.3 의 pre-forking web server 의 계승된 multi-processing module
5. worker
   hybrid multi-threaded multi-process web server 를 구현한 multi-processing module

B. Other Modules

i. mod_access
<Directory>, <Files>, <Location> sections 및 .htaccess files 에 clinet 의 hostname, ip 들을 가지고 access control을 위해서 필요하다.

ii. mod_actions
CGI scripts 실행이 필요하다면 필요하다.

iii. mod_alias
URL redirection 이나 Alias ScriptAlias 을 위해 필요하다.

iv. mod_asis
HTTP header 와 함께 file 내용을 그대로 보낼 때 쓰인다. 불 필요 하다.

v. Authentication 에 대한 modules
Authentication 에 대한 기능이 필요 없으면 모두 불 필요하다.


1. mod_auth, mod_auth_dbm
HTTP basic authentication 으로서 인증에 관한 정보를 text file 등에 저장 할수 있고 mod_auth_dbm 을 통해서 DBM 등에 저장될수도 있다. 인증에 관련 없으면 불 필요.

2. mod_auth_anon
FTP 스타일 처럼 "anonymous" user access 를  authenticated areas 에 접근하게 할수 있다.

3. mod_auth_digest
MD5 Digest Authentication 지원. 인증에 관련 없으면 불필요 하다.

vi. mod_autoindex
ls및 dir 명령처럼 directory내의 file들을 정렬해서 나오게 해줄 때 쓰인다. 불필요하다.

vii. mod_cgi
CGI scripts 실행을 위해서 필요하다.

viii. mod_deflate
content 압축 지원 (정책상 content 압축을 하기 때문에 필요 할 수 있다.)

ix. mod_dir
directory index files 을 지원 불필요.

x. mod_env
CGI scripts 와 SSI pages 에 system 환경 변수 제공 불 필요.

xi. mod_imap
server 처리 image map으로 처리하기 위해 쓰이며 불 필요.

xii. mod_include
Server Side Includes (SSI) 처리를 위해서 쓰이며 불 필요.

xiii. mod_log_config
Logging 위해서 필요하다.

xiv. mod_mime
content (mime-type, language, character set, encoding)  및 file의 특성에 따라 특정 type 으로 처리하기 위해서 꼭 필요하다.

xv. mod_negotiation
content negotiation 에 필요하다.

xvi. mod_proxy
HTTP/1.1 proxy 기능에 필요.

xvii. mod_setenvif
request의 browser 특성에 따른 서로 다른 script 를 접근하게 하거나 환경 변수를 지정하게 할수있다. BrowserMatch 등의 지지사를 사용하기 위해서 필요하다.

xviii. mod_so
shared object 형태의 동적인 apache modules 이 있다면 필요하다.

xix. mod_ssl
Secure Sockets Layer (SSL) 와 Transport Layer Security (TLS) protocols 을 사용한다면 필요하다.

xx. mod_status
server activity 및 performance 정보들을 moniter 하기 위해서 필요.

xxi. mod_userdir
사용자 계정을 이용하여 home page 를 제공 한다. 불 필요 하다.

3. MaxClient 수를 위한 source 수정
A. apahce 1.3
apache_1.3.x/src/include/httpd.h 의 에서
HARD_SERVER_LIMIT 256
B. apache 2.0

i. prefork
httpd-2.0.36/server/mpm/prefork/prefork.c
DEFAULT_SERVER_LIMIT 256

ii. worker
httpd-2.0.36/server/mpm/worker/worker.c
DEFAULT_SERVER_LIMIT 16
DEFAULT_THREAD_LIMIT 64
2006/09/11 12:20 2006/09/11 12:20
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 함께 하는 세상
원본 http://blog.naver.com/agentsds/10703283

서버 전역 설정


이 문서는 core 서버가 서버의 기본 행동을 설정하기위해 제공하는 지시어중 일부를 설명한다.



서버 식별

ServerAdminServerTokens 지시어는 오류문 등 서버가 생성하는 문서에 나올 서버에 대한 정보를 설정한다. ServerTokens 지시어는 서버 HTTP 응답 헤더를 설정한다.

서버는 ServerNameUseCanonicalName 지시어를 사용하여 자기참조 URL을 만든다. 예를 들어, 클라이언트가 디렉토리를 요청했지만 디렉토리명 뒤에 슬래쉬를 붙이지않은 경우 아파치는 뒤에 슬래쉬를 붙인 전체 이름을 클라이언트에게 리다이렉트하여, 클라이언트가 문서의 상대참조를 올바로 찾게 한다.

top

파일 위치

이 지시어들은 아파치가 정상적으로 동작하기위해 필요한 여러 파일들의 위치를 설정한다. 경로명이 슬래쉬(/)로 시작하지 않으면, ServerRoot에 상대적인 파일을 찾는다. root가 아닌 사용자에게 쓰기권한이 있는 경로에 파일을 두지않도록 조심해라. 더 자세한 정보는 보안 팁 문서를 참고하라.

top

자원사용 제한

LimitRequest* 지시어는 아파치가 클라이언트의 요청을 읽을 때 사용할 자원량을 제한한다. 이런 값들을 제한하여 서비스거부(denial of service)류 공격을 줄일 수 있다.

RLimit* 지시어는 아파치 자식이 생성하는 프로세스가 사용할 자원량을 제한한다. 특히 CGI 스크립트나 SSI exec 명령어가 사용할 자원을 제한한다.

ThreadStackSize 지시어는 스택 크기를 조절하기위해 Netware에서만 사용한다.

2006/09/11 10:35 2006/09/11 10:35
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > Human Packet
원본 http://blog.naver.com/jabusunin/30000023873

[Apache-ProFTPd] Order, Allow, Deny 비교

- 작성자 : 김칠봉 <san2(at)linuxchannel.net>
- 작성일 : 2003-11-22
- 내  용 : 아파치와 ProFTPd 의 Order, Allow, Deny 비교
- 수  준 : 초보용
- 키워드 : Apache, ProFTPd, Order Allow, Deny

*주)
이 문서에 대한 최신 내용은 아래 URL에서 확인할 수 있습니다.

http://www.linuxchannel.net/docs/order-apache-vs-proftpd.txt


------------------------------------------------------
1. Apache Order allow,deny
2. ProFTPd Order allow,deny
3. 비교
4. 정리
------------------------------------------------------

1. Apache Order allow,deny

Order directive

- Syntax  : Order ordering
- Default : Order Deny,Allow  <---- Deny 에 없는 것은 모두 Allow 됨
- Context : directory, .htaccess
- Override: Limit
- Status  : Base
- Module  : mod_access

Allow directive

- Syntax  : Allow from all|host|env=variablename [host|env=variablename] ...
- Context : directory, .htaccess
- Override: Limit
- Status  : Base
- Module  : mod_access
- List    : 구분 공백(' ')
  A (partial) domain-name
Example: Allow from apache.org
  A full IP address
Example: Allow from 10.1.2.3
  A partial IP address
Example: Allow from 10.1
  A network/netmask pair
Example: Allow from 10.1.0.0/255.255.0.0
  A network/nnn CIDR specification
Example: Allow from 10.1.0.0/16

  Allow from 10.1.2.3 env=foo   <-- 틀린 경우(X)
  Allow from env=foo 10.1.2.3   <-- 맞는 경우(O), env 가 앞에 옴

기본정책이 Deny 에 없는 것은 모두 Allow 되고, Deny,Allow 사이는 빈공백없이
콤마(,)로 분리.

- Order Deny,Allow

  Allow 를 평가하기 전에 먼저 Deny 를 평가하고, 그 다음 Allow 에
  override 함. 그리고 여기에 매치되지 않는 나머지 호스트 모두
  Allow 됨. 따라서 이 Order 의 기본정책은 첫번째 Deny 지시자에서 결정함

  즉 순서는,

  1. Deny 매치 우선 결정(기본 정책 결정)
  2. 그 다음 Allow 매치를 override 함
  3. 나머지 포함되지 않은 호스트는 모두 Allow 됨

- Order Allow,Deny

  Deny 를 평가하기 전에 먼저 Allow 를 평가하고, 그 다음 Deny 에
  override 함. 그리고 여기에 매치되지 않은 나머지 호스트는 모두
  Deny 됨. 이 Order 의 기본정책은 첫번째 Allow 지사자에서 결정함.

(*** 이점이 ProFTPd 와 서로 다름 ***)


ex1) 기본정책은 Allow 이고, 예외로 bad.com hacker.com 은 금지

  Order Allow,Deny              <-- Order Mutual-failure 와 같음
  Allow from all
  Deny from bad.com hacker.com  <-- 리스트 나열은 빈공백으로 구분

ex2) 기본정책은 Deny 이고, 예외로 myhost.com 만 접근을 허용함

  Order Deny,Allow
  Deny from all
  Allow from myhost.com

ex3) 중요

  Order Allow,Deny
  Allow from apache.org
  Deny from foo.apache.org

이것은 foo.apache.org 를 제외한 *.apache.org 만 허용하고
나머지 모든 호스트는 접근을 금지함(foo.apache.org 는 당연히 금지)

이유는 Order 순서에 의해서 Deny 를 평가하기 전에 Allow 를 평가하고,
그 다음에 Deny 매치에 override 하기 때문이며, 나머지 매치되지 않는 모든
호스트는 Deny 됨.

ex4) 주의

  Order Deny,Allow
  Deny from all           <--- 기본정책이 모두 Deny 임
  Allow from aaa.foo.com
  Allow from bbb.foo.com ccc.foo.com
  Allow from ddd.com.com
  Deny from ccc.foo.com   <--- *** 이 호스트는 Allow 됨 ****

Allow 를 평가하기 전에 Deny 를 먼저 평가하기 때문에 평가 순서는
다음과 같음.

  Order Deny,Allow
  Deny from all           <--- 기본정책이 모두 Deny 임
  Deny from ccc.foo.com
  Allow from aaa.foo.com
  Allow from bbb.foo.com ccc.foo.com  <--- Allow 됨
  Allow from ddd.com.com


2. ProFTPd Order allow,deny

Order directive

- Syntax: Order [ Order allow,deny|deny,allow]
- Default : Order allow,deny
- Context : <Limit>
- Module  : mod_core
- Compatibility : 0.99.0pl6 and later

Allow directive

- Syntax  : Allow [ ["from"] "all"|"none"|host|network[,host|network[,...]]]
- Default : Allow from all
- Context : <Limit>
- Module  : mod_core
- Compatibility : 0.99.0pl6 and later
- List    : 구분 컴마(,)
  A (partial) domain-name
Example: Allow from .proftpd.org   <--- 아파치와 다르게 앞에 점 추가
  A full IP address
Example: Allow from 10.1.2.3       <--- 아파치와 같음
  A partial IP address
Example: Allow from 10.1.          <--- 아파치와 다르게 뒤에 점 추가         
  A network/netmask pair                   <--- 없음
  A network/nnn CIDR specification
Example: Allow from 10.1.0.0/16    <--- 아파치와 같음


ProFTPd 의 Order, Allow, Deny 지시자는 Apache와 비슷한 구문을 갖지만
그 결과는 아주 상이함.

- Order deny,allow   <-- 우선권 deny 둠

  allow 를 평가하기 전에 deny 를 먼저 평가하고 결정해 버림(overrid 하지 않음)
  그리고 allow 를 평가하고(같은 것이 있으면 deny 가 우선), 나머지
  매치되지 않은 모든 호스트는 deny 됨(아파치와 서로 반대임)

- Order allow,deny   <-- 우선권을 allow 둠

  deny 를 평가하기 전에 allow 를 먼저 평가하고 결정해 버림(overrid 하지 않음)
  그리고 deny 를 평가하고(같은 것이 있으면 allow 가 우선), 나머지
  매치되지 않은 모든 호스트는 allow 됨(아파치와 서로 반대임)

즉 같은 호스트가 allow 와 deny 에 둘다 있을 경우 그 우선권은
Order 지시자에서 설정한 앞부분의 keyword 에 따름.

  Order deny,allow
  Deny from 192.168.0.1
  Allow from 192.168.0.

  deny 가 우선이므로 192.168.0.1 은 deny 됨.(Override 되지 않음)
  또한 다음과 같이 Order 순서를 그대로 두고, 위치만 바꾸어도 동일함.

  Order deny,allow
  Allow from 192.168.0.
  Deny from 192.168.0.1

*중요)
ProFTPd 는 Apache 와 같이 Order 의 순서대로 Override 되지 않고,
Order 순서에 의해서 먼저 접근을 결정해 버림.

ex1) 특정 호스트만 허용함

  <Limit LOGIN>
   Order allow,deny
   Allow from 192.168.0.100,192.168.1.
   Deny from all       <--- all 은 매치되지 않은 나머지를 의미함.
  </Limit>

  192.168.0.100 192.168.1.0/24 만 허용하고 나머지는 모두 접속을 금지함.
  즉 특정 호스트만 허용(Allow) 하기 때문에 Order allow,deny 순으로
  설정하여 우선권을 allow 가 갖도록함.

ex2) 특정 호스트만 금지함

  <Limit LOGIN>
   Order deny,allow
   Deny from 192.168.0.100,192.168.1.
   Allow from all       <--- all 은 매치되지 않은 너머지를 의미함.
  </Limit>

  ex1) 과 서로 반대임

ex3) 부분과 전체

  <Limit LOGIN>
   Order allow,deny
   Allow from 128.44.26.,128.44.26.
   Allow from myhost.mydomain.edu,.trusted-domain.org
   Deny from all
  </Limit>

  ProFTPd 는 Override 되지 않기 때문에 제일 마지막에 Deny from all 설정이
  온다고 하더라고 먼저 설정한 호스트(ex 128.44.26.1)는 Allow 되고,
  상위 설정에서 포함되지 않은 나머지 호스트는 제일 마지막에 모두 Deny 됨

ex3) 우선권

  <Limit LOGIN>
   Order deny,allow
   Allow from 192.168.0.
   Deny from 192.168.0.152
   Deny from all            <--- all 은 매치되지 않은 너머지를 의미함.
  </Limit>

  192.168.0.152 호스트는 앞부분 'Allow from 192.168.0.*'에 포함되지만
  Order 순서가 deny 가 우선이므로 결국 이 호스트는 deny 됨.
  즉 같은 호스트가 allow 와 deny 에 둘다 있을 경우 그 우선권은
  Order 지시자에서 설정한 앞부분의 keyword 에 따름.

  <Limit LOGIN>
   Order deny,allow
   Deny from 192.168.0.152
   Allow from 192.168.0.    <--- override 되지 않음
   Deny from all            <--- all 은 매치되지 않은 너머지를 의미함.
  </Limit>

  위의 설정도 같은 동일한 설정임.


3. 비교

1) 설정방향

- Apache  : Order 순서에 의해서 순차적으로 override 됨.
            매치되지 않은 나머지 호스트는 Order 의 뒤쪽 keyword 에 따름
- ProFTPd : Order 순서에 의해서 순차적으로 먼저 결정함.
            매치되지 않은 나머지 호스트는 Order 의 앞쪽 keyword 에 따름

2) override 비교

- Apache  : override 됨(뒤에 온 놈이 장땡)
- ProFTPd : override 되지 않음(먼저 온 놈(?)이 장땡)

3) 기본 접근정책 비교

- Apache  : 전체 --> 부분으로 override
- ProFTPd : 부분 먼저 설정 --> 나머지 결정

4) 리스트 나열 비교

- Apache  : 빈공백(' ')으로 구분, 여러줄 일 경우 `\'와 중복 지시자 모두 가능
Allow from 1.2.3.4 1.2.3.5 \
1.2.3.6 1.2.3.7
Allow from 10.10.10.1

- ProFTPd : 컴마(,)로 구분하고 여러줄일 경우는 중복 지시자만 가능
Allow from 1.2.3.4,1.2.3.5,1.2.3.6,1.2.3.7
Allow from 10.10.10.1

5) Partial IP 주소 비교

- Apache  : 192.168.0 192.168.1    <-- 뒤에 점이 없음
- ProFTPd : 192.168.0.,192.168.1.  <-- 뒤에 점이 있음

6) Partial domain-name 비교

- Apache  : foo.com bar.com        <-- 앞에 점이 없음
- ProFTPd : .foo.com,.bar.com      <-- 앞에 점이 있음


4. 정리

1) 설정 방향

  - Apache
   Order 순서에 의해서 전체를 먼저 설정하고 나머지 부분을 Override 함

  - ProFTPd
   Order 순서에 의해서 부분을 먼저 결정하고 나머지 전체를 설정한

  * 서로 반대임

2) 특정 호스트만 허용할 경우 : 기본 정책이 deny 임

  - Apache

  Order Deny,Allow
  Deny from all
  Allow from 192.168.0 192.168.1.111

  - ProFTPd

  Order allow,deny
  Allow from 192.168.0.,192.168.1.111
  Deny from all  <-- 나머지를 의미함

3) 특정 호스트만 막을 경우 : 기본 정책이 allow 임

  - Apache

  Order Allow,Deny
  Allow from all
  Deny from 192.168.0 192.168.1.111

  - ProFTPd

  Order deny,allow
  Deny from 192.168.0.,192.168.1.111
  Allow from all  <-- 나머지를 의미함


EOF


From :http://www.linuxchannel.net/docs/order-apache-vs-proftpd.txt

more..

2006/09/11 10:34 2006/09/11 10:34
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 『해킹.... 속임수의 예술....』
원본 http://blog.naver.com/zsup1343/60003541855
1.소개


아파치를 chroot하에 운영하는 방법은 몇가지가 있지만 여기에선
아파치 소스에 패치를 해서 chroot를 적용하는 방법에대해 기술하고있다.
*nix에서 운영되는 각종 데몬들(ftpd, named, etc)이 chroot를적용해
운영되는 추세로 보인다.
웹서버의 보안 취약점과 chroot에 관한것은 plus의 문서를 참고하기바란다.
http://www.plus.or.kr/book/SecurityPLUS-2nd/node10.html


다른방법으로 chroot를 적용하는 방법은 아래링크를 참고하기 바란다.
http://www.linuxfocus.org/English/January2002/article225.shtml
http://www.networkdweebs.com/chroot.html


시스템을 chroot상태로 운영하는 jail프로젝트와 apache를 chroot적용시켜
같이 운영한다면 좀더 안전한 서버운영이 될것으로 생각된다.

jail project
http://free4u.dnip.net/weblog/stories.php?story=01/10/24/5067801



2.패치파일 다운로드


패치다운로드 사이트 - http://home.iae.nl/users/devet/apache/chroot/

위사이트의 패치는 apache-1.3.26버전용이지만 버전에 상관없이(1.3.x대)
패치가 적용되는 패치파일도 있으니 그것을 받기바란다.

apache-1.3.26용 패치
http://home.iae.nl/users/devet/apache/chroot/apache_1.3.26.chroot.patch
(위의 경로에서 받기가 힘들다면 아래경로에서 받을 수 있다.)
http://free4u.dnip.net/docs/apache/apache_1.3.26.chroot.patch

기타 버전용 패치
http://home.iae.nl/users/devet/apache/chroot/patch-zz
(위의 경로에서 받기가 힘들다면 아래경로에서 받을 수 있다.)
http://free4u.dnip.net/docs/apache/patch-zz



3.설치

일단 apache, php의 소스를 적당한 디렉토리에 풀어놓는다
여기에선 /www를 예로들겠다.
#pwd
/www/src
phpinfo등에서 아파치 버전등을 숨기려면apache소스디렉토리의 이름을
변경하면된다.(ex httpd, webserver)
그리고 apache데몬 자체의 이름과 버전등을 숨기거나 변조하려면
아래링크를 참고하라.
http://free4u.dnip.net/weblog/stories.php?story=01/08/08/6470343

필요에 따라서 php의 버전도 숨기거나 변조할수있다.
/www/src/php/main/php_version.h열어서 적당히 수정하면된다.
이제 apache소스에 패치를 한다.

/www/src/apache디렉토리에 patch-zz를 옮겨놓고(1.3.26용도 같다)
patch -p0 < patch-zz 명령으로 패치를 한뒤 에러(reject등)가 나는지 확인한다.
몇몇 hunk가 나는데 별문제는 없다.

여기서부터는 일반적인 apache, php, mysql의 소스컴파일 작업과 같이
설치작업을 하면 된다.


3가지 모두 설치가 끝났으면 apache configure시 prefix로 지정한
디렉토리의 conf/httpd.conf파일을 열어서 아래와 같은 설정이 있는지
확인한다.

4. 환경설정

#file httpd.conf
# ChrootDir: The directory to chroot to
#
# NOTE: When using this all directory/file references in DocumentRoot,
# and should be relative to this ChrootDir!
#
#ChrootDir "/some/path"

위의 설정에서 주석을 풀고 (여기에선 /www/를 chroot디렉토리로 예를든다)
ChrootDir "/www"
ServerRoot "/www/httpd" 로 설정을 했다면 apache가 인식하는 시스템 "/"는
"/www"로 대체된다. 또한 ServerRoot역시 /www/httpd로 설정

DocumentRoot "/www/httpd/htdocs"와 같이 /chroot_fir/serverroot_dir/htdocs
의경로로 인식하게 설정이 된다.
당연히 html문서의 링크등은 시스템루트로 설정하면 안된다. chroot디렉토리인
/www를 벗어날수가 없기때문이다.

모든 html,php등의 링크, include등은 chroot_dir인 /www/httpd/htdocs이하만
정상적으로 동작하게된다.


#php.ini설정

php.ini에 zendoptimizer,phpa등을 설치해사용했었다면
/www/lib등의 디렉토리를 만들고 php.ini에서 경로를 수정하면 동작할것이다.
php역시 apache의module로 동작을 하게되어서 시스템 "/"에는 접근할수가 없고
"/www"를 시스템 "/"로 인식하게된다.

아래ZendOptimizer설정에서 "/Zend" 는 /www/Zend가 될것이다.
zend_extension=/Zend/lib/ZendOptimizer.so

기존에 jail시스템을 설치해서 운영했다면
jail설치시 설정한 chroot디렉토리와 chroot패치된apache의 시스템루트를
같게 설정한다면 유저와 웹서버 모두 chroot된 상태로 좀더 안전한
시스템 운영이 가능할것이다.

기존 jail시스템과 apache, php, mysql을 통합운영시
mysqld의 sock파일의 위치가 중요한데 일단 아파치가 접근가능한곳에
소켓파일이 위치해야한다.
apache의 chroot디렉토리인 /www/tmp등이 적당하다.
기존에 사용하던 my.cnf파일을 /www/etc/에 카피후 기존의 mysqld의 starting
script를 열어 기존경로의 것을 /www/mysql로 수정후 실행하고
mysql데몬이 실행되지 못하고 죽거나 한다면 /www/mysql/data/*.log파일등을
확인해서 문제를 해결해야하겠다.

/www/etc/my.cnf예제는 아래를 참고하라.
###########################################################
[client]
password =
port = 3306 #필요에 의해 포트는 변경할수있다.
socket = /www/var/lock/mysql.sock

[mysqld]
password =
port = 3306
socket = /www/var/lock/mysql.sock
##########################################################

그리고 기존의 웹보드등도 설정파일에서 mysql.sock파일의 위치를 수정해야
mysql db를 사용할수 있을것이다.
위의 설정에서 각 웹보드의 소켓위치 경로는
:/www/var/lock/mysql.sock이 될것이다.
----------------------------------------------------------
여기부터는 jail시스템을 운영하면서 chroot된 apache와 같이 운영할때의
설정을 얘기하겠다.

웹보드(jsboard, zeroboard, etc) 혹은 php의 mail()함수 사용시 메일이
정상적으로 보내지지 않는다.

php가 시스템에 설치된 sendmail을 자동으로 설정해서 sendmail을 실행하는데
시스템의 sendmail위치는 /usr/sbin이기때문에 /www/usr/sbin디렉토리를 만들고
sendmail이 정상실행가능하도록 sendmail, 라이브러리와 설정파일들을 카피해야한다.
ldd /usr/sbin/sendmail 명령으로 sendmail실행파일이 참조하는
공유 라이브러리를찾는다.
다음과 비슷한 메세지를 보여줄것이다.

[root@free4u:/]#ldd /usr/sbin/sendmail
libnsl.so.1 => /lib/libnsl.so.1 (0x40020000)
libsasl.so.7 => /usr/lib/libsasl.so.7 (0x40036000)
libgdbm.so.2 => /usr/lib/libgdbm.so.2 (0x40040000)
libdb-3.1.so => /lib/libdb-3.1.so (0x40046000)
libresolv.so.2 => /lib/libresolv.so.2 (0x400bf000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x400d1000)
libdl.so.2 => /lib/libdl.so.2 (0x400ff000)
libc.so.6 => /lib/i686/libc.so.6 (0x40103000)
libpam.so.0 => /lib/libpam.so.0 (0x4023f000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

이제 /www디렉토리아래에 원래의 시스템과 같이 /etc, /lib, /usr, /usr/bin,
/usr/sbin등의 디렉토리를 만든다(jail시스템을 설치했다면 이미 만들어져
있을것이다.물론 jail시스템 운영에 필요한 파일들도 카피가 되어있을것이다.)

차례대로 원래의 시스템 경로와 같이 /www/lib/, /www/usr/lib등에 라이브러리를
카피한다.
라이브러리카피가 끝났다면 sendmail이 정상적으로 실행될수있도록
sendmail이 참조하는 /etc/mail 디렉토리를 /www/etc/mail디렉토리로
카피한다.그리고 /etc/passwd에서 mail유저에 해당하는 필드를 복사해서
/www/etc/passwd에 추가한다.

/www/var/spool/clientmqueue 디렉토리를 만들고 소유권을 root.mail그룹으로
변경한다
- clientmqueue와 mail디렉토리 퍼미션은 755이상 줘야한다 -

(혹은 기존 /var/spool/clientmqueue디렉토리를 복사해도 된다.물론
퍼미션은 유지한채로 복사해야한다)

역시 같은 방법으로 /www/var/spool/mail 디렉토리를 만들고 소유권은
clientmqueue와 같이 설정한다.

또한 /etc/shadow에서도 mail유저에 해당하는 필드를 /www/etc/shadow에 추가한다.

php.ini에서 snedmail의 경로는 주석처리된 기본값으로 사용한다.
설정이 정확히 됐다면 chroot된 apache의 모듈인 php에서 폼메일등으로
메일을 보냈다면 sendmail은 /www/usr/sbin/sendmail이 실행되고
실제 메일데이타는 /var/spool/mail/user_name으로 저장될것이다.

웹메일등의 프로그램으로 정상적으로 메일이 도착하는지 확인하는것으로 sendmail
설정이 끝났다.
2006/09/11 10:34 2006/09/11 10:34
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > lablue
원본 http://blog.naver.com/lablue/40012274156
아파치 에러 코드 - 304 응답코드



304 응답코드에 대하여 한마디-_-



304 : not modified 는 웹페이지에서 요청만하고 자신의 브라우저의 캐쉬를 사용하는 경우더군요...



짭...아시는 분도 계시겠지만 저는 방금 안거라 한 줄 더 적어봤습니다...



그럼...< ㅑ ㅇ~



>HTTP 1.1 status codes [TOP]

>

>100 : Continue

>101 : Switching protocols

>200 : OK, 에러없이 전송 성공

>201 : Created, POST 명령 실행 및 성공

>202 : Accepted, 서버가 클라이언트 명령을 받음

>203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부만 전송

>204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음

>205 : Reset content

>206 : Partial content

>300 : Multiple choices, 최근에 옮겨진 데이터를 요청

>301 : Moved permanently, 요구한 데謙拷?변경된 임시 URL에서 찾았음

>302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시

>303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음

>304 : Not modified

>305 : Use proxy

>400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음

>401 : Unauthorized, 클라이언트의 인증 실패

>402 : Payment required, 예약됨

>403 : Forbidden, 접근이 거부된 문서를 요청함

>404 : Not found, 문서를 찾을 수 없음

>405 : Method not allowed, 리소스를 허용안함

>406 : Not acceptable, 허용할 수 없음

>407 : Proxy authentication required, 프록시 인증 필요

>408 : Request timeout, 요청시간이 지남

>409 : Conflict

>410 : Gone, 영구적으로 사용할 수 없음

>411 : Length required

>412 : Precondition failed, 전체조건 실패

>413 : Request entity too large,

>414 : Request-URI too long, URL이 너무 김

>415 : Unsupported media type

>500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시)

>501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함

>502 : Bad gateway, 서버의 과부하 상태

>503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태

>504 : Gateway timeout

>505 : HTTP version not supported

2006/09/11 10:34 2006/09/11 10:34
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 향기가 있는 프로그래밍
원본 http://blog.naver.com/gogojinny80/100019463276
1. lingerd란 무엇일까?

아파치에서 갑작스런 libhttpd.ep 혹은 httpd가 상승하여 cpu혹은 메모리를 과도하게 점유할 경우, 일정 튜닝으로 이를 막을 순 있지만, Dos상당의공격에서는 데먼은 저절로 죽어버린다.

이때, lingerd라는 엑셀레이트를 설치하면, 아파치는 해당 과부하 프로쎄서를 죽이면서 서버가 죽는 것을 방지할 수 있다.

2. lingerd 구하기

http://www.iagora.com/about/software/lingerd/

3. 설치하기

mkdir -p /var/run/lingerd/
chown nobody.nobody /var/run/lingerd/
chmod 700 /var/run/lingerd/

tar xvzf lingerd-xxx.gz
cd lingerd-xxx
make
이렇게 하면 lingerd란 바이너리가 생긴다.

cp lingerd /usr/local/sbin
cp extra/lingerd.rc /etc/rc.d/init.d/lingerd
chkconfig --level 3 lingerd on
이렇게 해서 부트로더에 올린다.

/etc/rc.d/init.d/lingerd start


   cp apache-1.3/ap_lingerd.c li_config.h $APACHE/src/main/
   patch -p0 -d $APACHE/src/ < apache-1.3/aplinger.diff

이 과정은 아파치를 위한 과정이다.
아파치소스가 있는 폴더가 $APACHE라고 가정해서 입력하라.
즉 $APACHE는 님의 환경에 맞는 절대경로를 입력하면 된다.

이제 패치가 완료되면, APM설치과정과 같이

apache> ./configure --prefix=/usr/local/apache
apache> cd ../php-4.0.24
php> ...설치과정진행
php> cd ../apache
apache> 설치과정진행 ./configure....-> make -> make install

이렇게 하여 설치를 완료한다.

apache 재구동한다.

설치완료
- 이제부터 /var/log/messages 에 로그가 생성된다.
- /var/run/lingerd/에는 프로쎄서가 동작한다.
- /usr/local/apache/logs/error_log에는 문제발생시, 에러로그가 기록된다.

이렇게함으로써 아파치에 대한 안전한 운영이 가능해진다.
2006/09/11 10:33 2006/09/11 10:33
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 상큼한자유
원본 http://blog.naver.com/innko/21056108
#############################################################
#
# 문제가 발생했을 때에는 httpd.conf (srm.conf, access.conf) 설정 파일의
# 문법을 제대로 지켰는지 먼저 점검하고 다른 아파치 관리자들에게 도움을
# 요청하는 것이 좋습니다.
#
# /usr/sbin/httpd 명령에 -t 옵션을 주면 문법만 점검합니다.
# 기타 다른 옵션에 대하여 알고 싶을 때에는 -h 옵션을 사용하십시오.
#
# 예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'
#
#############################################################
# --
#
# 간단한 용어 정리)
#
# --
#
# Rob McCool 씨의 NCSA 서버 설정 파일에 기초한 것임.
#
# 이 파일은 아파치(Apache) 서버 주 설정 파일이다. 이 파일에 들어있는
# 설정 지시자(directive)를 통해 서버의 작동 방식을 지시한다.
# 각 지시자에 대한 자세한 정보를 원하면 http://www.apache.org/docs를
# 참고하라.
#
# 정확한 이해 없이 대충 읽어나가는 일이 없도록 하자. 여기에 적은 내용을
# 그대로 여러분의 상황에 적용시키려 하지 말라. 다음 내용은 실제 지시
# 내용을 위한 힌트라고만 생각하자. 내용에 대하여 의문이 있을 때에는
# 온라인 문서를 참조하라. 이 사실에 대하여 지금 여러분에게 충분히
# 경고해 두었음을 밝히는 바이다.
#
# 아파치 서버는 이 파일을 읽고 난 후, /home/httpd/conf/srm.conf 파일을
# 처리하고 그 다음 /home/httpd/conf/access.conf 파일을 읽는다.
# 지금 현재 이 설정 파일 안에서 ResourceConfig, AccessConfig 지시자를 사용하여
# 설정 파일 이름을 바꾸면, 변경된 이름의 설정 파일을 읽는다.
# (여기서 /home/httpd 부분은 아파치 서버의 기본 디렉토리로 대체하여
# 생각하면 된다. 예를 들어 여러분이 직접 아파치를 컴파일하여 설치하는
# 경우에는 일반적으로 /usr/local/apache 가 된다. 컴파일하여 직접 설치할
# 때에는 패키지와 충돌되지 않도록 둘 중 하나만 사용하라.)
#
# 지시자는 3 개의 기본적인 섹션으로 묶여 있다:
#
# 1. 아파치 서버 프로세스의 전반적인 작동을 제어하는 지시자
# ('global environment, 전체 환경')
#
# 2. 가상 호스트에 의해 처리되지 않는 요청을 모두 처리하는 주 서버 또는
# 기본 서버의 작동을 제어하는 지시자.
#
# 이 지시자 내용은 모든 가상 호스트의 기본값이기도 하다.
# 3. 다른 IP 주소 또는 다른 호스트 이름에 대한 요청을 처리할 가상
# 호스트 설정
#
# 설정 파일과 로그 파일 이름 : 만약 파일 이름이 "/"로 (또는 Win32 버전의
# 경우 "드라이브명:/" ) 시작하면 주어진 파일 이름 그대로를 사용한다.
# 그러나 "/" 로 시작하지 않을 때에는 ServerRoot 의 값이 그 앞에 추가된다.
# 따라서 "logs/foo.log"는 ServerRoot 값 (예를 들어 "/usr/local/apache")이
# 앞에 추가되어 서버는 최종적으로 "/usr/local/apache/logs/foo.log"를
# 사용한다.
#
#############################################################

### 섹션 1 : 전체 환경 (Global Environment) => 이곳 부터는 실제 아파치 서버의 중요한 설정부분입니다.

#
# 이 섹션에 적힌 지시자는 예를 들어 아파치 서버가 처리할 수 있는 동시
# 요청의 갯수라든지 다른 설정 파일의 이름 등 아파치 서버의 전반적인
# 작동에 영향을 미친다.
#
# 서버 유형(ServerType)은 inetd 또는 standalone 둘 중 하나이다.
# inetd 방식은 유닉스 플랫폼에서만 지원된다.
#
ServerType standalone
# => standlone타입과 inetd타입이 있으나 클라아언트의 요구에 신속한 반응을
#위해서는 standalone모드를 권장합니다.

#
# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이
# 기록되는 디렉토리의 최상위 경로명.
#
# 주의! 만약 서버 루트를 NFS (또는 기타 네트웍 파일 시스템) 마운트된
# 곳에 두고자 한다면 LockFile 문서를 꼭 읽어보아야 한다.
# (<URL:http://www.apache.org/docs/mod/core.html#lockfile>;);
# 문서를 읽고 나면 앞으로 닥칠 지 모르는 몇 가지 문제점을 피할 수 있다.
#
# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!
#
ServerRoot "/etc/httpd"
# => 웹서버에 관련된 환경설정 파일과 에러,로고파일들이 존재하는 위치
# 주의:디레토리의 마지막에 / 를 붙이지 말것

#
# LockFile 지시자는 아파치를 USE_FCNTL_SERIALIZED_ACCEPT 또는
# USE_FLOCK_SERIALIZED_ACCEPT 옵션을 주고 컴파일한 경우, 잠금 파일을
# 경로를 지정할 때 사용한다. 이 지시자 값은 일반적으로 기본값이
# 되도록 놔둔다. 이 값을 바꾸는 경우는 로그 디렉토리가 NFS 마운트된
# 곳에 있는 경우로서 잠금 파일은 항상 네트웍 파일 시스템이 아닌
# 로컬 디스크에 저장되어야 하기 때문이다. 주 서버 프로세서의 PID 값이
# 자동으로 파일 이름 뒤에 붙는다.
#
LockFile /var/lock/httpd.lock

#
# PidFile: 서버가 시동될 때 자신의 프로세스 고유 번호를 기록할 파일
#
PidFile /var/run/httpd.pid

#
# ScoreBoardFile: 내부 서버 프로세스 정보를 기록하는데 사용하는 파일.
# 모든 아키텍쳐에서 꼭 필요한 것은 아니다. 하지만 필요하다고 생각하는
# 경우에는 하나의 아파치 프로그램을 두 번 이상 실행시키는 경우 값이
# 중복되지 않도록 해주는 것만 잊지 않으면 된다.
#
ScoreBoardFile /var/run/httpd.scoreboard

#
# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을
# 차례대로 읽어나간다. 나중에 있는 2 개의 파일은 현재 아무 내용도
# 없는 빈 상태로 배포되고 있다. 왜냐하면 모든 지시자를 그냥 하나의
# 파일에 적는 것이 더욱 명료하기 때문이다. 주석으로 처리되어 있는
# 값은 기본값이다. 서버가 이 파일 내용을 무시하도록 하기 위해서는
# "/dev/null" (유닉스의 경우) 또는 "nul" (Win32) 값을 지정한다.
#
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

#
# Timeout: 받기/보내기 타임 아웃 시간
# 웹 브라우저에게 타임아웃 신호를 보낸 때까지의 기다리는 시간 (단위: 초)
#
Timeout 300

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

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

#
# Server-pool size regulation. Rather than making you guess how many
# server processes you need, Apache dynamically adapts to the load it
# sees --- that is, it tries to maintain enough server processes to
# handle the current load, plus a few spare servers to handle transient
# load spikes (e.g., multiple simultaneous requests from a single
# Netscape browser).
#
# It does this by periodically checking how many servers are waiting
# for a request. If there are fewer than MinSpareServers, it creates
# a new spare. If there are more than MaxSpareServers, some of the
# spares die off. The default values are probably OK for most sites.
#
MinSpareServers 5
MaxSpareServers 20

#
# Number of servers to start initially --- should be a reasonable ballpark
# figure.
#
StartServers 5

#
# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# the system with it as it spirals down...
#
MaxClients 150

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

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

#
# BindAddress: 이 옵션을 사용하여 가상 호스트를 지원할 수 있다.
# 이 지시자를 이용하여 서버가 귀기울일 IP 주소를 지시할 수 있다.
# "*", IP 주소, 또는 완전한 인터넷 도메인 이름을 사용할 수 있다.
# <VirtualHost>, Listen 지시자도 참고하라.
#
#BindAddress *
#=> 가상 호스트, 즉 실제 리얼 IP 한 개에 여러개의 도메인 네임을
#등록시킬 경우 ( 이방법으로 호스팅 사업을 하는 사업체가 많다.)
#자세한 것은 맨아래 <VirtualHost> 부부을 참고하십시요.
#버츄얼 호스트를 하실려면 #을 삭제하십시요.

#
#동적 공유 객체(Dynamic Shared Object, DSO) 지원
#
# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련된
# 지시자를 사용하기에 앞서 알맞게 `LoadModule' 지시자로 모듈을
# 지시해주어야 한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은
# 아파치 1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는
# httpd 바이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을
# 알고 싶을 때에는 `httpd -l' 명령을 실행한다.
# *주의* 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이
# 아무렇게나 순서를 바꾸지 말라.
#
# 예 :
# LoadModule foo_module modules/mod_foo.so
#
# 모듈 관련 문서는 HTML 형식으로 "/home/httpd/manual/mod" 에 놓아두었다.
#
# *주의* LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라
# 나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.
#
#LoadModule mmap_static_module modules/mod_mmap_static.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule env_module modules/mod_env.so
LoadModule config_log_module modules/mod_log_config.so
LoadModule agent_log_module modules/mod_log_agent.so
LoadModule referer_log_module modules/mod_log_referer.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so
LoadModule includes_module modules/mod_include.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule asis_module modules/mod_asis.so
LoadModule imap_module modules/mod_imap.so
LoadModule action_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule anon_auth_module modules/mod_auth_anon.so
LoadModule db_auth_module modules/mod_auth_db.so
#LoadModule digest_module modules/mod_digest.so
#LoadModule proxy_module modules/libproxy.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule example_module modules/mod_example.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule bandwidth_module modules/mod_bandwidth.so
#LoadModule put_module modules/mod_put.so

#
# 다음 모듈은 아파치 펄 모듈로서 CGI 스크립트로 펄을 많이 사용하는
# 사람들에게 펄 코드 실행 속도의 향상을 가져다 줍니다.
#
# 주의 : 설정을 바꾼 후 한 가지 할 일이 더 있다.
# <Location /perl> ... </Location>
# 위와 같은 설정을 찾아서 펄 스크립트를 사용할 수 있는
# 디렉토리를 설정해주어야 한다.
#
<IfDefine HAVE_PERL>
LoadModule perl_module modules/libperl.so
</IfDefine>

#
# 확장 모듈
#
<IfDefine HAVE_PHP>
LoadModule php_module modules/mod_php.so
</IfDefine>

#
# 다음 모듈은 MySQL 데이터베이스와 더불어 서버 스크립팅 언어로 인기를
# 누리고 있는 PHP3 모듈입니다.
#
<IfDefine HAVE_PHP3>
LoadModule php3_module modules/libphp3.so
</IfDefine>
<IfDefine HAVE_PHP4>
LoadModule php4_module modules/libphp4.so
</IfDefine>
<IfDefine HAVE_DAV>
LoadModule dav_module modules/libdav.so
</IfDefine>
<IfDefine HAVE_ROAMING>
LoadModule roaming_module modules/mod_roaming.so
</IfDefine>
<IfDefine HAVE_SSL>
LoadModule ssl_module modules/libssl.so
</IfDefine>

#
# 모듈 실행 순서를 정확하게 하기 위해 사용 가능한 모듈(정적 또는 공유
# 모듈 포함)로부터 완전한 목록을 다시 만들어 둔 것이다.
# [LOADMODULE 섹션을 하나라도 수정했다면 이 부분도 역시 알맞게 수정하라]
#
ClearModuleList
#AddModule mod_mmap_static.c
AddModule mod_vhost_alias.c
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_log_agent.c
AddModule mod_log_referer.c
#AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
#AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
#AddModule mod_digest.c
#AddModule mod_proxy.c
#AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
#AddModule mod_usertrack.c
#AddModule mod_example.c
#AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c
#AddModule mod_bandwidth.c
#AddModule mod_put.c
<IfDefine HAVE_PERL>
AddModule mod_perl.c
</IfDefine>
<IfDefine HAVE_PHP>
AddModule mod_php.c
</IfDefine>
<IfDefine HAVE_PHP3>
AddModule mod_php3.c
</IfDefine>
<IfDefine HAVE_PHP4>
AddModule mod_php4.c
</IfDefine>
<IfDefine HAVE_DAV>
AddModule mod_dav.c
</IfDefine>
<IfDefine HAVE_ROAMING>
AddModule mod_roaming.c
</IfDefine>
<IfDefine HAVE_SSL>
AddModule mod_ssl.c
</IfDefine>

#
# ExtendedStatus 지시자는 "server-status" 처리기가 호출되었을 때
# 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지
# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를
# (ExtendedStatus Off) 제어한다. 기본값은 Off 이다.
#
#ExtendedStatus On

#############################################################

### 섹션 2: '주(Main)' 서버 설정

#
# 이 섹션에 있는 지시자는 <VirtualHost> 정의에 의해 처리되지 않는
# 모든 요청에 응답할 '주' 서버가 사용할 값을 정한다.
# 이 값들은 또한 이 파일 뒷 부분에서 정의할 모든 <VirtualHost>
# 컨테이너의 기본값을 제공하기도 한다.
#
# 여기 나오는 모든 지시자는 <VirtualHost> 컨테이너 안에서도 사용할
# 수 있으며 그 안에서 사용되면 해당 가상 호스트에 대하여 전체
# 기본값을 무시하고 새롭게 정한 값이 채택된다.
#
#
# 만약 ServerType ('Global Environment' 섹션에서 설정)이 "inetd"인
# 경우, inetd 설정 내용을 따르기 때문에 다시 몇 가지 지시자는
# 아무런 효력을 발휘하지 않는다.
# ServerAdmin 지시자까지 그냥 건너뛴다.
#
#
# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.
# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는
# root 권한으로 실행되어야 한다.
#
Port 80
# => 웹서버의 포트번호 (아파치 웹서버는 80을 기본포트로 합니다.)

#
# httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은
# httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자
# 권한으로 전환해야 한다.
#
# User/Group: httpd가 실행된 권한의 사용자/그룹의 이름(또는 #번호).
# . SCO (ODT 3)에서는 "User nouser"와 "Group nogroup"을 사용한다.
# . UPUX 에서는 nobody로 실행하는 경우 공유 메모리를 사용할 수
# 없을 것이다. 이 때는 www 등의 사용자를 만들고 그 사용자 권한으로
# 실행되도록 한다.
# 주의) 몇몇 커널들은 60000 이상의 (unsigned) 그룹 값을 설정하면
# setgid(Group), semctl(IPC_SET) 함수를 거부한다.
# 이런 시스템에서는 Group #-1을 사용하지 말라!
#
User nobody
Group nobody
# => 웹서바를 실행할 때 소유권을 갖는 사용자와 그룹
# * 주의 : 사용자와 그릅을 root로 하면 보안상 위험!
#
# ServerAdmin: 서버에 문제가 발생했을 때 메일을 보낼 메일 주소.
# 이 주소는 예를 들어 에러 문서와 같이 서버가 생성하는 페이지에
# 나타날 것이다.
#
ServerAdmin admin@yourdomain.co.kr

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

#
# DocumentRoot: 제공할 문서의 상위 디렉토리.
# 기본적으로 모든 요청은 이 디렉토리로부터 처리된다. 하지만
# 심볼릭 링크나 앨리어스(alias)를 사용하여 다른 위치를 가리키도록
# 할 수 있다.
#
DocumentRoot "/var/www/html"
# 와우리눅스 까치버젼은 "/var/www/html"

#
# Each directory to which Apache has access, can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# permissions.
#
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# 다음 내용은 여러분이 설정한 DocumentRoot 값으로 변경해서 사용한다.
#
<Directory "/var/www/html">
# => 브라우저에서 도메인 주소를 쳤을 경우 index.html파일이 위치하는 디렉토리

#
# 다음 값에는 "None", "All", 또는 "Indexes : index.html이 없을 경우
# 디렉토리를 보여 줄 것인지를 결정", "Includes : 서버측의 SSI를 허용할 것인지를 결정",
# "FollowSymLinks : 서버가 디렉토리의 심볼릭 링크를 따를 것인가를 결정"
# "ExecCGI :cgi프로그램을 실행 시킬건질 결정", "MultiViews"의 자유로운 조합이
# 가능하다.
#
# "MultiViews" 만큼은 "Options All"을 사용한다 할 지라도 명시적으로
# 적어야만 작동한다는 사실을 알아두자.
#
Options Indexes Includes FollowSymLinks

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

#
# 서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.
#
#Order allow,deny
# > CGI를 실행시킬려면 #표시하여야 함
Allow from all
</Directory>

#
# UserDir: ~user 요청을 받았을 때 사용자의 홈 디렉토리 뒤에 추가할
# 디렉토리 이름.
#
#

# 주의 : 알짜 리눅스 시스템에서는 사용자가 자신의 홈 디렉토리에 public_html
# 디렉토리를 만들어도 외부에서 홈 페이지를 볼 수 없다.
# 왜냐하면 각 계정 홈 디렉토리에 대한 보안을 중요하게 생각했기 때문에
# 홈 디렉토리에 대하여 사용자 계정과 사용자 자신의 그룹 이외에는
# 아무런 접근 허가권도 갖고 있지 않기 때문이다. =>
# 초기의 계정 디렉토리의 퍼미션은 644입니다.
#
# 개인 홈 디렉토리를 가질 사람은 chmod a+x ~ 명령을 일단 실행해주어
# (보통) nobody 권한의 아파치 프로세스가 홈 디렉토리에 접근할 수
# 있도록 허가해주어야 한다.
# 물론 public_html과 홈 페이지 파일에 대하여 모든 사용자가 최소한
# 읽기 권한은 갖도록 설정해주어야 한다.
#
UserDir public_html www web htdocs

#
# UserDir 디렉토리에 대한 접근을 제어한다. 다음은 사용자 홈 페이지에
# 대하여 읽기만 가능하도록 한 예제 설정 내용이다. 참고 자료로
# 사용하기 바란다.
#
#<Directory /home/*/public_html>
# =>글<Directory "/home/httpd/html">을 참조하세요!
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
# Order deny,allow
# Deny from all
# </Limit>
#</Directory>

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

DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi
# => 브라우저가 맨처음 홈페이지 디렉토리에서 찾을 파일

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


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

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

#
# UseCanonicalName: (1.3 버전에 새롭게 등장) 이 설정을 켜두면,
# 아파치가 자기 참조 URL(반응이 오고 있는 서버를 다시 가리키는
# URL)을 만들 필요가 있을 때마다 "공식적인" 이름을 만들기 위해
# ServerName과 Port를 사용한다. 그렇지 않으면 아파치는 가능한 한
# 클라이언트가 제공한 호스트이름:포트 값을 사용한다.
# 이 설정은 CGI 스크립트의 SERVER_NAME, SERVER_PORT에도 영향을
# 미친다.
#
UseCanonicalName On

#
# TypesConfig 는 mime.types 파일 또는 이에 해당하는 파일을 찾을
# 위치를 결정한다.
#
TypesConfig /etc/mime.types

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

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

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

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

#
# LogLevel: error_log에 기록될 메시지 분량을 제어한다.
# debug, info, notice, warn, error, crit, 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

#
# 접근 로그 파일의 위치와 형식(공통 로그파일 형식)
# <VirtualHost> 컨테이너 안에서 접근 로그파일 설정을 하지 않으면
# 모든 기록이 이 파일에 남게 된다. 이와 반대로 각 <VirtualHost> 마다
# 접근 로그파일을 정의하면 모든 처리가 바로 그 파일에 기록된다.
#
CustomLog /var/log/httpd/access_log common
# => 가상 호스트 각 도메인 디렉토리내에 로그파일을 두려 할경우

#
# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는
# 다음 지시 내용의 주석 처리를 해제하라.
#
# 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다.
# 에이전트 로그를 남기면 여러분의 사이트에 방문하는 브라우져의 종류에 대한
# 통계를 낼 수 있다.
#
# 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로
# 직전에 방문한 사이트를 말한다.
#
#CustomLog /var/log/httpd/referer_log referer
#CustomLog /var/log/httpd/agent_log agent

#
# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는
# (통합 로그파일 형식) 다음 지시 내용을 사용하라.
#
# 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게
# 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!
#
#CustomLog /var/log/httpd/access_log combined

#
# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록,
# mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에
# 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다.
# "Email"로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.
# On | Off | EMail 중 하나로 설정한다.
#
ServerSignature On

#
# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음)
# 홈페이지의 링크와 같다면 비유가 될까 ?..... 형식은 다음과 같다.
# Alias 가짜이름 실제이름
#
# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야
# 처리함을 잘 알아두자. 따라서 "/icons"는 별칭 처리되지 않고
# "/icons/"만 별칭 처리된다.
#
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

#
# ScriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다.
# ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리
# 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다.
# 맨 뒤에 붙는 "/" 에 대한 규칙은 Alias와 마찬가지이다.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
# => 특정 디렉토리에서만 CGI스크립트가 실행 되길 원할 경우
<Directory /home/*>
Options ExecCGI Includes Indexes FollowSymLinks
</Directory>

#
# "/home/httpd/cgi-bin" 부분은 ScriptAlias로 별칭 처리된 실제 CGI
# 디렉토리로 설정해야 한다.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

#
# 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/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한
# 기본 아이콘 파일을 설정한다.
#
DefaultIcon /icons/unknown.gif

#
# AddDescription은 서버 자동 생성 인덱스의 파일명 뒤에 간단한 설명을
# 넣을 때 사용한다. FancyIndexing을 사용할 때에만 보인다.
# 형식: AddDescription "설명" 화일명
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

# META 태그를 사용하여 Content-type의 charset을 설정하지 않은
# 문서에 대하여 기본 문자셋을 iso-8859-1 로 해 버리는 패치에
# 대한 설정 (한글 사용을 위해서는 어쩌면 필요한 설정일지도
# 모른다. 일단 문제가 없으면 그냥 놔두는 것도 괜찮을지 모르겠지만
# 문제가 된다면 설정을 해보는 것도 괜찮을것 같다. 일단 나의 테스트
# 로는 euc-kr로의 설정은 문제가 발생한다. -- 패키저 주^^)
AddDefaultCharset Off
#AddDefaultCharset euc-kr

#
# 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 tgz
<IfModule mod_negotiation.c>

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

AddLanguage ko .ko
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

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

#
# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고
# 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다.
#
# php4 module이 설치되었을 경우 아래의 설정에 의해 사용을 할수 있도
# 록 한다.
#
<IfModule mod_php4.c>
AddType application/x-httpd-php .php4 .php3 .phtml .php
AddType application/x-httpd-php-source .phps
</IfModule>

# php3의 경우
<IfModule mod_php3.c>
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
</IfModule>

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

AddType application/x-tar .tgz

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

#
# 서버 처리 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

#
# type map을 사용하려면...
#
#AddHandler type-map var
#

#
# perl 모듈을 사용하기 위한 설정
#
<IfModule mod_perl.c>
Alias /perl/ /home/httpd/perl/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

#
# Action을 사용하면 매칭되는 파일이 호출될 때마다 그 미디어 타입에 맞는
# 스크립트를 시행시킬 수 있다. 빈번하게 사용되는 CGI 파일 프로세서에
# 대하여 반복적으로 URL을 사용하지 않아도 된다.
# Format: Action media/type /cgi-script/location
# Format: Action handler-name /cgi-script/location
#

#
# MetaDir: 아파치 서버가 메타 정보 파일을 찾을 디렉토리 이름.
# 이 파일에는 문서를 보낼 때 추가하고자 하는 추가 HTTP 헤더 정보가
# 들어있다.
#
#MetaDir .web

#
# MetaSuffix: 메타 정보를 담고 있는 파일의 접미어를 설정한다.
#
#MetaSuffix .meta

#
# 사용자 정의 에러 반응 메시지 (아파치 스타일)
# 다음 3 가지 방법으로 가능하다.
#
# 1) 보통의 텍스트
#ErrorDocument 500 "The server made a boo boo.
# 주목: " 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않는다.
#
# 2) 지역적인 방향 전환
# ErrorDocument 404 /missing.html
#
# 지역적 URL인 /missing.html로 방향 전환하기
# ErrorDocument 404 /cgi-bin/missing_handler.pl
#
# 주목: 스크립트나 SSI로 방향 전환시킬 수 있다.
# ErrorDocument 401 /401.html
# ErrorDocument 403 /403.html
# ErrorDocument 404 /404.html
# ErrorDocument 500 /500.html
#
#
# 3) 외부 방향 전환
# ErrorDocument 402 http://some.other_server.com/subscription_info.html
# 주목: 원래 요청과 관련있는 환경 변수의 상당수가 스크립트에
# 전달되지 못한다는 점을 알고 있어야 한다.
#
# 다음 지시자는 보통의 HTTP 반응 방식을 수정한다.
# 첫번째 것은 네스케이프 2.x 또는 그를 흉내내는 브라우져에 대하여
# KeepAlive 기능을 쓰지 않도록 한다. 이 브라우져들은 KeepAlive 구현에
# 문제점을 갖고 있기 때문이다.
# 두번째 것은 HTTP/1.1을 잘못 구현하였고 301 또는 302 (redirect) 응답에
# 대하여 KeepAlive를 제대로 지원하지 못하는 마이크로소프트 인터넷
# 익스플로러 4.0b2를 위한 것이다.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#
# 다음은 기본적인 1.1 응답도 제대로 처리하지 못함으로써 HTTP/1.1 스펙을
# 위반하고 있는 브라우져에 대하여 HTTP/1.1 응답을 하지 않도록 한다.
#
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

#
# 다음은 WebZIP, Teleport 등의 긁어가기 program을 막기 위한 설정 이다.
BrowserMatch "WebZIP" no_access
BrowserMatch "Teleport" no_access
BrowserMatch "Teleport Pro/1.29" no_access
BrowserMatch "NamoWebEditor" no_access
BrowserMatch "WebTrack-HTTPP" no_access
BrowserMatch "WebSymmetrix" no_access
#

# perl 모듈을 사용하기 위한 설정
<IfModule mod_perl.c>
Alias /perl/ /var/www/perl/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

#
# Allow http put (such as Netscape Gold's publish feature)
# Use htpasswd to generate /etc/httpd/conf/passwd.
# You must unremark these two lines at the top of this file as well:
#LoadModule put_module modules/mod_put.so
#AddModule mod_put.c
#
#Alias /upload /tmp
#<Location /upload>
# EnablePut On
# AuthType Basic
# AuthName Temporary
# AuthUserFile /etc/httpd/conf/passwd
# EnableDelete Off
# umask 007
# <Limit PUT>
# require valid-user
# </Limit>
#</Location>

#
# http://servername/server-status을 통해 서버 상태 보고를 허용한다.
# 웹브라우저에서 아파치의 상태를 볼수 있게 하는 기능
# 여기서 "localhost" 부분을 허용할 도메인으로 바꿔 사용하라.
#
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

#
# http://servername/server-info를 통하여 원격 서버 설정 보고를 허용한다.
# 마찬가지로 웹 브라우저에서 서버설정을 볼 수 있다.
# (mod_info.c가 적재되어 있어야 한다.)
# 여기서 "localhost" 부분을 허용할 도메인으로 바꿔 사용하라.
#
#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

# Allow access to local system documentation from localhost
Alias /doc/ /usr/share/doc/
<Location /doc>
order deny,allow
deny from all
allow from localhost
Options Indexes FollowSymLinks
</Location>

#
# 1.1 버전 이전의 오래 된 버그를 악용하려는 사람들이 있다는 보고를 받았다.
# 이 버그는 아파치 일부분으로 제공한 CGI 스크립트와 연관있다.
# 이 부분의 주석 처리를 없애면 이 버그를 악용하는 공격이 있을 때
# phf.apache.org 상의 기록 스크립트로 방향 전환시킬 수 있다.
# 또는 support/phf_abuse_log.cgi 스크립트를 사용하여 여러분 직접 기록할
# 수도 있다.
#
<Location /cgi-bin/phf*>
Deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>

#
# 프록시 서버 지시자. 프록시 서버 기능을 작동시키려면 다음 행의
# 주석을 해제시켜준다.
#
#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Directory proxy:*>
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Directory>

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

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

#</IfModule>
#
# 프록시 설정 끝
#
#############################################################

### 섹션 3: 가상 호스트 => 실제 IP 주소 1개에 여러개의 도메인 네임을 등록시킬 때
# 예) 203.237.102.12라는 주소에 azim.co.kr 과 linux.co.kr 과 joayo.net등등
# 여러개의 도메인을 등록 시킬때.
#
# VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트이름을
# 관리하고 싶다면 각각에 대하여 VirtualHost 컨테이너를 설정한다.
# 가상 호스트를 설정하기에 앞서 자세한 설명을
# <URL:http://www.apache.org/docs/vhosts/>;에 들러 읽어보기 바란다.
# 가상 호스트 설정 내용을 점검해보기 위해서는 아파치를 실행할 때
# 명령행 옵션으로 '-S'를 사용한다.

#
# 이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 개,
# 그리고 포트 번호)를 정의해주어야 한다.
#
# 경고 : 아파치 1.2.x 버전에서만 가상 호스트 기능을 사용해 온 관리자들은
# 아파치 1.3.x 버전에서 NameVirtualHost 지시자로 IP 주소를
# 해주어야만 가상 호스트가 제대로 동작한다는 사실을 꼭 알아야 한다!!!
# 1.2 버전을 쓰다 1.3 버전으로 와서 가상 호스트가 동작하지 않는
# 문제의 99% 는 바로 NameVirtualHost 설정에 있다.
#
#
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78

#
# 가상 호스트 예제:
# 거의 모든 아파치 지시자가 VirtualHost 컨테이너에 올 수 있다.
#
#<VirtualHost ip.address.of.www.yourdomain.com>
# ServerAdmin admin@www.yourdomain.com
# DocumentRoot /www/docs/www.yourdomain.com
# ServerName host.yourdomain.com
# ErrorLog logs/www.yourdomain.com-error_log
# CustomLog logs/www.yourdomain.com-access_log common
#</VirtualHost>
#<VirtualHost _default_:*>
#</VirtualHost>

<IfDefine HAVE_SSL>
##
## SSL Virtual Host Context
##

# Apache will only listen on port 80 by default. Defining the virtual server
# (below) won't make it automatically listen on the virtual server's port.
Listen 443

<VirtualHost _default_:443>

# General setup for the virtual host
DocumentRoot "/var/www/html"

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on

# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
#SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A test
# certificate can be generated with `make certificate' under
# built time. Keep in mind that if you've both a RSA and a DSA
# certificate you can configure both in parallel (to also allow
# the use of DSA ciphers, etc.)
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
#SSLCertificateFile /etc/httpd/conf/ssl.crt/server-dsa.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
#SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server-dsa.key

# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
#SSLCertificateChainFile /etc/httpd/conf/ssl.crt/ca.crt

# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/httpd/conf/ssl.crt
#SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt

# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/httpd/conf/ssl.crl
#SSLCARevocationFile /etc/httpd/conf/ssl.crl/ca-bundle.crl
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10

# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd."
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 )
# or %{REMOTE_ADDR} =~ m/^192.76.162.[0-9]+$/
#</Location>
# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables: SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment variables.
# Per default this exportation is switched off for performance reasons,
# because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only.
# o CompatEnvVars:
# This exports obsolete environment variables for backward compatibility
# to Apache-SSL 1.x, mod_ssl 2.0.x, Sioux 1.0 and Stronghold 2.x. Use this
# to provide compatibility to existing CGI scripts.
# o StrictRequire:
# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
# under a "Satisfy any" situation, i.e. when it applies access is denied
# and no other module can change it.
# o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire
<Files ~ ".(cgi|shtml)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

# Per-Server Logging:
# The home of a custom SSL log file. Use this when you want a
# compact non-error SSL logfile on a virtual host basis.
CustomLog /var/log/httpd/ssl_request_log
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"

</VirtualHost>

</IfDefine>

===============================================================
출처
http://mfiles.naver.net/9d46a974673c51e2c197/data1/2004/4/26/57/httpd_conf.txt
2006/09/11 10:33 2006/09/11 10:33
이 글에는 트랙백을 보낼 수 없습니다
출처 카페 > 리눅스 서버 관리하기 / 파파
원본 http://cafe.naver.com/linuxserver/1023

안녕하세요 오늘도 모처럼 카페에 들렸다 계정 제한에 대한 내용을 보고 제가 아는 간단한 내용을 정리하여 올립니다.


우선 위의 질문에 대한 내용이 잘 이해가 되지 않아 제 생각한데로 정리하여 봅니다. 틀리면 다시 답글로 질문하여 주세요.


오라클 설치후 사용자 수를 제한한다고 나와 있는 부분은 오라클 사용의 동시 접속자를 DB 접속에 대한 제한을 두는것입니다.


이에 오라클이 아닌 리눅스 내의 계정에 대한 동시 접속자를 제한을 두는 방법은 몇가지 형태로 설정이 가능합니다.


==> Redhat 리눅스의 경우 Redhat 7.0(커널 2.2.X)까지는 ipchains가, 그 이상의 배포판 (커널 2.4.x, 2.6.x)에는 iptables가 제공된다


- ipchains을 이용한 접속제한 예제
   ipchains -A output -d 0/0 -j DENY  >> 모든 외부 트래픽 차단 설정
   ipchains -A output -p tcp -d 0/0 telnet -j ACCEPT
    >> 외부 트래픽 중 telnet 트래픽을 모두 허용
   ipchains -A output -p tcp -d 172.16.5.1 telnet -j ACCEPT
    >> outbound 트래픽 중 172.16.5.1로의 텔넷 트래픽만 허용

- ipchains을 이용한 접속해재 예제
  ipchains -D output -p tcp -d 172.16.5.1 telnet >> 옵션을 -D로 변경하여 재입력

- iptables를 이용한 접속제한 예제
  iptables -A OUTPUT -d 0/0 -j DROP  >> 모든 외부트래픽 차단 설정
  iptables -A OUTPUT -p tcp -d 172.16.5.1 --destination-port telnet -j ACCEPT
  >> outbound 트래픽 중, 172.16.5.1로의 텔넷 트래픽만 허용

- iptables를 이용한 접속해재 예제
  iptables -D OUTPUT -p tcp -d 172.16.5.1 --destination-port telnet -j ACCEPT

==> 기본 제공되는 프로그램이외에도 공개용 방화벽 프로그램 등을 이용하여 접속제한을 설정할
  수 있습니다. (예:oops firewall)


==> 외부 사이트의 소스 실행 금지
 o 기본적으로 웹 호스팅 서버 차원에서 외부 사이트의 소스 실행을 금지시킴.
 o php.ini 파일에서 다음과 같이 설정한합니다.
    allow_url_fopen = Off

==> 필요시 특정 홈페이지만 외부 사이트의 소스 실행 허용
 o 과정 Ⅰ 적용 후 외부 사이트의 소스 실행이 반드시 필요한 홈페이지에 대해서만 선별적으로
    해당 기능을 허용.(이 경우 반드시 과정 Ⅲ의 패치 적용 필요)
 o httpd.conf 파일에서 특정 홈페이지 도메인(예를들어 www.abc.co.kr)에 다음과 같은 설정을
    추가.

   
            ServerAdmin webmaster@abc.co.kr
            DocumentRoot /home/abc/public_html
            ServerName www.abc.co.kr
            php_admin_flag allow_url_fopen On        <= 추가



>오라클 설치 후 보안관련해서 DB 서버가 운영되고

>있는 시스템은 꼭 필요한 사용자 아이디만 생성하여

>사용자 수를 제한한다라고 나와있는 부분이 있습니다.

>

>그렇다면 리눅스 자체에서 특정 아이디를 몇명까지

>동시 접속으로 재한한다는 말인거 같습니다.(긴가 민가

>해서 그런데 맞는가요 ^^;;;;)

>

>리눅스에서는 어떤 파일에 이런 정보가 있는지좀

>알려주새요.

2006/09/11 10:28 2006/09/11 10:28
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > webman21님의 블로그
원본 http://blog.naver.com/webman21/18079635

가령 "테스트.gif" 라는 이미지 파일이 있다면,  웹 브라우저에서 UTF-8 설정을 해줘야만 정상적으로 볼수가 있다.

그렇다고 해서 이미 만들어 놓은 한글 파일명으로 모두 바꿔야 할것인가?

그럴 필요는 없다.

mod_url 이라는 모듈만을 아파치에 추가해 주면 되는 문제이다.

추후에 모듈을 추가하기 위해서는 아파치가 DSO (동적) 으로 컴파일되어 있어야 하는데 여기에서는 아파치가 DSO로


설치되어 있다는 가정하에 설명하도록 한다.



<설치와 컴파일>

1. /usr/local/apache/bin/httpd -l | grep mod_so해서
mod_so.c 가 있다면 동적으로 컴파일 되었으므로, mod_url.c설치가 쉽다.

2. mod_url.c파일을 /usr/local/apache/libexec/안에 복사한다.

3. /usr/local/apache/bin/apxs -i -a -c /usr/local/apache/libexec/mod_url.c
 로 컴파일을 한다.

4. 정상적으로 설치가 되었다면, httpd.conf안에

--------------
AddModule redur |_module        libexec/mod_url.so
를 확인할수 있을것이다.

5. mod_usr.so 다음줄에
Addmodule mod_url.c
를 적어놓는다.

--------------------------
LoadModule redurl_module      libexec/mod_url.so
AddModule mod_url.c
--------------------------

6. 아파치설정의 마지막부분에


<IfModule mod_url.c>
CheckURL On
</IfModule>


부분을 추가한다음 아파치를 리부팅 시키면 정상적으로 한글 이름이 보여지는것을 확인할수 있을 것이다.

이제부터는 익스플로어에서 utf-8로 보내기를 체크를 해제하지 않아도 상관없이 한글이름 파일을 웹에서 확인할수 있다.


첨부파일을 다운로드하셔서 컴파일 하시기 바랍니다.

2006/09/11 10:28 2006/09/11 10:28
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 픽시시스템
원본 http://blog.naver.com/tipscorea/10000462120

개인 계정에서 블로그등의 사이트를 운영하시는 분들 중 가끔 외부에서의 컨텐츠 직링크로 인해 트래픽 초과에 걸리시는 분들이 많습니다. 트래픽 문제가 아니더라도, 무단 링크로 인해 저작권을 침해받는 경우도 있겠죠.
이를 해결하기 위해 레퍼러비교 같은 방법도 쓰곤 하는데, 아마 .htaccess 파일을 이용한 것도 많이들 아실 겁니다.

간단히, .htaccess와 워터마킹 기술을 이용해 이미지 링크 제어를 하는 법을 소개합니다.

일단, 이미지들이 저장되는 디렉토리에 .htaccess파일을 만듭니다. (이미 존재한다면 아래의 소스를 마지막에 추가하시면 됩니다.)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !explug\.com [NC]
RewriteCond %{HTTP_REFERER} !eouia0\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteRule (.*) image.php?image=$1

...........
잠깐 설명을 하자면,

RewriteCond %{HTTP_REFERER} !explug\.com [NC]
RewriteCond %{HTTP_REFERER} !eouia0\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]

이 부분에 링크를 허용할 URL들을 기재합니다. 정규식 패턴이므로 잘 알아서.. :)
위의 예의 경우 explug.com, eouia0가 포함되는 사이트, google 등에 링크를 허용한 경우입니다. 이 경우에는 원본 이미지를 마음대로 가져다 쓸 수 있습니다.
그외의 URL에서 링크가 걸릴 경우에는

RewriteRule (.*) image.php?image=$1

에 따라, image.php?image=파일이름 으로 리다이렉트됩니다. 만약 그냥 링크 자체를 끊고 싶으시다면 여기에 아무거나 써주셔도 되지요.

이제 워터마킹 처리를 위해 image.php를 작성합니다. GD라이브러리를 사용했으므로 GD가 사용가능한 계정이어야 합니다.

<?
define ("WATERMARK", "watermark.jpg");

header("Content-type: image/jpeg");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

$pic = strip_tags( $_GET['image'] );

$image_url = urldecode($pic);

if (!@fopen($image_url, "r")) {
   $dst_img = imagecreatefromjpeg(WATERMARK);
   $res = imagejpeg($dst_img, "", 100);
   die();
}

$file = pathinfo($image_url);
switch(strtoupper($file["extension"])) {
   case "JPG":
       $src_img = imagecreatefromjpeg($image_url);
       break;
   case "GIF":
       $src_img = imagecreatefromgif($image_url);
       break;
   case "PNG":
       $src_img = imagecreatefrompng($image_url);
       break;
}

$src_w = imagesx($src_img);
$src_h = imagesy($src_img);

$portion = $src_h / $src_w;
$dest_w = 300;
$dest_h = round($dest_w * $portion);

$dst_img = imagecreatetruecolor($dest_w, $dest_h);
imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $dest_w, $dest_h, $src_w, $src_h);

$watermark = imagecreatefromjpeg(WATERMARK);

$watermark_w = imagesx($watermark);
$watermark_h = imagesy($watermark);

$overlay_img = imagecreatetruecolor($watermark_w, $watermark_h);
imagecopy($overlay_img, $watermark, 0,0,0,0, $watermark_w, $watermark_h);
imagedestroy($watermark);

$white  = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
imagecolortransparent($overlay_img, $white);

$offsetX = $dest_w - $watermark_w - 3;
$offsetY = $dest_h - $watermark_h - 3;

imagecopymerge($dst_img,$overlay_img,$offsetX,$offsetY,0,0,$watermark_w,$watermark_h, 100);
imagedestroy($overlay_img);

$res = imagejpeg($dst_img, "", 100);
imagedestroy($dst_img);
?>

실행예는 링크를 보시면 이해하실 수 있을 겁니다. 링크를 허용한 사이트에서는 원본이, 링크를 허용하지 않은 사이트에서는 image.php에 의해 워터마크처리된 이미지로 링크가 걸리게 됩니다. 여기에서는 예를 위해 워터마킹 처리된 이미지의 사이즈를 가로 300으로 고정시켰지만 이 부분은 적당히 소스를 고치시면 원하는 대로 적용시키실 수 있으실 겁니다.

                                                                (주)픽시시스템(http://www.pixy.co.kr)

2006/09/11 10:28 2006/09/11 10:28
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)