mod-cband-0.9.6.1 버전은 자체 버그로 인해 트래픽 차단이 되지 않음, 0.9.7.5 버전을 사용할 것.


다운로드

mod-cband-0.9.7.5.gz

cd /usr/local/src

# tar zxvf mod-cband-0.9.7.5.tgz

# cd mod-cband-0.9.7.5

# ./configure --with-apxs=/usr/local/apache/bin/apxs

# make

# make install


apache 환경 설정

# vi httpd.conf  (모듈 자동생성)

LoadModule cband_module       modules/mod_cband.so


설정추가

<IfModule mod_cband.c>

    <Location /cband-status-me>

        SetHandler cband-status-me

    </Location>

    <Location /~*/cband-status-me>

        SetHandler cband-status-me

    </Location>

    <Location /cband-status>

        SetHandler cband-status

        Order deny,allow

        Deny from all

        Allow from 123.123.123

    </Location>

</IfModule>




트래픽 체크할 가상 호스트에 기간, 용량, 트래픽 초과시 503에러를 대신할 페이지 등을 설정합니다.

# vi httpd-vhost.conf

<VirtualHost *>

    ServerName mydomain.com    

    Document /home/www

    CBandLimit 300Mi                <<  300M 허용

    CBandPeriod 1D                  << 1일간

    CBandExceededURL http://mydomain.com/traffic_exceeded.html   << 트래픽초과시 보여지는 페이지

</VirtualHost>


데몬재실행

# /usr/local/apache/bin/apachectl restart


아래의 URL에서 cband status 를 확인할 수 있습니다.

http://mydomain.com/cband-status


xml 데이터도 출력이 가능합니다.

http://mydomain.com/cband-status?xml

참조 : http://www.oops4u.com/1606

 


1. 소스 Download

URL : http://sourceforge.net/projects/eaccelerator/files/eaccelerator/

2. 설치

# tar xvfz eaccelerator-0.9.6.1.tar.bz2
# cd eaccelerator-0.9.6.1
# PHP_PREFIX/bin/phpize
# ./configure --enable-eaccelerator=shared --with-php-config=PHP_PREFIX/bin/php-config
# make
# make install
# cd /var/tmp
# mkdir eaccelarator
# chmod 777 eaccelarator/

3. php.ini 파일 하단에 아래 항목 추가

[eAccelerator]
extension_dir="MAKE INSTALL시 나오는 모듈 경로"
extension=eaccelerator.so
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


1. JDK(java) 설치

JDK 7 다운로드 URL

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
 

rpm -ivh jdk-7u40-linux-x64.rpm

설치 확인 : rpm -qa | grep jdk
whereis java (jdk 가 설치된 경로 확인)

cd /usr/java
mv jdk1.7.0_40 /usr/local/java
vi /etc/profile 해서 아래의 내용을 최하단에 추가할 것!
#JAVA JDK7
export JAVA_HOME=/usr/local/java
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:/usr/local/bin:$JAVA_HOME/bin:$CATALINA_HOME/bin


source /etc/profile (/etc/profile의 내용을 적용시킴)
javac --version   (java가 연동되었는지 버전을 확인하는 것으로 검증) 

2. Apache Tomcat 설치

다운로드 사이트 http://tomcat.apache.org

tar zxxf apache-tomcat-7.0.37.tar.gz
cd apache-tomcat-7.0.37
mv apache-tomcat-7.0.37 /usr/local/
cd /usr/local
ln -s apache-tomcat-7.0.37/ tomcat
vi /usr/local/tomcat/conf/server.xml  해서 아래의 내용을 기존에 등록된 </Host> 하단에 추가!

        <Host name="hasudo24.com" appBase="/home/hasudo24/public_html"
              unpackWARs="true" autoDeploy="true">
         <context path="" docBase="/home/hasudo24/public_html"></context>
        </Host>

만일 다수의 계정을 Port 별로 추가하고 싶다면 아래의 <Service> 항목을 최하단에 추가

<Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8012" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="sudo04.com"  appBase="/home/sudo04/public_html"
            unpackWARs="true" autoDeploy="true">
            <context path="" docBase="/home/sudo04/public_html"></context>
      </Host>
    </Engine>
  </Service>
