Nginx配置集群以及后端代理,简单实现负载均衡

Song1520 次浏览0个评论2022年03月25日

帮助客户部署产品遇到一种Ngxin集群解决方案;所以记录方便后期运用到:

一、业务场景

客户使用一个对外服务器IP,域名解析将所有的流量全部引入对外服务器;然后通过Nginx转发到机房的其他服务器,也就是说本地集群;本场景主要用于访问量大的服务器请求。同时我们以前有分享过直接域名实现负载均衡,两者的不同点在于一个是域名负载均衡需要多台线上服务器(多个对外IP)而本方法只需要一台服务器。

域名实现负载均衡,一个域名随机访问多台服务器

二、Nginx负载均衡配置

我们通过upstream配置转发到的均衡服务器、然后在server中配置域名与转发即可。

1、什么是Upstream

upstream属于handler,只是他不产生自己的内容,而是通过请求后端服务器得到内容,所以才称为upstream(上游)。请求并取得响应内容的整个过程已经被封装到nginx内部,所以upstream模块只需要开发若干回调函数,完成构造请求和解析响应等具体的工作。

2、配置教程

我们支持分别配置80和443接口即所有nginx proxy_pass同时支持http/https;

upstream example
{
        server 1.1.1.1:80;
        server 2.2.2.2:80 backup;
}

upstream example_https
{
        server 1.1.1.1:443;
        server 2.2.2.2:443 backup;
}

server
{
    listen       80;
    server_name  www.example.com;
    index index.html index.htm index.php;
    root /data/web/webclose;
    location / {
        proxy_pass  http://example;
        expires off;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    access_log  /data/logs/$host.log  access;
}

server
{
    listen       443 ssl;
    server_name  www.example.com;    location / {
        proxy_pass  https://example_https;
        expires off;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    access_log  /data/logs/$host.log  access;
}

3、在均衡服务器中自己实现Https

同时我们可以把所有请求转到80端口,自己在均衡服务器内转https即可。或者说将所有的请求转成内部Http;目前Nginx的upstream模块支持6种方式的负载均衡策略(算法):轮询(默认方式)、weight(权重方式)、ip_hash(依据ip分配方式)、least_conn(最少连接方式)、fair(第三方提供的响应时间方式)、url_hash(第三方通过的依据URL分配方式)。

upstream test_backend {
    server 192.168.0.1:80 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.0.2:80 weight=2 max_fails=2 fail_timeout=30s;
    server 192.168.0.3:80 weight=3 max_fails=2 fail_timeout=30s;
    server 192.168.0.4:80 weight=4 max_fails=2 fail_timeout=30s;
}


server {
    listen 80;
    listen 443 ssl;
    server_name test.com;

    ssl_certificate         ssl/test.com.pem;
    ssl_certificate_key     ssl/test.com.key;
    ssl_session_cache  shared:SSL:10m;
    ssl_session_timeout  5m;
    ssl_protocols  TLSv1.2 TLSv1.1 TLSv1;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PS1;
    ssl_prefer_server_ciphers   on;

    access_log /home/work/logs/nginx/test.com.log main;
    error_log  /home/work/logs/nginx/test.com.err;


    location  / {
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://test_backend;
    }
}

具体教程参考 Nginx搭建负载均衡集群


提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文