Nginx + DirectAdmin

Nginx + DirectAdmin
Nginx + DirectAdmin
cd /tmp
wget http://nginx.org/download/nginx-1.5.10.tar.gz
tar xzvf nginx-1.5.10.tar.gz
cd nginx-1.5.10
./configure --sbin-path=/usr/local/sbin --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module
make
make install
vim /usr/local/nginx/conf/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       /usr/local/nginx/conf/mime.types;
    default_type  application/octet-stream;
    server_tokens off;

    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_zone   $binary_remote_addr zone=one:10m;
    limit_conn        one  7;
    limit_rate        512K;
    #limit_zone cglob  $binary_remote_addr 16m;
    limit_conn_zone   $binary_remote_addr zone=cglob: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       xxx.xxx.xxx.xxx:85 default rcvbuf=8192 sndbuf=16384; #ipSV
        server_name  localhost;
        access_log  /var/log/httpd/access_log  main;
        error_log   /var/log/nginx/error_log info;

        location / {
                    proxy_pass         http://xxx.xxx.xxx.xxx/; #ipSV
                    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;
        }

        location /nginx-status {
        stub_status on;
        access_log off;
        #allow 127.0.0.1; # Real IP here
        #deny all;
        }
    }
include /usr/local/nginx/etc/virtual.conf;
}
vim /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;
        access_log off;
        error_log  off;
        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; #120
                        proxy_send_timeout 90;
                        proxy_read_timeout 90; #120
                        
                        
                        proxy_buffer_size 64k;
                        proxy_buffers 120 256k;
                        proxy_busy_buffers_size 256k;
                        proxy_temp_file_write_size 256k;
                        
                    }
        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;
        }
    }
vim /usr/local/directadmin/data/templates/custom/nginx_sub.conf
server {
        listen       |IP|:85;
        server_name  |SUB|.|DOMAIN| www.|SUB|.|DOMAIN|;
        #access_log /var/log/httpd/domains/|DOMAIN|.|SUB|.log  main;
        #error_log  /var/log/httpd/domains/|DOMAIN|.|SUB|.error.log error;
        access_log off;
        error_log  off;
        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; #120
                        proxy_send_timeout 90;
                        proxy_read_timeout 90; #120

                        proxy_buffer_size 64k;
                        proxy_buffers 120 256k;
                        proxy_busy_buffers_size 256k;
                        proxy_temp_file_write_size 256k;

                    }
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/|SUB|;
            expires 14d;
            error_page   404  =  @back;
        }
    }

.
.

vim /usr/local/directadmin/scripts/nginx_direct.sh
#!/bin/bash
NGINXHOST=/usr/local/nginx/etc/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;
vim /usr/local/directadmin/scripts/nginx_task.sh
#!/bin/bash
if [ -f /usr/local/nginx/etc/task.nginx ]; then
`cat /usr/local/nginx/etc/task.nginx | sort -u > /usr/local/nginx/etc/task.nginx.do`
rm -rf /usr/local/nginx/etc/task.nginx
while read LINE
do
   `echo sh $LINE`;
done < /usr/local/nginx/etc/task.nginx.do
rm -rf /usr/local/nginx/etc/task.nginx.do
#/etc/init.d/nginx reload
killall nginx && /usr/local/sbin/nginx
fi
vim /usr/local/directadmin/scripts/nginx_del.sh
#!/bin/bash
USER_CONF="include /usr/local/directadmin/data/users/$1/nginx.conf;";
if cp /usr/local/nginx/etc/virtual.conf /usr/local/nginx/etc/virtual.conf.bak; then
    rm -rf /usr/local/nginx/etc/users/$1;
    STR="/usr/bin/perl -pi -e 's#$USER_CONF##' /usr/local/nginx/etc/virtual.conf.bak";
    eval ${STR};
    sed '/^$/d' /usr/local/nginx/etc/virtual.conf.bak > /usr/local/nginx/etc/virtual.conf;
    rm -rf /usr/local/nginx/etc/virtual.conf.bak
fi
cd /usr/local/directadmin/scripts/custom
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > domain_create_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > domain_destroy_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > domain_pointer_create_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > domain_pointer_destroy_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > subdomain_create_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > subdomain_destroy_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_direct.sh -u \$username\" >> /usr/local/nginx/etc/task.nginx" > user_create_post.sh;
echo "echo \"/usr/local/directadmin/scripts/nginx_del.sh \$username\" >> /usr/local/nginx/etc/task.nginx" > user_destroy_post.sh;
mkdir /var/run/nginx/
mkdir /usr/local/nginx/etc/
>/usr/local/nginx/etc/virtual.conf
mkdir /var/log/nginx
>/var/log/nginx/error_log
chown diradmin:diradmin -R /usr/local/directadmin/scripts/*
chmod a+x /usr/local/directadmin/scripts/custom/*.sh
crontab -e
*/2 * * * * /usr/local/directadmin/scripts/nginx_task.sh &
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 85
#or
iptables -t nat -A PREROUTING -i vlan1557 -d 122.155.7.xxx -p tcp --dport 80 -j DNAT --to 122.155.7.xxx:85
#or
iptables -t nat -A PREROUTING -i vmbr0 -d 122.155.12.xxx -p tcp --dport 80 -j DNAT --to 122.155.12.xxx:85

#nginx shortcut

rm -f /usr/local/directadmin/data/users/*/nginx.conf
cat /dev/null > /usr/local/nginx/etc/virtual.conf
/usr/local/directadmin/scripts/nginx_direct.sh all
cat /var/log/nginx/error_log | awk '{print $16}' | cut -d, -f1 | sort | uniq -c | sort -nr |more

 September 15, 2013

 Blog | # #

qrcode
Facebook Facebook X / Twitter Twitter Telegram Telegram Pinterest Pinterest Email Email

Re-commend-เด็ด ๆ ต่อจาก Nginx + DirectAdmin

  • Magicz?~