เพิ่มความแรงให้ Server Debian Directadmin ด้วย Nginx
โดย เมื่อ 1st March 2011 เวลา 23:43:38 (1907 เปิดอ่าน)
ขั้นตอนการทำให้ Directadim ของเราทำตามแนวคิดที่ว่ามานี้
ก่อนอื่นเรามาเพิ่มประสิทธิภาพของ Apache กับ PHP ด้วย Fcgi กันก่อน ไปที่ blog คุณ Icez ตาม link นี้ http://www.icez.net/...gid-php-fastcgi (หากไม่ใช้ fcgi ก็ไม่ต้องติดตั้งก็ได้ครับ)
เอาหละถ้าใครทำเสร็จแล้วเราก็มาต่อกันเลย (อันนี้ผมทำใน Debian นะครับพอดีผมไม่ได้เล่น centos ใครใช้ centos วิธีการคงไม่ต่างกันมาก)
ก่อนอื่นสั่งติดตั้ง NGINX ก่อนด้วย
centos ใช้Code:aptitude install nginx
จากนั้นแก้ไขไฟล์ configCode:yum install nginx
nano /etc/nginx/nginx.conf
จากนั้นเราก็สร้างไฟล์ดังนี้user apache apache;
worker_processes 4;
worker_rlimit_nofile 150000;
error_log /var/log/nginx/error_log;
pid /var/run/nginx/nginx.pid;
events {
worker_connections 25000;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
limit_zone one $binary_remote_addr 10m;
limit_conn one 7;
limit_rate 512K;
limit_zone cglob $binary_remote_addr 16m;
client_header_timeout 60;
client_body_timeout 60;
send_timeout 120;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_send_timeout 180;
msie_padding on;
proxy_buffer_size 32K;
proxy_buffers 64 512K;
proxy_busy_buffers_size 1024K;
proxy_temp_file_write_size 1024K;
gzip on;
gzip_min_length 10240;
gzip_buffers 32 64k;
gzip_types application/x-javascript text/css text/xml text/plain;
client_header_buffer_size 4K;
client_max_body_size 100000000;
large_client_header_buffers 16 8K;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
output_buffers 32 256k;
postpone_output 1460;
lingering_time 30;
lingering_timeout 6;
reset_timedout_connection on;
keepalive_timeout 20;
server_names_hash_bucket_size 10240;
server {
listen **IP ของ server เรานะ**:85 default rcvbuf=8192 sndbuf=16384;
server_name localhost;
access_log /var/log/httpd/access_log main;
error_log /var/log/nginx/error_log info;
location / {
proxy_pass http://**IP ของ server เรานะ**/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Main Static files location
location ~* ^/(phpmyadmin|webmail|squirrelmail|uebimiau|roundcube)/.+\.(jpg|jpeg|gif|png|ico|css|zip|tar|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|wmv|avi|cur|swf|mp3|wma|htc|cur)$ {
root /var/www/html/;
expires 30d;
access_log off;
}
# MRTG
location ~* ^/(stats)/.+\.(jpg|jpeg|gif|png|html|htm)$ {
root /var/www/html/;
access_log off;
}
#Static files location
location ~* ^.+\.(jpg|jpeg|gif|mp3|png|avi|vob|mpg|mpeg|mp4|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root /var/www/html;
}
}
include /etc/nginx/conf.d/virtual.conf;
}
ไฟล์ที่ 1
nano /usr/local/directadmin/data/templates/custom/nginx.conf
server {
listen |IP|:85;
server_name |DOMAIN| www.|DOMAIN| |SERVER_ALIASES|;
access_log /var/log/httpd/domains/|DOMAIN|.log main;
error_log /var/log/httpd/domains/|DOMAIN|.error.log error;
location / {
proxy_pass http://|IP|;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 120 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location @back {
proxy_pass http://|IP|;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#Static files location
location ~* ^.+\.(jpg|jpeg|gif|mp3|png|avi|vob|mpg|mpeg|mp4|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root |HOME|/domains/|DOMAIN|/public_html;
expires 14d;
error_page 404 = @back;
}
}
ไฟล์ที่ 2
nano /usr/local/directadmin/scripts/nginx_direct.sh
#!/bin/bash
NGINXHOST=/etc/nginx/conf.d/virtual.conf;
PATH_CONF=/usr/local/directadmin/data/users;
NGINXTEMPATE=/usr/local/directadmin/data/templates/custom/nginx.conf;
NGINXSUBTEMPATE=/usr/local/directadmin/data/templates/custom/nginx_sub.conf;
HOLD=/tmp/nginx.conf.$$;
showHelp() {
echo "Rewrite all users's nginx.conf from template:";
echo "$0 all ";
echo "Rewrite users nginx.conf :";
echo "$0 -u username";
echo "For useing modify nginx.conf , you mast create file:";
echo "/usr/local/directadmin/data/users/USERNAME/domains/DOMAIN_NAME.custom_nginx with modify config.";
}
do_exit() {
exit 1;
}
check_user(){
if [ "$1" = "" ] ; then
#echo "User not exit";
return 1;
else
return 0;
fi
}
check_domain()
{
if [ ! -s $1 ];then
return 1;
else
return 0;
fi
}
user_configs(){
_UHOME=`grep -e "^${1}:" /etc/passwd | cut -d: -f6`;
_USER=$1;
_DOMAINLIST=${PATH_CONF}/$_USER/domains.list;
_NGINXCONF=${PATH_CONF}/$_USER/nginx.conf;
if ! check_user $_UHOME; then
return 1;
fi
if ! check_domain $_DOMAINLIST; then
return 1;
fi
_UIP=`cat ${PATH_CONF}/$_USER/user.conf | grep ip= | cut -d= -f2`;
if [ ! -f $_NGINXCONF ]
then
echo "include $_NGINXCONF;" >> $NGINXHOST;
else
cat $_NGINXCONF > $HOLD;
rm -rf $_NGINXCONF;
fi
for i in `cat $_DOMAINLIST`; do
if [ -f ${PATH_CONF}/$_USER/domains/$i.custom_nginx ]
then
cat ${PATH_CONF}/$_USER/domains/$i.custom_nginx >> $_NGINXCONF;
else
if [ -f ${PATH_CONF}/$_USER/domains/$i.pointers ]
then
for j in `cat ${PATH_CONF}/$_USER/domains/$i.pointers | awk -F= '{print $1}' `; do
park=`echo "$park $j www.$j"`;
done
fi
if ! cat $NGINXTEMPATE | sed 's#|HOME|#'$_UHOME'#g' | sed 's!|DOMAIN|!'$i'!g' |sed 's/|SERVER_ALIASES|/'"$park"'/' | sed 's!|IP|!'$_UIP'!' | sed 's!|USERNAME!'$1'!' >> $_NGINXCONF; then
if [ -f $HOLD ]; then
cat $HOLD > $_NGINXCONF;
fi
return 1;
fi
fi
for l in `cat ${PATH_CONF}/$_USER/domains/$i.subdomains`; do
cat $NGINXSUBTEMPATE | sed 's#|HOME|#'$_UHOME'#g' | sed 's!|DOMAIN|!'$i'!g'|sed 's/|SUB|/'$l'/g' | sed 's!|IP|!'$_UIP'!' | sed 's!|USERNAME|!'$1'!' >> $_NGINXCONF;
done
park="";
done
if [ -f $HOLD ]; then
rm -rf $HOLD;
fi
}
doAll(){
for i in `ls /usr/local/directadmin/data/users/`; do
user_configs $i;
done
}
case "$1" in
all) doAll;
;;
-u) user_configs $2;
;;
* ) showHelp;
do_exit 0;
;;
esac
do_exit 0;
ไฟล์ที่ 3
nano /usr/local/directadmin/scripts/nginx_task.sh
#!/bin/bash
if [ -f /etc/nginx/task.nginx ]; then
`cat /etc/nginx/task.nginx | sort -u > /etc/nginx/task.nginx.do`
rm -rf /etc/nginx/task.nginx
while read LINE
do
`echo sh $LINE`;
done < /etc/nginx/task.nginx.do
rm -rf /etc/nginx/task.nginx.do
/etc/init.d/nginx reload
fi
ไฟล์ที่ 4
nano /usr/local/directadmin/scripts/nginx_del.sh
จากนั้นเอาข้อความนี้#!/bin/bash
USER_CONF="include /usr/local/directadmin/data/users/$1/nginx.conf;";
if cp /etc/nginx/conf.d/virtual.conf /etc/nginx/conf.d/virtual.conf.bak; then
rm -rf /usr/local/nginx/etc/users/$1;
STR="/usr/bin/perl -pi -e 's#$USER_CONF##' /etc/nginx/conf.d/virtual.conf.bak";
eval ${STR};
sed '/^$/d' /etc/nginx/conf.d/virtual.conf.bak > /etc/nginx/conf.d/virtual.conf;
rm -rf /etc/nginx/conf.d/virtual.conf.bak
fi
ใส่ในไฟล์รายชื่อด้านล่าง หากไม่ไฟล์อยูแล้วให้เพิ่มลงไป หากยังไม่มีไม่ไฟล์ให้สร้างขั้น ไฟล์ทั้งหมดอยู่ใน folder /usr/local/directadmin/scripts/custom นะครับCode:echo "/usr/local/directadmin/scripts/nginx_direct.sh -u $username" >> /etc/nginx/task.nginx
domain_create_post.sh
domain_destroy_post.sh
domain_pointer_create_post.sh
domain_pointer_destroy_post.sh
subdomain_create_post.sh
subdomain_destroy_post.sh
user_create_post.sh
ส่วน user_destroy_post.sh ให้ใส่ว่า
ทำการเปลี่ยนเจ้าของไฟล์ซะCode:/usr/local/directadmin/scripts/nginx_del.sh $username
เปลี่ยน mode ไฟล์ด้วยนะCode:chown diradmin:diradmin -R /usr/local/directadmin/scripts/*
เพิ่มใน crontab ด้วนะCode:chmod a+x /usr/local/directadmin/scripts/custom/*.sh chmod a+x /usr/local/directadmin/scripts/*.sh
จากนั้นก็ start nginxCode:crontab -e */2 * * * * /usr/local/directadmin/scripts/nginx_task.sh
ที่นี้เราก็ปรับ IPtable ให้มันเตะ port 80 เข้าที่ Nginx เลยCode:/etc/init.d/nginx start
ปรับ IP ให้ตรง http://www.icez.net/blog/131/%E0%B9%...B8%A3%E0%B8%87Code:iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 85
ลองดูนะครับ เนื่องจากผมเขียนรวดเดียวจบอาจมีข้อผิดพลาดนะครับ อ้างอิง
http://directadm.in/nginx#use_nginx_as_proxy
http://www.thaihosttalk.com/topic/31...22#entry291522





Email Blog Entry