2015년 3월 26일 목요일

[CentOS 6.5] APM 소스설치 - Mysql 5.6 + httpd 2.4.7 + php 5.5.8 + Tomcat 8.0

서버 관리를 하다보니 리눅스(CentOS)에서 YUM으로 설치되는 버전이 낮아 웹 취약점들에 노출되는 경우가 발생되었다.

관공서 쪽 관리하는 경우가 많다보니 이래저래 구글링을하다가 입맛에 맞는 것을 득템!!

내 나름대로 수정을 하여 설치 성공한 이력을 남겨 놓자~

※ 설치 환경
  - OS : CentOS 6.5 32bit 및 64bit

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


Ⅰ. 설치 전 준비

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel  ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libtool  libtool-libs openldap openldap-devel nss_ldap openldap-clients openldap-servers libtool-ltdl libtool-ltdl-devel bison

yum groupinstall "Development Tools"
yum -y install gd gd2 gd-devel gd2-devel wget pcre openssl* perl libaio


- 설치소스 Download

http://dev.mysql.com/downloads/mysql/#downloads

Generic Linux (Architecture Independent), Compressed TAR Archive download

# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15-linux-glibc2.5-i686.tar.gz

Gernerally Available (GA) Releases, Source Code : Compressed TAR Archive download
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz

# wget http://mirror.apache-kr.org/httpd/httpd-2.4.7.tar.gz

# wget http://mirror.apache-kr.org/apr/apr-1.5.0.tar.gz
# wget http://mirror.apache-kr.org/apr/apr-iconv-1.2.1.tar.gz
# wget http://mirror.apache-kr.org/apr/apr-util-1.5.3.tar.gz

php : http://www.php.net/downloads.php#v5
# wget http://kr1.php.net/get/php-5.5.8.tar.gz/from/this/mirror

libiconv : http://www.gnu.org/software/libiconv/#downloading
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

libmcrypt : http://sourceforge.net/projects/mcrypt/files/Libmcrypt/
# wget ftp://ftp.superuser.co.kr/etc/libmcrypt-2.5.7.tar.gz
# wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download

mhash : http://mhash.sourceforge.net/
# wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz/download

mcrypt : http://sourceforge.net/projects/mcrypt/
# wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download

ImageMagick: http://www.imagemagick.org/script/download.php
# wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.8.8-4.tar.gz

imagick: http://pecl.php.net/package/imagick
# wget http://pecl.php.net/get/imagick-3.1.2.tgz


Tomcat 8.0 : http://tomcat.apache.org/download-80.cgi
# wget http://mirror.apache-kr.org/tomcat/tomcat-8/v8.0.0-RC10/bin/apache-tomcat-8.0.0-RC10.tar.gz

Tomcat Native: http://tomcat.apache.org/download-native.cgi
# wget http://mirror.apache-kr.org/tomcat/tomcat-connectors/native/1.1.29/source/tomcat-native-1.1.29-src.tar.gz

Tomcat Connector : http://tomcat.apache.org/download-connectors.cgi
# wget http://mirror.apache-kr.org//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz

jdk : http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
# wget http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-x64.tar.gz

pcre: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz


* 위의 모든 소스를 모아 압축해둔 것을 첨부하여 놓는다.





Ⅱ. MySQL

1. 기존 mysql 제거
yum erase mysql-libs


2. 의존성 패키지 설치
yum install cmake.x86_64
yum install ncurses-devel.x86_64
--------------- or ---------------
yum install cmake.i686
yum install ncurses-devel.i686



3. 컴파일

# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all

# make
# make install


4. 환경 설정
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
vi /etc/my.cnf
다음 항목을 [mysqld] 영역에 추가 
########################
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1
socket = /tmp/mysql.sock
explicit_defaults_for_timestamp=true
########################


5. 사용자 추가 및 DB 설치
groupadd mysql
useradd -r -g mysql mysql
cd /usr/local
chown -R mysql:mysql mysql
cd mysql
scripts/mysql_install_db \
--user=mysql \
--datadir=/usr/local/mysql/data \
--basedir=/usr/local/mysql


