一、反向代理

  一般上线的项目,出于安全性的考虑,是不允许外网直接访问的,这时候nginx的反向代理功能就起到了关键作用。通常表现为,在生产服务器上部署项目和代理服务器,客户端不能直接访问生产服务器,需要通过nginx接收客户端传来的请求,然后转发给生产服务器,再将服务器的回应发送给客户端。这个闭合过程nginx充当一个中转站,在此过程中,用户不需要配置任何代理ip和端口,或者说客户端根本就不知道自己访问的是真实的服务器还是代理服务器,这样能有效的保证内网的安全 。

  简单配置如下:

server {
        listen       80;
        server_name  域名/ip;
        charset utf-8;

        location / {
            proxy_pass   http://127.0.0.1:21010;
            proxy_set_header  Host $host;
            proxy_set_header   X-real-ip $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;      
      
        }
    }
  

二、负载均衡

  当一台服务器满足不了访问量的时候,需要用其他的服务器进行分流,nginx可以很好的充当引流人,nginx负载均衡的核心配置如下:

upstream test {
#服务器1
     server   ip+端口; 
#服务器2
     server   ip+端口;
}

  负载均衡—权重(weight)

  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:

upstream test {
#服务器1
     server   ip+端口   weight=3; 
#服务器2
     server   ip+端口   weight=7;
}

  以上表现为,访问服务器1的概率为30%,访问服务器2的概率为70%

  负载均衡—ip绑定(ip_hash)

  多台服务器协同工作,最常出现的问题是session的保持,总不能访问一次不同的服务器就重新登陆一次吧,ip_hash的出现即根据用户请求的ip来寻找其访问过的服务器,让用户一直访问同一个服务器,示例如下:

upstream test {
    ip_hash;
#服务器1
     server   ip+端口   weight=3; 
#服务器2
     server   ip+端口   weight=7;
}

  负载均衡—优先分配(fair)

  按后端服务器的响应时间来分配请求,响应时间短的优先分配。nginx默认不支持fair算法,需要安装upstream_fair模块,示例如下:

upstream test {
    fair;
    ip_hash;
#服务器1
     server   ip+端口   weight=3; 
#服务器2
     server   ip+端口   weight=7;
}

三、HTTP服务器

  nginx的既可以做静态代理服务器,也可以做动态代理服务器,静态代理服务器配置如下:

 

   server{
      listen   80;
      server_name   ip/域名;
      client_max_body_size    1024M;
      location / {
          root  /usr/local;
          index   index.html;
      } 
   }  

 

  如上可以表示为,发送http请求到nginx代理服务器,默认到真实服务器的/usr/local下的index.html静态网页,动态请求会通过nginx进行转发,示例如下:

server {
   listen   80;
   server_name    ip/域名;
   charset   utf-8;
   location  / {
      root     /usr/local/efarm;
      index    index.html;
   }
   location  /api {
      proxy_pass    http:127.0.0.1:8088
      proxy_set_header   Host $host;
      proxy_set_header   X-real-ip  $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
   }
}

  如上可以表示为,当发送http请求到nginx代理服务器时,默认到/usr/local/efarm下寻找index.html网页,需要请求动态接口,则通过nginx转发给真实服务器8088端口的启动项目。