FreeBSD 9.1 이 릴리즈 되서 패키지 설치중
pkg_add -r 이 아래와 같이 안됨;
Error: Unable to get ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.1-release/Latest/rsync.tbz: File unavailable (e.g., file not found, no access)
pkg_add: unable to fetch 'ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.1-release/Latest/rsync.tbz' by URL
http://www.freebsd.org/news/2012-compromise.html
일전의 보안이슈로 막아 놓은 모양;;
아래와 같이 해결은 가능하다..
c shell 일경우
setenv PACKAGESITE ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9-current/Latest/
bash shell 일경우
export PACKAGESITE=ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9-current/Latest/
와 같이 환경변수 처리후 가능해졌다.ㅎ
파일다운로드 파일서버겸용 웹서버 가 트래픽 1G로 FULL 서비스하게 되었네요.
웹서버는 nginx
1G FULL서비스상황에서 load는 0.x 대.. ㅎㅎ
1000M 랜카드 대역폭의 한계치 까지와서
서버에 붙어 있는 랜카드2개를 라운드로빈하기로 결정..
FreeBSD의 커널부터 패치 하기 시작!
device lagg
추가후 커널컴파일
vi /boot/loader.conf 에
추가! 후 리부팅
vi /etc/rc.conf 에 랜설정
ifconfig_bce1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto roundrobin laggport bce0 laggport bce1"
ipv4_addrs_lagg0="27.x.x.171/25"
두개의 랜카드가 라운드로빈되면서 분산시작! ㅎㅎ
LAN1 LAN2
분산이 잘되고 있네요.ㅎㅎ
그나저나 nginx가 짱!
nginx에 재미 있는 Addons기능중에 echo 라는 기능이 있다.
nginx단에서 간단하게 특정 코드를 출력할 수 있는 기능이다.
https://github.com/agentzh/echo-nginx-module/tags
echo모듈을 다운받고,
nginx컴파일시 echo모듈의 경로를 아래와 같이 추가한다.
./configure --prefix=/usr/local/nginx --add-module=./echo-nginx-module
컴파일후 nginx.conf 에 아래과 같이 추가한다.
location /hello {
#default_type text/plain; # 옵션
echo "hello, world!";
}
도메인이 abc.com 이라면,
접속시 hello, world! 를 표시해줄것이다.
나같은 경운 crossdomain.xml 을 echo모듈로 사용했다. 로컬하드에 파일이 없어도 웹서버단에서 자동처리될 것이다.
location /crossdomain.xml {
echo "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\">";
echo "<cross-domain-policy>";
echo "<allow-access-from domain=\"*\" />";
echo "<allow-http-request-headers-from domain=\"*\" headers=\"*\" />";
echo "</cross-domain-policy>";
}
http://abc.com/crossdomain.xml 하면 자동으로 나올것이다.
참고로 이 파일은 플래쉬파일에서 crossdomain관련 참조하는 파일이다.
요즘 성능이슈로 세션이나 캐싱을 memcached로 많이 구현되어 있는거 같다.
memcached 모니터링 툴을 찾다가 괜찮은 툴이 있어서 소개~
http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
memcache.php 소스다운은 위의 블로그 방문에도 있고 직접 받으려면,
http://livebookmark.net/memcachephp/memcachephp.zip
memcache.php 파일을 원하는 서버폴더에 넣고,
아래의 소스상에서 수정만 하면 된다. (접근할 사용자ID/비번/memcached 서버설정만 하면 끝)
define('ADMIN_USERNAME','사용자ID'); // Admin Username
define('ADMIN_PASSWORD','비밀번호'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array
//$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
소스에서처럼 서버들을 array로 여러개 지정이 가능하다.
아래는 구동화면~
nginx 에서 rewrite기능을 사용하면 기본적으로 request_uri 가 붙는다..
가령, www.abc.com/test/index.php?a=123 을 아래의 룰로 redirect하면
rewrite ^/test/ / permanent;
www.abc.com/test/?a=123
결과
www.abc.com/?a=123
으로 되어 버린다~
아래와 같이 하면 깔끔하게 해결~
rewiret ^/test/ /? permanent;
www.abc.com/test/?a=123
결과
www.abc.com/
사소하지만 이거 찾는데 시간이 좀 걸렸따아~;ㅋ
ssl 인증서는 서버당 한개의 인증서만 설치됩니다. (기본포트 443)
여러개를 설치하려면,
1. 멀티인증서를 사용한다. 그러나 최소4개의 도메인에 대한 인증서와
만기일을 항상 맞춰야한다는 단점이 있으며, 인증서 추가시 모든인증서를 다시 받아야하는 단점이 있다.
2, 다른방법으로는 ssl 포트번호를 바꾸는방법인데..
기본적으로 http://xxx:444 와 같이 별도 포트로 연결처리를 해야한다.
3. 서버에 IP를 추가할당하여 각각 IP로 인증서설치(nginx에서만 됨)
nginx에서 동일한 ssl 기본포트(443)로 여러개의 인증서를 설치하려면,
기본적으로 서버에 IP를 별도로 할당할 수 있어야합니다~ (아파치에서는 안됨)
$ ifconfig
bce0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=401bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,VLAN_HWTSO>
ether 78:2b:cb:4a:74:36
inet 110.x.x.92 netmask 0xffffff00 broadcast 110.92.254.255
inet 110.x.x.93 netmask 0xffffffff broadcast 110.92.254.93
media: Ethernet autoselect (1000baseTX <full-duplex,flowcontrol,master,rxpause,txpause>)
status: active
그다음 nginx.conf 를 아래와 같이 기술
server {
listen 110.x.x.92:443;
server_name www.abc.com;
ssl on;
ssl_certificate cert/chain.crt;
ssl_certificate_key cert/server.key;
..
..
}
server {
listen 110.x.x.93:443;
server_name www.bbc.com;
ssl on;
ssl_certificate cert2/chain.crt;
ssl_certificate_key cert2/server.key;
..
..
}
두IP에 대한 443포트가 띄워져있는걸 볼 수 있네요~
$netstat -na | grep LISTEN
tcp4 0 0 110.x.x.93.443 *.* LISTEN
tcp4 0 0 110.x.x.92.443 *.* LISTEN
nginx로 proxy서버로 사용할때 목적지서버의 404나 403 등의 에러응답코드를
다른것으로 변조하고 싶은경우가 있다.
이럴경우 아래의 코드를 삽입해서 proxy서버에서 직접 콘트롤 가능하게 할 수 있다.
xxx
proxy_intercept_errors on;
error_page 403 /403.jpg;
proxy서버에서 특정페이지로 redirect하거나 여러가지 일을 할 수 있다.
502 bad 에러를 내뱉는다..
ajax로 호출하는 페이지에 양이 많을경우( 아마 헤더용량을 넘어선듯..)
nginx.conf에 아래를 추가한다.
fastcgi_buffer_size 128k;
에러가 안난다.. 너무큰가.. 기본값이 4k 인가. 암튼..ㅋ
<? phpinfo() ?> 로 저장후 test.jpg를 올리게 되면
nginx는 uri 뒤에 확장자만 .php면 넘기게 되어 있기때문에 보안에 주의해야합니다.
위의 경로로 test.jpg가 구동되는것을 방지하려면,
if (!-f $request_filename) { return 403; }
혹은
if (!-e $request_filename) { rewrite ^.*$ /index.php last; }
이렇게 구성해주면 됩니다.
통상적인 프레임워크를 쓰기위한 rewite 가 아래와 같이 구성되어 있으면
rewrite ^.*$ /index.php last;
}
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
nginx 쓰면서 가장 보안에 주의해야할 부분입니다.
/usr/local/sbin/php-fpm start
아래와 같은 에러가 나면서 start 스트립트가 멈추지 않는 현상이 나타난다.
vi /usr/local/sbin/php-fpm 의 상단에
php_fpm_CONF=/usr/local/etc/php-fpm.conf
과 같이 pid의 경로를 제대로된 경로로 수정해주니 잘되었따아.. 1시간삽질;;;