얼마전 우분투 11.04 가 출시되었다.
그런데, 개인적으로 바로 업그레이드 하지 않고 있다.(좀 말이 많은 버전이다. unity 등)
좀더 상황을 지켜보기로 했다.


ubuntu 버전에서 firefox 4 를 설치하고자 한다. (우분투 공식? 버전은 3.5 또는 3.6 일 것이다)

PPA 저장소를 추가해서 설치한다.

# add-apt-repository ppa:mozillateam/firefox-stable
명령으로 저장소를 추가한다.
# apt-get update
# apt-get upgrade
로 업그레이드 한다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
nginx 와 php-fpm 을 설치하고, tomcat 을 연동해서
php 와 jsp(spring,ibatis) 를 구동하기 위한 작업을 하고자 한다.

tomcat 설치는 생략. (centos 에서 패키지로 설치하는 방법을 사용했다.)
방법은 이곳을 참조
http://wavded.tumblr.com/post/258713913/installing-tomcat-6-on-centos-5
http://www.how2centos.com/installing-tomcat-6-on-centos-5-5-tutorial/
설치한 후에는 tomcat 구동설정.

주의 : java(jsp) 쪽은 잘 몰라 용어,설명에 오류가 있을 수 있으니 알아서 해석하세요.

1. invoker 주석해제.(서블릿 자동호출?)
  tomcat 기본 샘플,예제는 잘 돌아가는데, 본인이 만든 예제가 안된다면 아마도 invoker 설정이 되어 있을 것이다.   /etc/tomcat6/web.xml 을 열어서 2곳의 주석을 해제.
이 부분과
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
이 부분이다.
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
 이렇게 했는데 안되면.
context.xml 을 열면
그냥 <Context> 로 되어 있는데, <Context reloadable="true" privileged="true"> 이렇게 바꿔준다.

localhost:8080 으로 정상구동되는지 확인한다.
여기까지 되면 tomcat 쪽은 완료된것이다.

2. nginx 에서 php/static html 이외에는 모두 톰캣으로 넘기기

tomcat 을 연동할 부분은 다음과 같다.
이런식으로 server 설정한 부분에 추가해준다(php 등의 설정한 곳.)
    location / {
        try_files $uri $uri/ @tomcat;
    }

    location @tomcat {
        proxy_pass      http://localhost:8080;
    }
이렇게 설정하면 php 파일이외의 모든 접속은 톰캣에서 처리하게 된다.

이때 CI(Codeigniter) 등을 쓴다면, 따로 설정해 준다.
내 경우는 CI 로 된 어플을 각 CI_forum , KI_Board 폴더에 넣은 경우이다.
    location /CI_forum/ {
        try_files $uri $uri/ $uri/index.html @ciforum;
    }
    location /KI_Board/ {
        try_files $uri $uri/ $uri/index.html @kiboard;
    }

    location @ciforum {
        rewrite ^/CI_forum/(.+)$ /CI_forum/index.php/$1 last;
    }
    location @kiboard {
        rewrite ^/KI_Board/(.+)$ /KI_Board/index.php/$1 last;
    }
위 설정은 최적의 설정이 아닐 수 있으니, 참조 정도로만 쓰길 바람.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
nginx 는 보통 다음과 같은 설정을 사용한다
location ~ \.php$ {
    #fastcgi_pass  127.0.0.1:9000;
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi_params;
}
이때 보안 문제가 생긴다.

aaa.com/bad.hack/bbb.php  이런식으로 비정상적인 접근이 허용된다.
이를 막기 위해 설정을 변경해줘야 한다.

참조 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=73442
/etc/nginx/fastcgi_params 파일에 다음을 추가한다.
set $fastcgi_script_realname $fastcgi_script_name;
if ( $fastcgi_script_name ~ ^(.*\.php)(/.*)$ ) {
    set $fastcgi_script_realname $1;
    set $path_info $2;
}
if (!-f $document_root$fastcgi_script_realname) {
    return 404;
}

또는 /etc/php.ini  설정을 바꿔준다.
cgi.fix_pathinfo=0
nginx 에서 php-fpm 으로 넘기기전에 막아주는 것이 좋을 듯 하니 첫번째 방법이 좋을 듯 하다.


참조 : CI 에서는 다음처럼 rewrite 룰을 적용했다.
if (!-f $request_filename) {
    rewrite ^/CI_forum/(.+)$ /CI_forum/index.php/$1 last;
}
CI 를 설치한 폴더에 따라 변형해서 사용하면 된다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
bind 에서는 nsupdate 로 zone 파일을 동적으로 변경할 수 있다.
ddns , dynamic dns 라고 한다.

1. 키값 만들기
 아무나 변경하면 안되니까, 보안을 위해 키값을 만든다.
 dnssec-keygen -a HMAC-MD5 -b 512 -n USER  mail.domain.com.
USER 대신에 ZONE , HOST 등으로 할 수 있다.
    -n <nametype>: ZONE | HOST | ENTITY | USER | OTHER
         (DNSKEY generation defaults to ZONE)
각각의 정확한 의미는?

