美文网首页帅气猫咪的 Go 语言之旅
14使用 Go 添加 Nginx 代理

14使用 Go 添加 Nginx 代理

作者: 刷漆猫咪 | 来源:发表于2019-11-07 10:19 被阅读0次

简介

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

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

反向代理

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

普通的代理服务器是需要用户主动去设置的, 用户在自己的电脑上设置并连接代理服务器,
从而可以隐藏自己的 IP, 使得应用服务器不知道客户端的 IP 地址.

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

反向代理

使用 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

相关文章

  • 14使用 Go 添加 Nginx 代理

    简介 反向代理 负载均衡轮询加权轮询最少连接iphash通用 hash 总结 当前部分的代码 简介 Nginx 是...

  • 使用 Go 添加 Nginx 代理

    本文转自:https://juejin.im/post/5dc0c3905188255faf60b3c5 简介 反...

  • Nginx调度器以及相关优化

    nginx功能网站服务,网站代理(网站业务),四层代理(其他业务) 1.Nginx调度器 1. 使用nginx代理...

  • nginx多配置文件

    我们在使用nginx时,会遇到有多个服务要进行代理,如果我们直接在nginx.conf文件中添加,配置文件会显得比...

  • Nginx反向代理https

    Nginx对Https的反向代理 使用Nginx进行反向代理的时候,对于正常的http;流量使用 location...

  • 让go get 哗哗的下载

    go get 使用代理 查看go的环境变量 go env 设置代理 set GOPROXY=https://gop...

  • 使用zuul代理, 重写request

    背景 zuul的作用类似于nginx, 有时候我们希望在使用zuul代理的同时, 添加一些固定参数 1 添加pos...

  • socket.io nginx反向代理配置方式-Hash

    nginx反向代理配置 1.说明 2.nginx配置 2.1 添加with-http_realip_module ...

  • go get 设置代理

    go get下载失败,原因是终端并没有使用代理。 让终端走socks5代理直接在.bashrc添加下面内容

  • 配置nginx密码访问

    有时候有些接口需要配置权限访问,但是有不方便直接在项目中添加,此时可以使用nginx做代理,然后在nginx中做权...

网友评论

    本文标题:14使用 Go 添加 Nginx 代理

    本文链接:https://www.haomeiwen.com/subject/rqtsbctx.html