6. MySQL 시동파일 구성 및 시작
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
/etc/init.d/mysqld start


7. root 패스워드 및 보안 설정
/usr/local/mysql/bin/mysql_secure_installation

Enter current password for root (enter for none): 엔터

Set root password? [Y/n] Y
New password: 패스워드입력
Re-enter new password: 패스워드입력
Password updated successfully!
Reloading privilege tables..
 ... Success!



8. 리눅스 시작시 mysql 구동되도록 설정
chkconfig --add mysqld
chkconfig mysqld on
chkconfig --list mysqld



Ⅲ. Tomcat 8 설치

1. apr 1.4.8 설치
tar zxvf apr-1.5.0.tar.gz
cd apr-1.5.0
./configure --prefix=/usr/local/apr
make
make install


2. apr-iconv 설치
tar zxvf apr-iconv-1.2.1.tar.gz
cd apr-iconv-1.2.1
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make
make install


3. apr-util 설치
tar zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make
make install

4. jdk 설치
rpm -ivh jdk-7u45-linux-x64.rpm


5. Tomcat 8.0 설치
tar zxvf apache-tomcat-8.0.0-RC10.tar.gz
mv apache-tomcat-8.0.0-RC10 /usr/local/

cd /usr/local/
mv ./apache-tomcat-8.0.0-RC10 ./tomcat-8.0.0-RC10


tar xvzf tomcat-native-1.1.29-src.tar.gz
cd tomcat-native-1.1.29-src/jni/native/
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_51/ --libdir=/usr/local/lib64
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_51/ --libdir=/usr/local/lib

make
make install



a. 환경구성

vi /etc/profile 파일의 마지막에 다음 행 추가

export LD_LIBRARAY_PATH=/usr/local/apr/lib
export JAVA_HOME=/usr/java/jdk1.7.0_51
export TOMCAT_HOME=/usr/local/tomcat-8.0.0-RC10
export PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib

b. 설정 확인을 위해 다음 명령 실행

# source /etc/profile
# java -version

************* 다음 내용이 출력되면 성공 ***************************
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)
*****************************************************************

### 그냥 두고 jdk 버전의 순서를 변경하는 경우

우선 현재 java config를 살펴보자

# update-alternatives --config java
3 개의 프로그램이 'java'를 제공합니다.
  선택    명령
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk/bin/java
   2           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java

자동적으로 설치된 openjdk가 자리잡고 있다.

그러므로, 위에 설치한 버전을 config에 추가하고 선택해주어야 한다.

우선 config에 추가
-- 사용법: update-alternatives --install <링크> <이름> <경로> <우선순위>
# update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_45/bin/java 3

그럼 추가가 됐는지 볼까요?

# update-alternatives --config java
3 개의 프로그램이 'java'를 제공합니다.
  선택    명령
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk/bin/java
   2           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
   3           /usr/java/jdk1.7.0_51/bin/java


 현재 선택[+]을 유지하려면 엔터키를 누르고, 아니면 선택 번호를 입력하십시오 :

3)에 추가가됐네요! 그럼 3을 입력하고 엔터키...

# update-alternatives --config java

3 개의 프로그램이 'java'를 제공합니다.
  선택    명령
-----------------------------------------------
*  1           /usr/lib/jvm/jre-1.7.0-openjdk/bin/java
   2           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
 + 3           /usr/java/jdk1.7.0_51/bin/java


3이 선택된 것을 알 수 있습니다.

그리고 버전을 출력하면,

#java -version

Java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b04)
Java HotSpot(TM) Server VM (build 20.6-b01, mixed mode)

위와 같이 위에서 설치한 sun Java가 잡혀있는 것을 볼 수 있다.



c. 방화벽 포트를 오픈

iptables -A INPUT -m state -state NEW -m tcp -p tcp -dport 8080 -j ACCEPT
service iptables save
service iptables restart

d. tomcat 시작/정지

/usr/local/tomcat-8.0.0-RC10/bin/startup.sh
# tomcat 시작

