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

Posted owen-li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx实现反向代理和负载均衡相关的知识,希望对你有一定的参考价值。

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实现负载均衡完成。


以上是关于nginx实现反向代理和负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

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

Nginx简单实现反向代理和负载均衡

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

Nginx简单实现反向代理和负载均衡

nginx反向代理访问很慢,我做了负载均衡,现在几乎无法访问,有谁能帮我解决一下,万分感谢。

Nginx实现反向代理负载均衡功能