위 명령을 내리면
Kmail.domain.com.+157+43746.key
Kmail.domain.com.+157+43746.private
두개의 파일이 생긴다. 보안키에서 흔히 볼 수 있는 public key , private key 라고 보면 된다.

2. named.conf 설정바꾸기.
  centos / chroot named 에서는  설정파일은
 /var/named/chroot/etc 에 있다.
rndc.key 에 다음을 추가한다. 별도 파일을 만들고 include 시켜도 된다.
key "mail.domain.com." {
   algorithm  hmac-md5;
   secret     "wTd1YkCIdFtpa4ncsdfsdfwMiGB789p8xR1fixWqDAW8fO9urKmdbalkjdsklfjAQqPA==";
};
Kmail.domain.com.+157+43746.key  값의 뒤 부분을 복사해서 넣으면 된다.
( 설정의 }; -> ; 를 빼먹지 않게 주의한다. )

 그리고, 변경하려는 도메인의 zone 을 업데이트 허용해야 한다.
zone "domain.com" {
  type master;
  file "domain.com.zone";
  allow-update { key "mail.domain.com."; };
};
위와 같이 allow-update 에 key "keyname" 형태로 넣어준다.

여기까지 하면 기본 준비는 끝난다.  named 재시작.

3. 외부에서 nsupdate 로 zone 변경해보기.

생성한 키쌍에서 private 키를 외부에 복사한다(로컬에서도 해도 되지만, 외부에서 해보자)
그리고 다음 명령으로 접속해 변경할 수 있다.
nsupdate -v -k Kmail.domain.com.+157+43746.private
접속하면 다음 처럼.
> server ns.domain.com
> zone domain.com
> update add some.domain.com. 86400 A 192.168.10.10
> show
> send
위 명령들을 파일로 만들어서 일괄처리할 수 있다.

DDNS 는 IP 가 동적으로 변경하는 환경 또는 서버의 Failover 처리등을 위해 사용하면 편리하다.
nsupdate 로 변경된 zone 파일은 직접 수정하지 않는것이 좋다.
named 에서 {zone file}.jnl 에 해당하는 임시파일을 만들고 추후 실제 zone 파일을 업데이트하기 때문에
zone 파일을 직접수정하면 수정한 부분이 사라질 수 있다.
직접 수정하려면 다음 방법중 하나를 사용한다.
# 방법1 - 9.3 이전버전
        rndc stop
        remove the journal file (.jnl)
        edit the zone
        start named
# 방법2 - 새버전 9.3
        rndc freeze zone
        edit the zone
        rndc unfreeze zone


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
mysql 리플리케이션 설정은 어렵지 않군.
장애대응이 어려운것 같다.

# 기본 mysql replication 설정.(마스터-슬레이브)
1. mysql config 설정
  master , slave 각각 config 파일에 replication 설정을 해준다.
  우분투의 경우  /etc/mysql/conf.d 에 replication_slave.cnf (파일명은 임의로 )
  /etc/mysql/my.cnf 의 마지막줄에 이렇게 되어 있어서 불러오게 된다
!includedir  /etc/mysql/conf.d/
 my.cnf 의 [mysqld] 탭에 직접추가해줘도 된다.

내용은 이런식이다. (슬레이브쪽)
[mysqld]
server-id               = 2
master-host             = master
master-user             = replication
master-password     = slave
replicate-do-db         = master_db
replicate-do-db         = other_db
마스터쪽은 다음과 같다.
[mysqld]
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = master_db
binlog_do_db            = other_db
binlog_ignore_db        = mysql
binlog_ignore_db        = information_schema
설정만 보면 이해할 수 있을 것이다.
binlog_do_db 등을 각자의 서버설정에 맞게 바꾸어 주면 된다.

2. replication 접근 권한설정
 replication 은 slave 쪽에서 master 의 자료(bin_log)를 참조해서 데이터를 가져가는 것이다.
 그래서 슬레이브쪽에서 마스터에 접근할 수 있어야 한다.

 그 명령은 다음과 같다.(마스터쪽에서 mysql 명령을 내려준다)
mysql> grant replication slave on *.* to 'replication'@192.168.0.1 identified by 'slave';
진한부분이 conf 에서 설정한 master-user / master-host / master-password 에 해당한다.
IP 주소대신 /etc/hosts 에 설정한 호스트명을 적어줘도 된다. ( master-host = master  같은..)

3. 사용 및 장애대응
작동 중지/실행
start slave ;
stop slave ;
슬레이브 상태 보기
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000018
          Read_Master_Log_Pos: 958292
               Relay_Log_File: slave-relay-bin.000271
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000018
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: master_db
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 958292
              Relay_Log_Space: 556
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)
마스터의 상태를 보려면
mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000018
        Position: 958292
    Binlog_Do_DB: master_db
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
진하게 표시한 position 이 일치하는지 확인하면 된다.

slave 의 position 값이 일치하지 않는경우.
다음처럼 해준다.
mysql > stop slave;
mysql > reset slave;
mysql > start slave;
cron 등으로 주기적으로 확인해주도록 한다.




다음에는  master-master 설정 과 mysql proxy

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,