原文地址:GolangGin实践系列17:使用Nginx部署Go应用那么,今天就来说说后端服务的简单部署。该怎么办?本章我们将简单介绍Nginx,并使用Nginx完成go-gin-example的部署,实现反向代理和简单负载均衡的功能。什么是Nginx?Nginx是一个WebServer,可用作反向代理、负载均衡、邮件代理、TCP/UDP、HTTP服务器等。它具有许多吸引人的特性,例如:内存占用处理超过10,000个并发连接(大约2.5MBper10kinactiveHTTPkeep-aliveconnections)Staticserver(handlesstaticfiles)正向和反向代理负载平衡TLS/SSLwithSNIandOCSPviaOpenSSLSupportsFastCGI,SCGI,uWSGIsupportWebSockets,HTTP/1.1supportNginx+LuainstallationPleaseturn对谷歌或百度,安装Nginx,方便下次使用常用命令简单解释nginx:启动Nginxnginx-sstop:立即停止Nginx服务nginx-sreload:重新加载配置文件nginx-squit:顺利停止Nginx服务nginx-t:测试配置文件是否正确nginx-v:显示Nginx版本信息nginx-V:显示Nginx版本信息,编译器和配置参数配置1.proxy_pass:配置r的路径反向代理。需要注意的是,如果proxy_pass的url以/结尾,则代表绝对路径。否则(没有变量)它意味着一个相对路径,所有路径都将被代理。2.上游:配置负载均衡。默认情况下,上游以循环方式加载。另外,它支持四种模式,分别是:(1)weight:权重,指定轮询的概率,weight与访问概率成正比(2)ip_hash:根据访问IP的hash结果值分配(3)fair:根据后端服务器响应时间分配,响应时间越短优先级越高High(4)url_hash:根据访问URL的hash结果值分配部署。这里需要配置nginx.conf。如果不知道对应哪个配置文件,可以执行nginx-t查看$nginx-tnginx:配置文件/usr/local/etc/nginx/nginx.conf语法为oknginx:配置文件/usr/local/etc/nginx/nginx.conf测试成功很明显,我的配置文件在/usr/local/etc/nginx/目录下,测试通过反向代理反向代理是指代理服务器接受连接请求在网络上,然后将请求转发给内网的服务器,并将从服务器得到的结果返回给请求连接的客户端,此时代理服务器对外起到了反向代理服务器的作用。(摘自百科)由于需要以本机为例配置hosts,所以先匹配映射,打开/etc/hosts,添加内容:127.0.0.1api.blog.com配置nginx.conf打开nginx配置文件nginx.conf(我的是/usr/local/etc/nginx/nginx.conf),我们做了以下内容:增加server段的内容,设置server_name为api.blog.com并监听8081端口,转发所有路径到http://127.0.0.1:8000/下worker_processes1;events{worker_connections1024;}http{includemime.types;default_type应用程序/八位字节流;发送文件;keepalive_timeout65;服务器{听8081;服务器名称api.blog.com;位置/{proxy_passhttp://127.0.0.1:8000/;}}}验证启动go-gin-example回到go-gin-example项目,执行make,然后运行??./go-gin-exmaple$makegithub.com/EDDYCJY/go-gin-example$lsLICENSEREADME.mdconfgo-gin-example中间件pkgruntimevendorMakefileREADME_ZH.mddocsmain.gomodelsroutersservice$./go-gin-example...[GIN-debug]DELETE/api/v1/articles/:id-->github.com/EDDYCJY/go-gin-example/routers/api/v1.DeleteArticle(4个处理程序)[GIN-debug]POST/api/v1/articles/poster/generate-->github.com/EDDYCJY/go-gin-example/routers/api/v1.GenerateArticlePoster(4handlers)实际pid为14672重启nginx$nginx-tnginx:配置文件/usr/local/etc/nginx/nginx.conf语法是oknginx:配置文件/usr/local/etc/nginx/nginx.conf测试成功$nginx-sreload访问界面是这样的,实现了一个简单的反向代理。是不是很简单?LoadBalanced负载均衡,英文名称为LoadBalance(常简称为LB),意思是分发给多个运行单元执行(来自维基百科)。经常能从运维口中听到,XXX的负载怎么突然这么高了?它是什么?什么?其背后一般有多台服务器,系统会根据配置的策略进行动态调整(例如Nginx提供了四种选择),尽可能的达到各个节点的平衡,从而提高整体的吞吐量以及系统的快速响应。如何证明先决条件要服务于多个后端,势必需要多个go-gin-example。为了演示,我们可以启动多个端口来达到模拟效果。为了演示方便,将conf/app.ini的应用端口修改为8001和8002(也可以做成传入参数的方式),从而启动监听8001和8002的两个后端服务。配置nginx.conf回到原来的nginx.conf,添加负载均衡需要的配置。添加一个上游节点,设置其对应的两个后端服务,最后修改proxy_pass指向(格式为http://+上游节点名)worker_processes1;events{worker_connections1024;}http{includemime.types;default_type应用程序/八位字节流;发送文件;keepalive_timeout65;上游api.blog.com{服务器127.0.0.1:8001;服务器127.0.0.1:8002;}服务器{听8081;服务器名称api.blog.com;位置/{proxy_passhttp://api.blog.com/;}}}重启nginx$nginx-tnginx:配置文件/usr/local/etc/nginx/nginx.conf语法为oknginx:配置文件/usr/local/etc/nginx/nginx.conf测试成功$nginx-sreload验证,重复访问http://api.blog.com:8081/auth?username={USER_NAME}}&password={PASSWORD},多次访问看效果Nginx没有特殊配置,所以是轮询策略,而go-gin-example默认是debug模式,看看请求日志就明白了。这是什么逻辑,什么是Nginx?反向代理?负载均衡?如何简单部署,你懂的。参考本系列示例代码go-gin-example本系列目录连载1Golang介绍及环境安装连载2BuildBlogAPI的(一)连载3BuildBlogAPI的(2)连载4BuildBlogAPI的(3)JWT的使用身份验证连载6写一个简单的文件日志连载7Golang优雅重启HTTP服务连载8为它添加Swagger连载9部署Golang应用到Docker连载10自定义GORM回调实现图片上传和序列化13.优化你的应用结构和实现Redis缓存.连载14.Excel导出导入连载15.生成二维码合并海报连载16.在图片上绘制文字连载17.使用Nginx部署Go应用Golang交叉编译请使用Makefile入门