/usr/local/tomcat-8.0.0-RC10/bin/shutdown.sh
# Tomcat 정지

e. 테스트

http://server-ip:8080/

f. 구동파일 생성
vi /etc/init.d/tomcat

다음 내용을 추가
#################################################
#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80

export JAVA_HOME=/usr/java/jdk1.7.0_51
export PATH=$JAVA_HOME/bin:$PATH
export CATALINA_HOME=/usr/local/tomcat-8.0.0-RC10

case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
#################################################

chmod 755 /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on

chkconfig --list tomcat



Ⅳ. apache 설치


1. pcre 설치

pcre-8.33.tar.gz

# tar zxvf pcre-8.33.tar.gz
# cd pcre-8.33/
# ./configure --libdir=/usr/local/lib64
# ./configure --libdir=/usr/local/lib
# make && make install

ln -s /usr/local/lib64/libpcre.so.1 /lib    (64bit 일때만)

2. apache 설치

tar -xvzf httpd-2.4.7.tar.gz
cd httpd-2.4.7

groupadd apache
useradd -g apache apache

./configure --prefix=/usr/local/apache-2.4.7 \
--enable-authn-alias \
--enable-cache \
--enable-file-cache \
--enable-mem-cache \
--enable-disk-cache \
--enable-mods-shared=most \
--enable-proxy=shared \
--enable-proxy-ajp=shared \
--enable-proxy-ajp=shared \
--enable-dav=shared \
--with-apr=/usr/local/apr/ \
--with-apr-util=/usr/local/apr-util/ \
--enable-ssl \
--enable-dav \
--enable-cgi \
--with-mpm=event \
--enable-cgid \
--enable-vhost-alias \
--enable-rewrite \
--enable-forward=shared \
--enable-proxy-connect=shared \
--enable-proxy-http=shared \
--enable-deflate=shared \
--enable-so \
--enable-headers=shared \
--enable-include=shared \
--enable-rewrite=shared


make&&make install



3. Apache 사용자 지정을 위해 /usr/local/apache-2.4.7/conf/httpd.conf 파일 수정

User apache

Group apache



4. Apache 시작

/usr/local/apache-2.4.7/bin/apachectl start



테스트



http://server-ip



It Works!가 보이면 정상


5. 구동 파일 설정
cp /usr/local/apache-2.4.7/bin/apachectl /etc/rc.d/init.d/httpd
vi /etc/rc.d/init.d/httpd

다음 5줄을 #을 포함하여 위 파일의 상단부에 복사
# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processname: /usr/local/apache-2.4.7/bin/apachectl
# config: /usr/local/apache-2.4.7/conf/httpd.conf
# pidfile: /usr/local/apache-2.4.7/logs/httpd.pid

chkconfig --add httpd
chkconfig httpd on
chkconfig --list httpd

아파치 재시작
/etc/rc.d/init.d/httpd restart




Ⅴ. php-5.5.8 설치

1. PHP 5 지원 라이브러리 설치

a. libiconv(문자 인코딩 라이브러리)

tar xvzf libiconv-1.14.tar.gz
cd libiconv-1.14/
./configure --prefix=/usr/local --libdir=/usr/local/lib64
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
cd ..

b. libmcrypt(PHP에서 암호화 해독 알고리즘인 mcryp를 사용하기 위해서 설치해야 한다)

tar xvzf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local --libdir=/usr/local/lib64
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install

/sbin/ldconfig

cd libltdl/
./configure --enable-ltdl-install --libdir=/usr/local/lib64
./configure --enable-ltdl-install --libdir=/usr/local/lib
make && make install
cd ../../

c. mhash(hash암호화 알고리즘)

tar xvzf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure --prefix=/usr/local --libdir=/usr/local/lib64
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
cd ..


d. mcrypt 설치

tar xvzf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure --prefix=/usr/local --libdir=/usr/local/lib64
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
cd ..

