使用 Go 添加 Nginx 代理

简介

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器.html

最经常使用的两个功能是反向代理和负载均衡.nginx

反向代理

反向代理是正向代理的反面.git

普通的代理服务器是须要用户主动去设置的, 用户在本身的电脑上设置并链接代理服务器, 从而能够隐藏本身的 IP, 使得应用服务器不知道客户端的 IP 地址.github

而反向代理是做为应用服务器的代理, 安装在服务器上. 客户端实际上访问的反向代理服务器, 反向代理服务器再去访问实际的应用服务器, 而后将获取到的响应传送给客户端.web

反向代理

使用 Nginx 配置反向代理很是简单, 基础配置以下:算法

upstream web {
  server 127.0.0.1:8081;
}

server {
  listen 80;
  server_name web.coolcat.com;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;

    client_max_body_size 5m;

    proxy_pass http://web;
  }
}
复制代码

上面的配置文件中设置了一个域名 web.coolcat.com, 对这个域名的全部请求都会转发到 http://web 上.后端

经过配置 upstream, 咱们能够发现, 实际上的流量都被转发到了 127.0.0.1:8081 上了.服务器

如此一来, 就实现了反向代理.负载均衡

负载均衡

负载均衡和反向代理是分不开的, 负载均衡一般都是基于反向代理作的.性能

所谓的负载均衡, 指的是将多个请求转发到不一样的后端服务器上.

upstream web {
  server 127.0.0.1:8081;
}
复制代码

在上面的反向代理配置中, 只设置了一个后端服务器地址, 若是再添加几个, 就实现了最简单的负载均衡了.

轮询

轮询策略按顺序分配请求.

upstream web {
  server 192.168.1.1:8081;
  server 192.168.1.2:8081;
}
复制代码

加权轮询

加权策略按比例分配请求.

upstream web {
  server 192.168.1.1:8081 weight=4;
  server 192.168.1.2:8081 weight=6;
}
复制代码

上面的两个服务器的访问几率就是四六开.

最少链接

最少链接将请求分配给当前链接数最少的服务器.

upstream web {
  least_conn;
  server 192.168.1.1:8081;
  server 192.168.1.2:8081;
}
复制代码

ip_hash

来自同一个 IP 的链接都会分配给同一个服务器, 一般用于 会话保持.

upstream web {
  ip_hash;
  server 192.168.1.1:8081;
  server 192.168.1.2:8081;
}
复制代码

通用 hash

使用 hash 自定义要计算的 key. 示例中使用请求地址. 能够选择 consistent 参数能够指定使用一致性哈希算法.

upstream web {
  hash $request_uri;
  # hash $request_uri consistent;
  server 192.168.1.1:8081;
  server 192.168.1.2:8081;
}
复制代码

参考:

总结

Nginx 是很经常使用的代理服务器, 它的功能很是强大, 性能也很好. 更多的资料请参考 官方文档.

当前部分的代码

做为版本 v0.14.0

相关文章
相关标签/搜索