Sử dụng Nginx là LoadBalancer và Reserve Proxy cho Webserver

0
1375
(Last Updated On: Th10 12, 2017)

Nginx (Engineer X) vừa là máy chủ web, vừa là máy chủ cân bằng tải, cũng có thể là một Proxy server, App server…

Nginx có điểm mạnh là một Webserver có hiệu suất cao, có thể phục vụ nhiều kết nối đồng thời mà không tốn quá nhiều tài nguyên của máy chủ mà vẫn giữ được tính ổn định. Cấu hình thì đơn giản.

Nginx rất đa năng và sẽ là tương lai của WebServer thương mại

Mình xin đưa ra một cấu hình đơn giản để Nginx đóng vai trò là một Reserve Proxy cũng có thể là một LoadBalancer.

Dưới đây là tập tin nginx.conf (/etc/nginx/nginx.conf):

user www-data;
worker_processes 4;
pid /run/nginx.pid;
worker_rlimit_nofile  8192;
events {
  worker_connections 768;
  # multi_accept on;
}

http {

  ##
  # Basic Settings
  ##
  proxy_max_temp_file_size 10000m;
  proxy_connect_timeout       6000;
  proxy_send_timeout          6000;
  proxy_read_timeout          6000;
  send_timeout                6000;
  client_header_timeout 2400;
  client_body_timeout 2400;
  fastcgi_read_timeout 2400;
  client_max_body_size 10000m;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 7200;
  types_hash_max_size 2048;
  # server_tokens off;

  server_names_hash_bucket_size 512;
  # server_name_in_redirect off;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  ##
  # Logging Settings
  ##

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  ##
  # Gzip Settings
  ##

  gzip on;
  gzip_disable "msie6";

  # gzip_vary on;
  # gzip_proxied any;
  # gzip_comp_level 6;
  # gzip_buffers 16 8k;
  # gzip_http_version 1.1;
  # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  ##
  # nginx-naxsi config
  ##
  # Uncomment it if you installed nginx-naxsi
  ##

  #include /etc/nginx/naxsi_core.rules;

  ##
  # nginx-passenger config
  ##
  # Uncomment it if you installed nginx-passenger
  ##
  
  #passenger_root /usr;
  #passenger_ruby /usr/bin/ruby;

  ##
  # Virtual Host Configs
  ##

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
# 
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

Còn đây là tập tin Virtual Host default (/etc/nginx/sites-available/default):

# You may add here your
# server {
#	...
# }
# statements for each of your virtual hosts to this file

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
upstream backend  {
  server web.vngeek.com;
}
upstream mediaserver  {
        server media.vngeek.com;
}
server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;
  proxy_max_temp_file_size 10000m;	
  root /usr/share/nginx/html;
  index index.html index.htm;

  # Make site accessible from http://localhost/
  server_name vngeek.com vngeek.com;
  location / {
    proxy_pass  http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#		proxy_max_temp_file_size 10000m;
    }
  }
  
server {
        listen 80;
#        listen [::]:80 ipv6only=on;

       root /usr/share/nginx/html;
       index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name media.vngeek.com;
        location / {
                proxy_pass  http://mediaserver;
                }
        }

#	location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
#		try_files $uri $uri/ =404;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
#	}

  # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
  #location /RequestDenied {
  #	proxy_pass http://127.0.0.1:8080;    
  #}

  #error_page 404 /404.html;

  # redirect server error pages to the static page /50x.html
  #
  #error_page 500 502 503 504 /50x.html;
  #location = /50x.html {
  #	root /usr/share/nginx/html;
  #}

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  #location ~ \.php$ {
  #	fastcgi_split_path_info ^(.+\.php)(/.+)$;
  #	# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
  #
  #	# With php5-cgi alone:
  #	fastcgi_pass 127.0.0.1:9000;
  #	# With php5-fpm:
  #	fastcgi_pass unix:/var/run/php5-fpm.sock;
  #	fastcgi_index index.php;
  #	include fastcgi_params;
  #}

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #
  #location ~ /\.ht {
  #	deny all;
  #}



# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#	listen 8000;
#	listen somename:8080;
#	server_name somename alias another.alias;
#	root html;
#	index index.html index.htm;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}


# HTTPS server
#
#server {
#	listen 443;
#	server_name localhost;
#
#	root html;
#	index index.html index.htm;
#
#	ssl on;
#	ssl_certificate cert.pem;
#	ssl_certificate_key cert.key;
#
#	ssl_session_timeout 5m;
#
#	ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#	ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
#	ssl_prefer_server_ciphers on;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

Các bạn cài đặt nginx:

Trên Centos 7:

yum install epel-release

yum install nginx

Cấu hình mặc định webserver nginx:

/etc/nginx/nginx.conf

Virtual host (server block) nằm ở:

/etc/nginx/conf.d

 

Trên Debian (tương tự ubuntu):

add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx

Các bạn chỉnh sửa file Virtual Host:

Và file /etc/nginx/nginx.conf là được.

Khởi động lại nginx:

service nginx restart

Vậy là xong. Chúc các bạn thành công.

Bình luận