详解使用Go添加Nginx代理的方法示例

 更新时间:2019年11月05日 09:45:47   作者:帅气猫咪  
这篇文章主要介绍了详解使用Go添加Nginx代理的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

简介

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;
}

参考:

Using nginx as HTTP load balancer

Module ngx_http_upstream_module

总结

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

当前部分的代码

作为版本v0.14.0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Go-RESTful实现下载功能思路详解

    Go-RESTful实现下载功能思路详解

    这篇文章主要介绍了Go-RESTful实现下载功能,文件下载包括文件系统IO和网络IO,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Go并发原语之SingleFlight请求合并方法实例

    Go并发原语之SingleFlight请求合并方法实例

    本文我们来学习一下 Go 语言的扩展并发原语:SingleFlight,SingleFlight 的作用是将并发请求合并成一个请求,以减少重复的进程来优化 Go 代码
    2023-12-12
  • Go语言递归函数的具体实现

    Go语言递归函数的具体实现

    本文主要介绍了Go语言递归函数的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • GO实现跳跃表的示例详解

    GO实现跳跃表的示例详解

    跳表全称叫做跳跃表,简称跳表,是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。本文将利用GO语言编写一个跳表,需要的可以参考一下
    2022-12-12
  • Golang正整数指定规则排序算法问题分析

    Golang正整数指定规则排序算法问题分析

    这篇文章主要介绍了Golang正整数指定规则排序算法问题,结合实例形式分析了Go语言排序算法操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Golang指针隐式间接引用详解

    Golang指针隐式间接引用详解

    在 Go中,指针隐式解引用是指通过指针直接访问指针所指向的值,而不需要显式地使用 * 运算符来解引用指针,这篇文章主要介绍了Golang指针隐式间接引用,需要的朋友可以参考下
    2023-05-05
  • Go语言利用ffmpeg转hls实现简单视频直播

    Go语言利用ffmpeg转hls实现简单视频直播

    这篇文章主要为大家介绍了Go语言利用ffmpeg转hls实现简单视频直播,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Golang使用zlib压缩和解压缩字符串

    Golang使用zlib压缩和解压缩字符串

    本文给大家分享的是Golang使用zlib压缩和解压缩字符串的方法和示例,有需要的小伙伴可以参考下
    2017-02-02
  • 详解go语言 make(chan int, 1) 和 make (chan int) 的区别

    详解go语言 make(chan int, 1) 和 make (chan int) 的区别

    这篇文章主要介绍了go语言 make(chan int, 1) 和 make (chan int) 的区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 如何避免Go语言常见错误之意外的变量隐藏

    如何避免Go语言常见错误之意外的变量隐藏

    在Go语言中,变量隐藏(Variable Shadowing)是一个常见的错误来源,变量隐藏发生在一个内部作用域中声明的变量与外部作用域的变量同名时,这可能导致开发者无意中使用了错误的变量,造成难以追踪的bug,本文讲解一些关于变量隐藏的常见错误和如何避免它们的方法
    2024-01-01

最新评论