DirectAdmin + Nginx/Reverse Proxy

DirectAdmin + Nginx (Reverse Proxy)

DirectAdmin is a Control panel for web hosting companies running Red Hat 7.x, 8.x, 9.x, Red Hat Enterprise and FreeBSD.

Nginx is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server.

Note
This tutorial,Will show how to Install Nginx and Configure Nginx for DirectAdmin Server
* Note for those not use DirectAdmin, you can also follow/refer this tutorial.

a. Install Nginx

1. Download latest Nginx:

wget http://nginx.org/download/nginx-1.0.4.tar.gz

2. Extract tar file and move into the newly created directory:

tar -zxvf nginx-1.0.4.tar.gz
cd nginx-1.0.4

3. Configure:

./configure --sbin-path=/usr/local/sbin --with-http_ssl_module
make
make install

4. Test Run (Default) :

/usr/local/sbin/nginx

5. Open Browser and you will see “Welcome to nginx!”

http://**IP**

b. Configure Nginx as Reverse Proxy

0. Before we continue, make sure you kill the current nginx process

killall nginx

1. Move to Nginx configuration dir

cd /usr/local/nginx/conf

2. Make backup current conf file

mv nginx.conf nginx.conf.bak

3. Create new nginx.conf

nano -w nginx.conf

4. Paste this configuration to your nginx.conf :

user  apache; # make sure you use right user , apache or nobody.
# no need for more workers in the proxy mode
worker_processes  2;
error_log  /var/log/nginx/error.log info;
worker_rlimit_nofile 20480;
events {
 worker_connections 5120; # increase for busier servers
 use epoll; # you should use epoll here for Linux kernels 2.6.x
}
http {
 server_name_in_redirect off;
 server_names_hash_max_size 10240;
 server_names_hash_bucket_size 1024;
 include    mime.types;
 default_type  application/octet-stream;
 server_tokens off;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout  5;
 gzip on;
 gzip_vary on;
 gzip_disable "MSIE [1-6]\.";
 gzip_proxied any;
 gzip_http_version 1.1;
 gzip_min_length  1000;
 gzip_comp_level  6;
 gzip_buffers  16 8k;
# You can remove image/png image/x-icon image/gif image/jpeg if you have slow CPU
 gzip_types    text/plain text/xml text/css application/x-javascript application/xml image/png image/x-icon image/gif image/jpeg application/xml+rss text/javascript application/atom+xml;
 ignore_invalid_headers on;
 client_header_timeout  3m;
 client_body_timeout 3m;
 send_timeout     3m;
 reset_timedout_connection on;
 connection_pool_size  256;
 client_header_buffer_size 256k;
 large_client_header_buffers 4 256k;
 client_max_body_size 200M; 
 client_body_buffer_size 128k;
 request_pool_size  32k;
 output_buffers   4 32k;
 postpone_output  1460;
 proxy_temp_path  /tmp/nginx_proxy/;
 client_body_in_file_only on;
 log_format bytes_log "$msec $bytes_sent .";
# This dir must create for reverse proxy purpose 
include "/usr/local/nginx/vhosts/*"; # This dir must create for reverse proxy purpose
}

5. Create vhost dir

mkdir /usr/local/nginx/vhosts

6. Move to vhost dir

cd /usr/local/nginx/vhosts

7. Create vhosts file ( You can change to your own domain name/name )

pico -w lowkey.net.my

8. Paste this configuration ( **IP** : Please change to your server IP ):

server {
          error_log /var/log/nginx/vhost-error_log warn;
          listen **IP**:80;
          server_name lowkey.net.my www.lowkey.net.my;
          access_log /var/log/httpd/domains/lowkey.net.my.bytes bytes_log;
          access_log /var/log/httpd/domains/lowkey.net.my.log combined;
          root /home/lowkey/public_html;
          location / {
          location ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
          expires 7d;
          try_files $uri @backend;
          }
          error_page 405 = @backend;
          add_header X-Cache "HIT from Backend";
          proxy_pass http://**IP**:8081;
          include proxy.inc; # Refer step 9
          }
          location @backend {
          internal;
          proxy_pass http://**IP**:8081;
          include proxy.inc; # Refer step 9
          }
          location ~ .*\.(php|jsp|cgi|pl|py)?$ {
          proxy_pass http://**IP**:8081;
          include proxy.inc; # Refer step 9
          }
          location ~ /\.ht {
          deny all;
          }
        }

9. Create proxy.inc

touch /usr/local/nginx/conf/proxy.inc
cd /usr/local/nginx/conf/
pico -w proxy.inc

Paste this configuration :

proxy_connect_timeout 59s;
proxy_send_timeout   600;
proxy_read_timeout   600;
proxy_buffer_size    64k;
proxy_buffers     16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_pass_header Set-Cookie;
proxy_redirect     off;
proxy_hide_header  Vary;
proxy_set_header   Accept-Encoding '';
proxy_ignore_headers Cache-Control Expires;
proxy_set_header   Referer $http_referer;
proxy_set_header   Host   $host;
proxy_set_header   Cookie $http_cookie;
proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

10. Finish Configure as reverse proxy

c. Change Apache port 80 to 8081

We already configure Nginx listen to port 80 and now we need Apache listen to 8081

1. Locate and Edit httpd.conf

find / -name httpd.conf
/etc/httpd/conf/httpd.conf
/usr/local/directadmin/data/users/lowkey/httpd.conf

Here, I need reconfigure two httpd.conf files.

2. First httpd.conf

pico /etc/httpd/conf/httpd.conf
Change Listen 80 To Listen 8081

3. Second httpd.conf

pico /usr/local/directadmin/data/users/lowkey/httpd.conf
Change VirtualHost **IP**:80 To VirtualHost **IP**:8081

4. Restart Apache

service httpd restart

5. Now your Apache listen to port 8081

6. Finish change port to 8081

d. Run Nginx

Now, everything is ready.

1. Run Nginx

/usr/local/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 

2. Done!

Now You’re done.

Leave a Reply

Protected by WP Anti Spam