加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 海宁网 (https://www.hainingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

如何搭建Nginx服务器做到负载均衡?

发布时间:2018-10-29 18:00:27 所属栏目:业界 来源:程序员食堂
导读:1.什么是Nginx? Nginx也是一款服务器,我们常用它做:如反向代理、负载均衡、动态与静态资源的分离的工作。 反向代理:相对应的是正向代理,如果你使用过代理服务器的话就明白,我们访问某一个网站并非直接访问目标网站,而是告诉代理服务器我需要访问什么
副标题[/!--empirenews.page--]

1.什么是Nginx?

Nginx也是一款服务器,我们常用它做:如反向代理、负载均衡、动态与静态资源的分离的工作。

反向代理:相对应的是正向代理,如果你使用过代理服务器的话就明白,我们访问某一个网站并非直接访问目标网站,而是告诉代理服务器我需要访问什么目标网站,由代理服务器发出请求给目标网站,将目标网站访问结果再转发给你,此时,你是请求代理方。而反向代理是此时代理服务器做服务器的代理,我们的访问请求并非直接访问到目标服务器上,而是访问代理服务器,由代理服务器决定什么样的请求以什么样的方式访问正式服务器。

如何搭建Nginx服务器做到负载均衡?

负载均衡:目前大多数的网站都会采用负载均衡手段来针对目前用户的指数级增长来减少对单点服务器的负载压力,比如目前我们拥有3台真实服务器,我们需要根据相应策略决定什么样的用户请求分配到哪个真实服务器,比如按照轮询的方式,用户请求挨个到达代理服务器,此时代理服务器按照第一个请求转发至第一台真实服务器,第二个请求转发到第二个服务器上,依次类推,这样可以防止大量的用户请求全部访问到同一台物理机上,单点物理机的性能始终有限的,当然这可能对服务器数据访问时候造成事务性的失效,在Web方面可能造成Session访问的问题,这不在本文讨论方面内。

动态静态资源分离:最方便列举就是Java的JSP和静态资源如:.js/.css/.html/.png方面的资源分离,之前开发web方面的程序时候我们习惯将html、css等资源文件也放置于Tomcat之中,用户访问后tomcat需要将请求的这些静态资源文件一并返回给用户,再者如果有多台同业务逻辑的tomcat服务器的话,同样的资源还需要在每个服务器上放一份,同时也增加了tomcat服务器的网络IO,十分不合算的,如果我们只讲JSP之类的请求交给tomcat,而代理服务器上存放静态资源,当用户的请求非动态资源的时候,我们完全可以将代理服务器的静态资源直接返回给用户,而不去增大Tomcat的压力,tomcat只需要负责逻辑处理和动态资源的加载就可以了。

基于上述的Nginx优势,决定搭建一下Nginx+Tomcat的组合来进行测试,包括参数传递,post、get传递参数是否有影响,还有Nginx的工作模式master和worker的工作方式进行一些浅薄的总结。如有错误,恳请大家指出。

2.Nginx的安装问题?

安装部分这里就不在细说了,网上的教程很多,我们直接从配置文件开始吧

3.配置文件

  1. #user  nobody; 
  2. #这里是核心worker数,一般设置为与cpu核心数相同的数目,避免进程切换造成的上下文切换耗费资源,cpu信息可以从/proc/cpuinfo中查看 
  3. worker_processes  1; 
  4.  
  5. #error_log  logs/error.log; 
  6. #error_log  logs/error.log  notice; 
  7. #error_log  logs/error.log  info; 
  8. #pid      logs/nginx.pid; 
  9. events { 
  10.     #use epoll model使用epoll模型,采用异步非阻塞模型加快处理速度 
  11.     use epoll;    worker_connections  1024; } 
  12. http {    include       mime.types;    default_type  application/octet-stream;   
  13.  #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    #设定通过nginx上传文件的大小    client_max_body_size 300m; 
  14. #使用sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率很高,被称之为零拷贝。    sendfile        on; 
  15.    #tcp_nopush     on;    #keepalive_timeout  0;    #连接活跃时间    keepalive_timeout  65;#使用压缩数据减少IO量,但是在不支持数据解压浏览器可能产生乱码    #gzip  on;    #静态服务器组    #设定静态资源服务器访问接口      upstream static.zh-jieli.com {       
  16.            server localhost:808 weight=1;      }      #动态服务器组      upstream zh-jieli.com {         
  17. #设置Hash轮询规则 
  18. #ip_hash; 
  19. #weight: server ip:port weight=10#默认 轮询# 
  20. fair:按照后端服务器的响应时间来分配 
  21. #url_hash:按照url规则进行分配,使得固定的请求分配到固定的服务器上                  server localhost:8080;         
  22.          server localhost:8081; 
  23.      }   
  24.  server{         listen 808;         server_name static;         location / {         }   location ~ .*.(js|css|ico|png|jpg|eot|svg|ttf|woff) {             #所有静态文件直接读取硬盘内容:读取的静态资源存放位置  root /apache-tomcat-8.5.24/webapps/ROOT ; 
  25.  #资源是否进行缓存与缓存时间             expires 30d; #缓存30天         }     }     
  26. server {        listen       80;        server_name  localhost;         
  27.         #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            root   html;           
  28.             index  index1.html index.htm;        }        location ~ .*.(js|css|ico|png|jpg|eot|svg|ttf|woff) {                  #proxy_cache cache_one;              proxy_cache_valid 200 304 302 5d;              proxy_cache_valid any 5d;              proxy_cache_key '$host:$server_port$request_uri';              add_header X-Cache '$upstream_cache_status from $host';              proxy_pass http://static.zh-jieli.com;             # 所有静态文件直接读取硬盘              root /apache-tomcat-8.5.24/webapps/ROOT;              expires 30d; #缓存30天          }           
  29. #其他页面反向代理到tomcat容器          location ^~ /tomcat {           
  30.             index index;                   # proxy_pass http://localhost:8080/;             #设定代理服务器组              proxy_pass http://zh-jieli.com/;          }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    } } 

总结

(编辑:财气旺网 - 海宁网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!