再回首之Nginx(六) 代理服务


引言

  • 静态资源WEB服务
  • 代理服务
  • 负载均衡调度器SLB
  • 动态缓存

本文介绍Nginx的二种使用场景----代理服务与负载均衡SLB。


代理服务

  • 正向代理
  • 反向代理

区别在于代理的对象不一样

正向代理代理的对象是客户端
反向代理代理的对象是服务端

配置语法

Syntax: proxy_pass URL;
Default:--
Context:location,if in location,limit_except

URL示例:

http://localhost:8000/uri
https://localhost:8000/uri
http://unix:/tmp/backend.socket:/uri;

反向代理示例:

       location /demo/ {
             root   /usr/local/apache-tomcat-8.0.45/webapps;
             index  index.jsp;
             proxy_pass  http://localhost:8081/demo/;
             proxy_connect_timeout 600;
             proxy_read_timeout 600;
        }

正向代理示例:

       resolver 8.8.8.8;
       location / {
             proxy_pass  http://$http_host$request_uri;
        }

resolver 是作DNS解析的,8.8.8.8是google的dns解析地址。


Nginx作为反向代理__代理配置语法

1.缓冲区的配置:

Syntax: proxy_buffering on | off;
Default:    proxy_buffering on;
Context:    http, server, location

扩展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size

2.跳转重定向

Syntax: proxy_redirect default;
        proxy_redirect off;
        proxy_redirect redirect replacement;
Default:proxy_redirect default;
Context:http, server, location

3.头信息

Syntax: proxy_set_header field value;
Default:proxy_set_header Host $proxy_host;
        proxy_set_header Connection close;
Context:http, server, location

扩展:proxy_hide_header、proxy_set_body

4.超时

Syntax: proxy_connect_timeout time;
Default:proxy_connect_timeout 60s;
Context:http, server, location

扩展:proxy_read_timeout、proxy_send_timeout

实际示例:

location /{
    proxy_pass http:127.0.0.1:8080;
    proxy_redirect  default;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote-addr;

    proxy_connect_timeout 30;
    proxy_read_timeout:60;
    proxy_send_timeout:60;

    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_tmp_file_size 256k;
}

因为这些常用的配置都是属于通用型的,因此我们可以把它抽取出来,单独放在proxy_params;

location /{
    proxy_pass http:127.0.0.1:8080;
    include proxy_params;
}

Nginx负载均衡

负载均衡按照范围分类

  • GSLB


    GSLB
  • SLB

SLB

安装网络模型(OSI)分类:

  • 四层负载均衡
四层负载均衡

也就是在四层传输层。处理tcp/ip,TCPI/IP协议的包转发即可,效率很高。

七层负载均衡

七层负载均衡

处理第七层应用层,如:http信息

Nginx是一个典型的七层负载均衡的SLB。

Nginx负载均衡的原理

配置语法

Syntax: upstream name{ ... } ;
Default:proxy_next_upstream error timeout;
Context:http

必须配置在server层以外。

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream imooc{
        server 116.62.103.228:8001;
        server 116.62.103.228:8002;
        server 116.62.103.228:8003;
    }

    server {
        listen 80;    
        server_name localhost www.gongxu8023.xin
        
        access_log /var/log/nginx/test_proxy.access.log main;
        
        location{
            proxy_pass http://imooc;
            include proxy_params;
        }
    }

    include /etc/nginx/conf.d/*.conf;
}

upstream举例:

upstream backend{
    server backend1.example.com weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;

    server backend1.example.com:8080 backup;
    server.backend2.example.com:8080 backup;
}
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务暂停的时间
max_conns 限制最大的接受的连接数

后端服务器在负载均衡调度中的状态

down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务暂停的时间
max_conns 限制最大的接受的连接数

Nginx作负载均衡服务的轮询策略及加权轮询

加权轮询与轮询的方式都是基于请求来进行分配的。

由于是基于请求进行分配的,有可能导致同一客户端发出的若干请求会被分配到不同的后端上去,由此带来cookie、session等验证不通过。

调度算法解决了上述可能会出现的问题

轮询 按时间顺序逐一分配到不同的后端服务器
加权轮询 weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器
least_conn 最少链接数,哪个机器连接数少就分发
url_hash 按照访问的url的hash结果来分配请求,是每个URL定向到同一个后端服务器
hash关键数值 hash自定义的key

示例:

upstream imooc{
    ip_hash;
    server 116.232.12.23:8001 ;
    server 116.232.12.23:8002 ;
    server 116.232.12.23:8003 ;
}

url_hash语法

Syntax:hash key [consistent];
Default:--;
Context:upstream
This directive appeared in version 1.7.2

示例:

upstream imooc{
    hash $request_uri;
    server 116.232.12.23:8001 ;
    server 116.232.12.23:8002 ;
    server 116.232.12.23:8003 ;
}

你可能感兴趣的:(再回首之Nginx(六) 代理服务)