/usr/local/tomcat/bin/startup.sh
ll /usr/local/tomcat/conf/Catalina/ 하위에 적용을 원하는 도메인명 폴더가 있는지 확인하고 없으면
mkdir 호스트네임명폴더 해서 만든다.  (대부분 자동으로 만들어질 것이다.
cd 호스트네임명폴더
vi ROOT.xml 해서 아래의 내용을 추가한다.!
<?xml version="1.0" encoding="utf-8"?>
<Context crossContext="true" docBase="/home/계정명/public_html" path="/" reloadable="true">
</Context>
netstat -nlp 해서 8080 포트가 java 로 사용되는지 확인


3. Tomcat-Connector 설치
tar zxvf tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-1.2.37-src/native/
./configure --with-apxs=/usr/local/apache/bin/apxs
make && make install
cd apache-2.0/ (주의 : 자신의 apache 버전에 맞는 것으로 이동) mod_jk 가 설치된 것을 확인
* 정상적으로 설치가 되면 apache 모듈디렉토리에도 동일한 모듈이 만들어져있다.
 
(호스트먼트의 경우 first_setup/home/httpd/build 디렉토리를 /home/httpd/ 에 복사하면 에러 안남)
컴파일 에러가 발생하는 서버를 위해 완성된 모듈을 첨부한다. (첨부파일 참조)

vi /etc/httpd/conf/httpd.conf 해서 아래의 항목 추가
apache 1.3.x 의 경우 LoadModule jk_module     libexec/mod_jk.so
apache 2.x.x 의 경우 LoadModule jk_module          modules/mod_jk.so
 
그리고 아래의 Tomcat connector 설정 파일을 적절한 위치에 추가
 
# JSP TOMCAT
JkWorkersFile "/etc/httpd/conf/workers.properties"
JkLogFile "/var/log/httpd/mod_jk.log"
JkLogLevel emerg
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
JkMount /*.do ajp13
JkMount /*.pts ajp13
JkMount /*.app ajp13
JkMount /*.bbs ajp13
 
vi /etc/httpd/conf/workers.properties 해서 아래의 내용을 추가할 것!
 
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
#worker.ajp13.lbfactor=1
 
vi /etc/httpd/conf/virtualhosts.conf 해서 적용을 원하는 계정의 </Virtualhost> 상단에 아래내용 추가!
 
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
JkMount /*.do ajp13
 
해당 계정 public_html 하단에 test.jsp 파일을 만들어 아래내용 추가
 
<%@ page contentType="text/html; charset=euc-kr" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
 </HEAD>
 <BODY>
<% out.print("이 페이지가 보이신다면 JSP 환경이 정상적으로 구성된 것입니다.");%>
 </BODY>
</HTML>

또다른 내용의 test.jsp (현재 시스템 시각을 호출함)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
     pageEncoding="EUC-KR"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <%@ page import="java.util.Date" %>

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
 <title>Insert title here</title>
 </head>
 <body>
안녕하세요!<br>
아래의 현재시각이 보인다면 정상적으로 jsp 가 구동된 것입니다.<br>

<%
  Date d = new Date();
 
  //out객체는 클라이언트 웹브라우져에 출력할 수 있는 jsp 내장객체
 out.println(d);//클라이언트 웹브라우져로 출력됨
%>
 </body>
 </html>

 

[php pdo-mysql 확장 모듈 설치]
 
1.pdo_mysql download
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
 
2.설치

적당한 위치에 다운로드 받은 파일을 압축해제 후 압축해제한 디렉토리로 이동 
/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
make && make install
 
3.적용

php.ini 파일은 대부분 /etc 또는 apache/conf 디렉토리에 있음.

php.ini 파일에 추가
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so
 
추가 후 apache restart 하면 적용완료 됨!! 
/usr/local/apache/bin/apachectl restart


※ 에러 처리

make 과정시 아래와 같은 에러가 발생할 경우


/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:25:19: error: mysql.h: 그런 파일이나 디렉터리가 없습니다
In file included from /usr/local/src/PDO_MYSQL-1.0.2/pdo_mysql.c:31:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:36: error: expected specifier-qualifier-list before ‘MYSQL’
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:48: error: expected specifier-qualifier-list before ‘MYSQL_FIELD’
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:53: error: expected specifier-qualifier-list before ‘MYSQL_RES’
make: *** [pdo_mysql.lo] 오류 1

해결 : vi /usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h

25라인의 #include <mysql.h> 를 #include </usr/local/mysql/include/mysql/mysql.h> 로 변경

 

/usr/local/src/PDO_MYSQL-1.0.2/mysql_driver.c:33:26: error: mysqld_error.h: 그런 파일이나 디렉터리가 없습니다
In file included from /usr/local/src/PDO_MYSQL-1.0.2/mysql_driver.c:40:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h: In function ‘pdo_mysql_get_sqlstate’:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h:378: error: ‘WARN_DATA_TRUNCATED’ undeclared (first use in this function)
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h:378: error: (Each undeclared identifier is reported only once
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h:378: error: for each function it appears in.)
make: *** [mysql_driver.lo] 오류 1

해결 : vi mysql_driver.c

33라인의 #include <mysqld_error.h> 를 #include </usr/local/mysql/include/mysql/mysqld_error.h> 로 변경




 

mod_geoip-latest.tar.gz   mod_geoip2_1.2.5.tar.gz


아파치에 GeoIP 모듈 설치하는 방법

GeoIP 란 MaxMind 에서 제공하는 국가별로 IP를 확인할 수 있는 오픈소스 라이브러리로 이를 이용하여 서버에 접근 하는 아이피를

국가별로 관리할 수 있습니다.

 

http://www.maxmind.com

(1) GeoIP C API 설치하기

1. 

- GeoIP C API를 다운 받아 설치 합니다.

http://geolite.maxmind.com/download/geoip/api/c/

#wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz

#wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.5.1.tar.gz  (최신)

2

- 압축을 해제 합니다.

#tar zxvf GeoIP-1.4.6.tar.gz

3.
- 해제된 디렉토리로 이동 후 설치 디렉토리를 지정하여 ./configure 합니다.

#cd GeoIP-1.4.6
#./configure --prefix=/usr/local/GeoIP

4.
- 컴파일 및 설치를 진행 합니다.

#make && make install

5.
GeoIP의 ip 목록을 최신정보로 갱신하기 위하여 GeoIP.dat 를 다운받아 설치된 위치에 복사 합니다.

- 국가 정보 다운로드

#wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

- 도시 정보 다운로드

#wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

- 압축 해제

#gzip -d GeoIP.dat.gz 
#gzip -d GeoLiteCity.dat.gz

- 해제된 파일을 GeoIP가 설치된 위치에 덮어쓰기

#cp -a GeoIP.dat /usr/local/GeoIP/share/GeoIP/
#cp -a GeoLiteCity.dat /usr/local/GeoIP/share/GeoIP/

(2)
geoip모듈을 아파치에 설치하기.

1.mod_geoip를 다운 받습니다.

아파치 1.x 용

http://geolite.maxmind.com/download/geoip/api/mod_geoip/   안되면

http://www.maxmind.com/download/geoip/api/mod_geoip/mod_geoip-latest.tar.gz

아파치 2.x 용

http://geolite.maxmind.com/download/geoip/api/mod_geoip2/

 

ex)아파치 2.x용 다운로드

#wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz

 

2

.
압축을 해제 합니다.

#tar zxvf mod_geoip2_1.2.5.tar.gz

3.
해제된 위치로 이동 후 c파일을 apxs를 이용하여 설치 합니다.

#cd mod_geoip2_1.2.5

#[아파치 apxs경로] -i -a -L[geoip설치디렉토리의lib경로] -I[geoip설치디렉토리의include경로] -lGeoIP -c[mod_geoip.c 경로] 

## 옵션의 대소문자 주의 -lGeoIP = 소문자 l로 시작

#/usr/local/apache/bin/apxs -i -a -L/usr/local/GeoIP/lib -I/usr/local/GeoIP/include -lGeoIP -c /root/mod_geoip2_1.2.5/mod_geoip.c

4.
모듈이 정상적으로 설치,로드 되었는지 확인합니다.

#ls -al /usr/local/apache/modules/mod_geoip.so 
-rwxr-xr-x 1 root root 38179  3월 26 13:16 /usr/local/apache/modules/mod_geoip.so

- httpd.conf 파일의 LoadModule 위치에 추가 되었는지 확인

LoadModule geoip_module       modules/mod_geoip.so

- phpinfo 페이지의 Apache Environment 정보에 GEOIP_CONTINENT_CODE, GEOIP_COUNTRY_CODE, GEOIP_COUNTRY_NAME 항목 확인

5.
httpd.conf에 mod_geoip 모듈의 적용 내용을 설정합니다.

특정 국가의 접근 차단

<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
    <Location /home>
           SetEnvIf GEOIP_COUNTRY_CODE CN go_out
           SetEnvIf GEOIP_COUNTRY_CODE RU go_out
           SetEnvIf GEOIP_COUNTRY_CODE TH go_out
           <Limit GET POST>
             Order Allow,Deny
             Allow from all
             Deny  from env=go_out
           </Limit>
    </Location>
</IfModule>

특정 국가에만 접근 허용

<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
    <Location /home>
          SetEnvIf GEOIP_COUNTRY_CODE KR go_in
           <Limit GET POST>
             Order Deny,Allow
             Deny from all
             Allow  from env=go_in
           </Limit>
    </Location>
</IfModule>

또는 httpd.conf 와 virtualhosts.conf 에 분리해서 설정도 가능

[httpd.conf 내용]

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
</IfModule>

[virtualhosts.conf 내용]

<Virtualhost *>
<Location />
 SetEnvIf GEOIP_COUNTRY_CODE KR go_in
  <Limit GET POST>
   Order Deny,Allow
   Deny from all
   Allow  from env=go_in
 </Limit>
</Location>
</Virtualhost>


[참고]
Cannot load /usr/local/apache/libexec/mod_geoip.so into server: libGeoIP.so.1: cannot open shared object file: No such file or directory   <--- 요런 에러 발생시
/etc/ld.so.conf 파일에
/usr/local/GeoIP/lib 라인 추가 후
ldconfig 명령실행


1. 소스파일 다운로드   
roundcubemail-0.8.6.tar.gz

CentOS 가 설치된 서버에 오픈소스 웹 메일인 RoundCube 를 설치해 봅시다.

사실 설치해서 사용중인데, 문제가 있어서 최신 버전으로 다시 설치하려니, 방법이 기억이 잘 안나서...

나중에 다시 써 먹을 요량으로 기록합니다.

http://roundcube.net 에 가서 포스팅 현재 최신 버전인 0.8.5 를 다운받습니다.

다운받은 파일을 서버에 업로드를 합니다.

아파치 디폴트 디렉토리인 /var/www/html/ 에다가 업로드합니다.

서버로 로그인 한 후, /var/www/html/ 로 가서 업로드한 파일을 압축해제 합니다.

tar zxvf roundcubemail-0.8.5.tar.gz

roundcubemail-0.8.5 디렉토리가 생깁니다.


들어가서 좀 살펴보고...난 후, 저 긴 디렉토리 이름을 짧은 걸로 바꿉니다.

webmail 이런걸로다...  (mv roundcubemail-0.8.5 webmail)


cd webmail

chmod 707 temp/ logs/

2. DB 계정 및 DB 생성

mysql 에 사용자와 DB를 만듭니다. 전 webmail 라고 만들었습니다.

mysql> create database webmail;
mysql> grant all privileges on webmail.* to webmail@localhost identified by 'DB패스워드';
mysql> flush privileges;


cd SQL/
mysql -u webmail -p webmail < mysql.initial.sql
Enter password:  패스워드입력

3. Apache 에 접속도메인 추가

<VirtualHost *>
ServerAdmin root@totohouse.co.kr
DocumentRoot /home/webmail/
ServerName webmail.YOURDOMAIN
ServerAlias www.webmail.YOURDOMAIN
</VirtualHost>


php.ini 파일에 date.timezone = ASIA/SEOUL  지시자 추가

Apache 재시작 후 해당 주소로 접속시 500 (Internal Server Error) 에러 발생시 http.conf 의 Directory 지시자 중

/home 디렉토리에 대한 접근권한 중 AllowOverride 항목 뒤에 Indexes 를 추가 후 Apache 재시작.

또는 .htaccess 파일 내용중 ExpiresActive On 와 ExpiresDefault "access plus 1 month" 를 주석처리한다.

4. dovecot.conf 에 아래와 같이 imap 프로토콜 사용 정의

 protocols = pop3 imap 

 /etc/init.d/dovecot restart

 netstat -nlp 의 결과 중 143포트가 아래처럼 나오면 된다.

tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      20333/dovecot

5. roundcube 설치

http://webmail.YOURDOMAIN/installer​ 에 접속하여 설치시작


[환경설정 입력항목 정리] -> 전체 입력아닌 필수적인것만을 기록함.


product_name : Roundcube Webmail (다른이름으로 변경 가능)


[Database setup]
라운드큐브 설치 시 제작된 DB 정보를 올바르게 입력한다.


[IMAP Settings]
The IMAP host(s) chosen to perform the log-in -> 127.0.0.1
호스트필드를 127.0.0.1 로 하는이유는 서버에 도메인이 여러개일 경우
단일 도메인만 존재한다면 도메인값을 입력해도 무방함.
default_port -> 143


[Display settings & user prefs]
language -> ko_KR 


6. 마무리


모든 설치가 끝나면 webmail 디렉토리내의 installer 디렉토리를 삭제하고 메일 발송 및 수신 테스트를 진행해 본다.


*. 추가내용

라운드큐브메일 0.8 대는 php 5.2.x 에서 설치가 가능하지만

라운드큐브메일 0.9 이상의 버전에서는 php 5.3.x 이상 의 버전이 필요합니다.