-- 오류 해결 방법 : configure: error: *** libmcrypt was not found
# vi .bash_profile (root 계정을 사용할 수 있을 경우 /etc/ld.so.conf 파일에 추가, 이 때 디렉토리들만 추가할 것)
---------------------------- 라이브러리 환경변수 추가 ------------------------
...
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
...
# source .bash_profile
* 또는 root 권한이 있을 경우, /etc/ld.so.conf 파일 수정
# vi /etc/ld.so.conf
...
include ld.so.conf.d/*.conf
/lib
/usr/lib
/usr/local/lib
...
# ldconfig


2. php-5.5.8 설치

yum install libxml2-devel bzip2-devel libcurl-devel openldap-devel 

tar xvzf php-5.5.8.tar.gz

mysql lib를 64비트로 인식되도록 변경
ln -s /usr/local/mysql/lib /usr/local/mysql/lib64

./configure --prefix=/usr/local/php-5.5.8 \
--with-libdir=lib64 \
--with-config-file-path=/usr/local/php-5.5.8/etc \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-apxs2=/usr/local/apache-2.4.7/bin/apxs \
--with-pear=/usr/share/php \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-maintainer-zts \
--enable-opcache \
--with-curl \
--with-iconv-dir=/usr/local \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-ldap \
--with-ldap-sasl \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-bz2 \
--enable-static \
--enable-intl \
--enable-exif \
--with-pdo-mysql=/usr/local/mysql \
--with-gettext

configure 오류시 : configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
# yum -y install icu libicu-devel
# ldconfig

configure 오류시 : configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no
해결방법 : 심볼릭 링크 생성
# ln -s /usr/local/mysql/lib/libmysqlclient.so /usr/lib
# ln -s /usr/local/mysql/lib/libmysqlclient.so /usr/lib64/
# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib
# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/

make

iconv관련 링크에러가 날  경우 vi 로 Makefile 을 열어서 EXTRA_LIBS 를 찾아 -liconv 를 추가
# cd /usr/local/php-5.5.8
# vi ./Makefile
    /EXTRA_LIBS 명령어로 검색
    -liconv 추가

make 오류시 : error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
# vi /etc/ld.so.conf
    아래 내용 추가
    ###################################
    /usr/local/mysql/lib
    /usr/local/mysql/lib64
    ###################################

make install


3. php구성 파일 생성
cp -f php.ini-production /usr/local/php-5.5.8/etc/php.ini


4. opcache 활성화
/usr/local/php-5.5.8/etc/php.ini 의 opcache 부분을 아래와 같이 변경

 [opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000

;opcache.max_wasted_percentage=5
;opcache.use_cwd=1
;opcache.validate_timestamps=1

opcache.revalidate_freq=60

;opcache.revalidate_path=0
;opcache.save_comments=1
;opcache.load_comments=1

opcache.fast_shutdown=1

;opcache.enable_file_override=0
;opcache.optimization_level=0xffffffff
;opcache.inherited_hack=1
;opcache.dups_fix=0
;opcache.blacklist_filename=
;opcache.max_file_size=0
;opcache.consistency_checks=0
;opcache.force_restart_timeout=180
;opcache.error_log=
;opcache.log_verbosity_level=1
;opcache.preferred_memory_model=
;opcache.protect_memory=0

맨 끝에 다음 내용 추가
zend_extension=/usr/local/php-5.5.8/lib/php/extensions/no-debug-zts-20121212/opcache.so




Ⅵ. PHP5확장모듈 컴파일 및 설치


1. ImageMagick-6.8.8-3.tar.xz 설치

ImageMagick은 TIFF, JPEG, GIF, PNG, PDF 및 기타 포토 CD 등 89가지 이상의 이미지의 읽기, 쓰기 및 처리하는 데 사용할 수 있는 안정적인 도구 및 개발 키트 세트입니다

tar xvzf ImageMagick-6.8.8-3.tar.gz
cd ImageMagick-6.8.8-3
./configure --libdir=/usr/local/lib64
./configure --libdir=/usr/local/lib
make && make install
cd ..


2. imagick-3.1.2.tgz 설치

yum -y install gtk2-devel* gtk+extra

tar -zxvf imagick-3.1.2.tgz
cd imagick-3.1.2

/usr/local/php-5.5.8/bin/phpize
./configure --with-php-config=/usr/local/php-5.5.8/bin/php-config
make && make install

vi /usr/local/php-5.5.8/etc/php.ini
"Dynamic Extensions" 부분 마지막 라인에 추가
extension=/usr/local/php-5.5.8/lib/php/extensions/no-debug-zts-20121212/imagick.so
cd ..

3. php
# echo "/usr/local/php-5.5.8/lib" >> /etc/ld.so.conf
# ldconfig

4. php-cgi 프로세스 시작
cd /usr/local/php-5.5.8/etc
cp php-fpm.conf.default php-fpm.conf

올바른 구분을 시작하기 전에 다음 php-fpm.conf 를 테스트 할 수 있습니다.

/usr/local/php-5.5.8/sbin/php-fpm -t
NOTICE: configuration file /usr/local/php-5.5.8/etc/php-fpm.conf test is successful
위 메세지가 나오면 성공

/usr/local/php-5.5.8/sbin/php-fpm 실행


5. apache 에서 PHP5 지원

vi /usr/local/apache-2.4.7/conf/httpd.conf
#아래 LoadModule 추가
LoadModule php5_module modules/libphp5.so

#AddType 추가
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    바로 아래 아래 스크립트 추가
    
    AddType application/x-httpd-php .php .php3 .inc
    AddType application/x-httpd-php-source .phps

아파치 재시작
/usr/local/apache-2.4.7/bin/apachectl restart

libconv 에러 발생시 /usr/local/apache-2.4.7/bin/apachectl 와 /etc/rc.d/init.d/httpd 의 맨 위에 다음 라인 추가
export LD_PRELOAD=/usr/local/lib64/libiconv.so
-------------------- or --------------------
export LD_PRELOAD=/usr/local/lib/libiconv.so

6. php지원 여부 테스트

cd /usr/local/apache-2.4.7/htdocs
echo "<?php phpinfo(); ?>" > phpinfo.php

http://server-ip/phpinfo.php,정상적으로 출력되는 지 확인



Ⅶ. apache와 tomcat 통합

 1. mod_jk 생성

tomcat-connectors-1.2.37-src.tar.gz
tar xvzf  tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-1.2.37-src/

cd native
./configure --with-apxs=/usr/local/apache-2.4.7/bin/apxs
make
cp ./apache-2.0/mod_jk.so /usr/local/apache-2.4.7/modules/

2. 설정파일 복사
cd ../conf
cp httpd-jk.conf /usr/local/apache-2.4.7/conf/mod_jk.conf
cp workers.properties /usr/local/apache-2.4.7/conf/

a. mod_jk.conf 설정

vi /usr/local/apache-2.4.7/conf/mod_jk.conf

다음 내용 추가: 

JkWorkersFile /usr/local/apache-2.4.7/conf/workers.properties
JkLogFile /usr/local/apache-2.4.7/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"

JkMount /servlet/* worker1
JkMount /*.jsp         worker1
JkMount /application/* worker1
JkMount /*.do          worker1
JkMount /*.class       worker1
JkMount /*.jar         worker1

########해석#############

1. JkMount 위치는 Tomcat이 해석을 담당, JkUnMount는 반대임
2.  JkMount /test/* worker1 의 의미는 test 디렉토리 아래는 Tomcat이 처리를 담당
3. jsp와servlet은 tomcat이 처리, 그 외 그림이나 정적 파일은 Apache가 처리
###################

b. vi /usr/local/apache-2.4.7/conf/workers.properties

마지막줄에 다음 내용 추가: 

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=192.168.1.185
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

c. apache 설정파일 수정

vi /usr/local/apache-2.4.7/conf/httpd.conf
다음 내용 추가 --------------------------
Include /usr/local/apache-2.4.7/conf/mod_jk.conf

# 위 mod_jk.conf 파일의 맨 위에 아래 라인이 있는 지 확인
LoadModule jk_module modules/mod_jk.so

d. TOMCAT 설정 변경

cd /usr/local/tomcat-8.0.0-RC10/conf
vi server.xml

<Host 를 찾음
(다음과 같음:  <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">)

다음 줄에 다음 내용을 추가: 
<Context path="" docBase="/usr/local/tomcat-8.0.0-RC10/webapps"
 debug="0" reloadable="true" crossContext="true"/>

########dobase 경로는 /usr/local/apahce/htdocs 로 변경 가능#####

e. apache와 tomcat을 다시 시작

apache 재시작

/usr/local/apache-2.4.7/bin/apachectl stop
/usr/local/apache-2.4.7/bin/apachectl start

tomcat 재시작

/usr/local/tomcat-8.0.0-RC10/bin/shutdown.sh
/usr/local/tomcat-8.0.0-RC10/bin/startup.sh


이 시점에서,tomcat과 apache 통합 완료!


성공여부 확인 :

/usr/local/apache-2.4.7/logs/mod_jk.log 확인
다음과 같은 라인이 나오면 성공!
[Sun Sep 22 23:21:18 2013][15053:3078219984] [info] init_jk::mod_jk.c (3365): mod_jk/1.2.37 initialized

테스트:

vi /usr/local/tomcat-8.0.0-RC10/webapps/test.jsp

다음 내용 추가:

<html>
<h1>JSP test<hr>

<%out.println("Hello World!");%>

</html>



http://server-ip/test.jsp

출력결과: HELLO WORLD

2012년 11월 5일 월요일

주저리 주저리... 난 이제 품절남 ㅠ

가끔~(사막에 꽃이필정도? ㅎ) 이라도제 블로그를 찾아주시는 분들이 계시는것 같네요
자주는 아니더라도 블로그에 소홀하게 되었던 제 자신을 다시 되돌아보게 됩니다. 하핫 ^^;;

슬금슬금 블로그를 다시 시작해야겠다는 생각이 들어 이렇게 포스팅을 샤샥 올려봅니다

과거에도 그렇고 지금도 그렇지만 제가 직접적으로 글을 올리는 경우는 극히!!! 드문일이라 ㅎㅎㅎ 최대한 많은 유용한 정보가 공유될수 있도록 노력하겠습니다.

p.s - 2012년 11월 25일 (일) ... 장가갑니다 ㅎㅎㅎㅎㅎ (야호!!!)

2010년 11월 25일 목요일

[JavaScript] 동적인 테이블 태그 생성하기

출처 : PHPSCHOOL

<html>
<head>
    <script language="javascript">
        function init(){
       
            var oRow = tbl.insertRow();
            var oCell1 = oRow.insertCell();
            oCell1.rowSpan="2";
            var oCell2 = oRow.insertCell();
           
           
            var oRow2 = tbl.insertRow();
            var oCell3=oRow2.insertCell();
           
            oCell1.innerHTML = "aaaa";
            oCell2.innerHTML = "bbbb";
            oCell3.innerHTML = "cccc";
           
        }
    </script>
</head>
<body onload="javascript:init();">
    <table id="tbl" border=1>
        <tr>
            <td rowspan="2">rowspan2</td>
            <td>1111</td>
        </tr>
        <tr>
            <td>2222</td>
        </tr>
    </table>
</body>
</html>

2010년 11월 24일 수요일

[PHP] php에서 숫자표현할때 소수점 둘째자리까지만 나오게하는 방법은?

출처 : http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&wr_id=275&sca=&sfl=&stx=&sst=wr_1&sod=desc&sop=&page=10


[ 방법1 ]
<?
$a=4.99*10;
echo sprintf("%2.2f" ,$a);
?>
%2.2f 부분이 실수형을 00.00식으로 표현하게 해줍니다.
%2.3f 는 00.000이겠죠?


[ 방법2 ]
숫자형으로 출력시 소수점과 1000단위 컴마 표시법

<?
$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,234

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;
// english notation without thousands seperator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>

2010년 11월 12일 금요일

[자바스크립트] 문자열 자르기 (배열)

자바스크립트에서.. split 을 쓸경우..

var s_data = "2005-03-25";  // 잘라야 되는 값..

var array_data = s_data.split("-");  // split 함수사용..

var s_year = array_data[0];   // 잘라진 값 배열..
var s_month = array_data[1];
var s_day = array_data[2];

2010년 11월 11일 목요일

PHP Ajax MySQL 로그인 중복체크

중복 중복 중복 ㅠㅠ;;
로그인 중복체크가 이렇게 어려울줄이야~~ 여러가지로 검색을 해보아도 나오지가 않아서 저 나름데로 짜집기(?)를 하여 중복체크 성공을하게되었습니다.

혹여나~ 다른곳에서 찾아헤메지마시고~ 제가 쓴방법을 한번 써보시기 바랄께요~~

p.s - 완벽하지는 않습니다.  ㅡ,.ㅡ;;

웹 사용환경
서버 : CentOS 5.5
APM : Apache 2.2.14, PHP5.2.12, MySQL5.1.41
사용언어 : PHP, Ajax

아래에 붙여질 소스코드에 대해서는 제가 사용하는 환경의 소스를 그대로 올리도록 하겠습니다.
클래스화 시켜 사용하던건데 일일이 풀기가 애매하네요.. 기억도 안나고 ㅎㅎ;;;

기능 1 - 로그인전이면 새로 데이터를 입력한다. → 로그인처리
기능 2 - 로그인된상태일때 다른곳에서 로그인이되면 먼저 로그인된 페이지는 자동 로그아웃된다.
기능 3 - 같은 브라우져에서 로그인을 중복해서하게되면 로그인정보의 시간만 업데이트가된다.

1. 중복체크를할 테이블 생성
Table: smstmember_session
 Field Type Comment
 sesskey varchar(50) NOT NULL 
 expiry int(10) NOT NULL 
 sessvalue varchar(50) NOT NULL 
 sessid varchar(30) NOT NULL 
 security int(1) NOT NULL 
 remoteip varchar(20) NULL 
저는 위의 형식으로 테이블을 생성하였습니다. ^^

2. 로그인 처리페이지 소스 추가 (ex> login_ok.php)

소스보기

소스와같이 세션DB에 로그인했을때의 세션ID와 사용자 ID 로그인 시간등을 입력하게됩니다.
또한 같은 세션ID일때 로그인을 다시하게되면 로그인 시간이 업데이트됩니다.

3. 로그아웃 처리하기 (ex> logout.php)

소스보기

로그아웃 페이지에서는 세션을 클리어하는것은 물론이고, 로그인하면서 DB에 입력되어있던 로그인정보를 삭제하게됩니다.

4. 중복 로그인 체크페이지 (ex> outlogin_check_session.php)

소스보기

다른곳에서 중복로그인이 되었는지 체크하는 페이지이다.
이 페이지에서는 세션DB의 값과 비교하기위한 정보들을 담고 있는다.
header 페이지나 footer 페이지 즉, 항상 웹페이지에 표시되는 부분에 추가하면 되겠다.

5. 중복 로그인 체크값 추출 (ex> login_check_tender.php)

소스보기

지금보이는 코드는 xml 형식으로 데이터를 추출하게되는 부분이다.
다음으로 설명된 js 파일에서 위의 페이지에서 생성된 xml 코드를 참조하여 로그인여부를 체크하게된다.

6. 중복로그인 체크 및 처리하기 (ex> login_check.js)

소스보기

바로위에서 말했듯이 "login_check_tender.php" 페이지에서 생성된 xml 형식의 코드를 분석 참조하여
다른곳에서 로그인이 이루어졌는지를 판단 및 처리를하게되는 스크립트이다.
다른곳 또는 다른 웹브라우저로 로그인을하게되면 기존에 로그인된 웹페이지는 자동적으로 로그아웃이 이루어지게된다.

여기까지 섭군이가 대충 짜집기한 중복로그인 방지 소스코드였습니다.
실질적으로 구상은 쉽게되는데 짜맞추려니... 여간 힘든게 아니네요 ㅠㅠ;;
질문은 않받을래요~ 머리가 뽀개질꺼 같거든요 ㅎㅎ;;;