nginx实现反向代理和负载均衡

    xiaoxiao2021-04-13  25

    1:为什么要实现负载均衡:

        当一台服务器的单位时间内访问量越大的时候,服务器压力会越大,当一台服务器压力大得超过自身的承受压力的时候,服务器会崩溃,为了避免服务器崩溃,让用户更好的体验,我们通常通过负载均衡的方式来分担服务器的压力。那么什么是负载均衡呢?我们可以建立很多个服务器,这些服务器组成一个服务器集群,然后当用户访问我们的网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器群众选着一个压力较小的服务器,然后将改访问请求引入该选择的服务器。这样,用户每次的访问,都会保证服务器集群中的每个服务器的压力区域平衡,分担了服务器的压力,避免了了服务器崩溃的情况。

    2:nginx优势:

    nginx是一款可以通过反向代理实现负载均衡的服务器,使用nginx服务器实现负载均衡的时候,用户首先会访问到nginx服务器,然后nginx服务器再从服务器群众选择压力较小的服务器,把改访问请求引入到该服务器。若服务器群中的某个服务器崩溃,那么从待选的服务器列表中将该服务器删除,也就是说如果一个服务器崩溃了,那么nginx就肯定不会把访问引入该服务器了。

    3:正向与反向代理:

    example: 如图所示: 图一:正向代理 图二:反向代理,也可理解为负载均衡

    4:nginx负载均衡实现:

    首先我们要有服务器群,正常的生产环境中,服务器群中存放的内容都是一样的,nginx作为中间服务器,将用户的访问根据服务器群压力大小,引入到压力较小的服务器,实现负载均衡。在此实验中我们为了能看到实现负载将请求引入到不同的服务器下,所以服务器群的内容要不一致,这样才能直观看出看出我们nginx实现了负载均衡。(如果实验所用的服务器群里面的内容都一样,不易看出是否nginx将访问请求引入到不同的服务器) 准备:假如我们有个服务器群,有三台服务器。(分别是百度,京东,本人小博客) 由于做实验,就直接修改了nginx主配置文件。 http { 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 /var/log/nginx/access.log main; upstream myservers{ server 115.159.105.94; server 111.206.227.118; server 61.135.169.125; } sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 8088 default_server; listen [::]:8088 default_server; server_name _; # root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://myservers; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }# Settings for a TLS enabled server.## server {# listen 443 ssl http2 default_server;# listen [::]:443 ssl http2 default_server;# server_name _;# root /usr/share/nginx/html;## ssl_certificate "/etc/pki/nginx/server.crt";# ssl_certificate_key "/etc/pki/nginx/private/server.key";# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## location / {# }## error_page 404 /404.html;# location = /40x.html {# }## error_page 500 502 503 504 /50x.html;# location = /50x.html {# }# }} 注:在配置文件中: upstream myservers{#myservers为自己定义的服务器群名称,可以随意修改 server 115.159.105.99;(个人小博客) server 111.206.227.118;(京东) server 61.135.169.125;(百度) } 是我们的服务器集群, 在server中配置:可以看到我们修改端口为监听8088.在location中将我们的访问指向我们的服务器群,也就是说当我们访问www.example.com:8088(假装域名为www.example.com)就会将我们根据服务器群的压力大小引入不同的服务器,所以在实验中可以看到我们刷新的时候一会在百度,一会在京东,一会在自己的小博客。这样既实现了负载均衡 server { listen 8088 default_server; listen [::]:8088 default_server; server_name _; # root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://myservers; } } 至此,nginx实现负载均衡完成。
    转载请注明原文地址: https://ju.6miu.com/read-669004.html

    最新回复(0)