栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Nginx部署GO语言应用程序

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nginx部署GO语言应用程序

文章目录
  • Nginx部署GO语言应用程序
    • Nginx是什么
      • 名词解释
    • Nginx的安装
    • Nginx常用命令
    • Nginx部署具体步骤
      • 配置主机HOSTS文件
      • 配置nginx.conf
      • 启动GO语言应用程序
      • 重新启动nginx
      • 使用POSTMAN测试代理是否成功
      • 配置负载均衡(修改nginx.conf文件)
      • 再次重新启动nginx
    • 总结

Nginx部署GO语言应用程序

使用nginx部署go语言应用程序实现反向代理和负载均衡

Nginx是什么

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,可以用于负载均衡、邮件代理、TCP/UDP、HTTP服务器等等 ,其特点如下:

  • 正向、反向代理
  • 负载均衡
  • 支持TLS/SSL与SNI和OCSP
  • 支持Websocket、HTTP/1.1协议
名词解释

正向代理:正向代理服务器,用户可以知道Web服务的数据库等系统的IP地址和端口号等敏感息,由于暴露了这些关键信息,容易遭受到恶意攻击所以安全性比较差。
正向代理的典型应用就是为火墙内局域网局域网客户端提供访问Internet的途径。其次使用正向代理还可以实使用缓冲特性减少网络使用率以及权限验证等功能,如上网权限。
一般对于企业内部管理系统,使用正向代理的方式,释放专门的网络带宽,特定域名实现某些功能只能有部分员工有权限访问
反向代理:反向代理用到了反向代理服务器,使用反向代理,典型的应用是将防火墙后面的服务器提供给Intenet用户访问,隐藏了Web应用服务,如数据库的IP地址、端口号等信息,提高了系统的安全性等。同时使用反向代理还可以实现多台服务器的负载均衡,启用高级的URL和管理技术,使处于不同Web服务器系统的Web界面同时存在一个URL空间下,提高系统性能。
对于互联网行业,如理财应用,为实现系统的安全性,采用反向代理的方式,对用户隐藏的后台应用的部署方式、结构等敏感信息,提供一个统一的域名给用户访问。

简而言之,Nginx就是一款代理服务器,用于客户端和服务器之间建立一个统一域名的映射关系,就如同你输入的https:\www.baidu.com,先由域名解析服务DNS解析出IP地址,然后访问这个IP地址,这个IP地址是代理服务器,代理服务器和具体的应用服务器之间建立好了映射,以此实现反向代理和负载均衡。

Nginx的安装

安装步骤请移步百度或者谷歌,安装好Nginx以备后续使用

Nginx常用命令
  • nginx:启动nginx
  • nginx -s stop:立即停止nginx服务
  • nginx -s reload:重新加载配置文件
  • nginx -s quit:平滑停止nginx服务
  • nginx -t:测试配置文件是否正确
  • nginx -v:显示nginx版本信息
  • nginx -V:显示更加详细的nginx版本信息
$ nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

可见配置文件在/user/local/etc/nginx/目录下,并且测试通过

Nginx部署具体步骤 配置主机HOSTS文件

由于所有的演示都在一台物理机上,先配置一个域名和地址映射关系,打开etc/hosts,(假设我们服务的域名为api.test.com)增加内容:

127.0.0.1       api.test.com
配置nginx.conf

打开nginx的配置文件nginx.conf(示例中的是/user/local/etc/nginx/nginx.conf),增加server内容,设置监听端口为8081,服务名字为api.test.com,所有的路径请求都会转发到http://127.0.0.1:8000/下(正式环境下,转发到具体的业务服务器)

worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8081;
        server_name  api.test.com;

        location / {
            proxy_pass http://127.0.0.1:8000/;
        }
    }
}
启动GO语言应用程序

实验中使用的是一个rpc服务,监听在主机的8000端口下,执行./main,将自己的服务启动起来,使用lsof命令查看服务是否启动成功:

COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
main      18844 root   11u  IPv6 321415996      0t0  TCP *:8000 (LISTEN)

可见服务已经正常启动

重新启动nginx
$ nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ nginx -s reload
使用POSTMAN测试代理是否成功


如果能得到正确响应,说明反向代理成功,8081下的请求被转发到了8000端口下

配置负载均衡(修改nginx.conf文件)

负载均衡:ngnix作为代理服务器,其背后一般有多台 server,系统会根据配置的策略(例如 Nginx 有提供四种选择)来进行动态调整,尽可能的达到各节点均衡,从而提高系统整体的吞吐量和快速响应。
部分配置选择:
1、 proxy_pass:配置反向代理的路径。需要注意的是如果 proxy_pass 的 url 最后为
/,则表示绝对路径。否则(不含变量下)表示相对路径,所有的路径都会被代理过去
2、 upstream:配置负载均衡,upstream 默认是以轮询的方式进行负载,另外还支持四种模式,分别是:
(1)weight:权重,指定轮询的概率,weight 与访问概率成正比
(2)ip_hash:按照访问 IP 的 hash 结果值分配
(3)fair:按后端服务器响应时间进行分配,响应时间越短优先级别越高
(4)url_hash:按照访问 URL 的 hash 结果值分配

首先启动两个不同的GO应用服务,可以将原来的服务端口修改一下为8001,再启动一个,这样两个RPC服务各自监听在8000和8001端口下,然后增加负载均衡所需的配置。新增 upstream 节点,设置其对应的 2 个后端服务,最后修改了 proxy_pass 指向(格式为 http:// + upstream 的节点名称):

worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;
    keepalive_timeout  65;

    upstream api.test.com {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
    }

    server {
        listen       8081;
        server_name  api.test.com;

        location / {
            proxy_pass http://api.test.com/;
        }
    }
}
再次重新启动nginx
$ nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ nginx -s reload

目前 Nginx 没有进行特殊配置,那么它是轮询策略,多次重复访问http://api.test.com:8081/auth?username=test&password=123456,让后通过lsof命令查看8000和8001端口连接数量就可以发现,负载均衡是否设置成功

总结

以上就是在Linux环境下利用Nginx部署GO语言应用程序实现反向代理和负载均衡的例子,希望对你有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号