我们编译好bluebell项目后,相关必要文件的目录结构如下:
││└──app.0afe9dae.css
││├──avatar.7b0a9835.png
││├──iconfont.cdbe38a0.svg
││├──logo.da56125f.png
││└──search.8e85063d.png
│├──app.9f3efa6d.js.map
│├──chunk-vendors.57f9e9d6.js
│└──chunk-vendors.57f9e9d6.js.map
└──index.html
nohup...&表示在后台不挂断的执行上述应用程序的启动命令
>nohup_bluebell.log表示将命令的标准输出重定向到nohup_bluebell.log文件
2>&1表示将标准错误输出也重定向到标准输出中,结合上一条就是把执行命令的输出都定向到nohup_bluebell.log文件
上面的命令执行后会返回进程id
[1]6338
当然我们也可以通过以下命令查看bluebell相关活动进程:
ps-ef|grepbluebell
输出:
root63384048008:43pts/000:00:00https://www.fruan.com/post/bin/bluebellconf/config.yaml
root63764048008:43pts/000:00:00grep--color=autobluebell
此时就可以打开浏览器输入查看应用程序的展示效果了。
Supervisor是业界流行的一个通用的进程管理程序,它能将一个普通的命令行进程变为后台守护进程,并监控该进程的运行状态,当该进程异常退出时能将其自动重启。
首先使用yum来安装supervisor:
如果你还没有安装过EPEL,可以通过运行下面的命令来完成安装,如果已安装则跳过此步骤:
sudoyuminstallepel-release
安装supervisor
sudoyuminstallsupervisor
Supervisor的配置文件为:/etc/supervisord.conf,Supervisor所管理的应用的配置文件放在/etc/supervisord.d/目录中,这个目录可以在supervisord.conf中的配置。
files=/etc/supervisord.d/*.conf
启动supervisor服务:
sudosupervisord-c/etc/supervisord.conf
我们在目录下创建一个名为的配置文件,具体内容如下。
[program:bluebell];程序名称
command=/data/app/bluebell/bin/bluebell/data/app/bluebell/conf/config.yaml;启动文件路径项目配置文件路径
directory=/data/app/bluebell/;命令执行的目录
stopsignal=TERM;重启时发送的信号
autostart=true;是否自动启动
autorestart=true;是否自动重启
stdout_logfile=/var/log/bluebell-stdout.log;标准输出日志位置
stderr_logfile=/var/log/bluebell-stderr.log;标准错误日志位置
创建好配置文件之后,重启supervisor服务
sudosupervisorctlupdate#更新配置文件并重启相关的程序
sudosupervisorctlstatusbluebell#查看bluebell的运行状态:
sudosupervisorctlrestartbluebell#重启
sudosupervisorctlstartbluebell查看所有任务状态
supervisorctlshutdown#关闭所有任务
supervisorctlstart程序名#启动任务
supervisorctlstop程序名#关闭任务
supervisorctlreload停止Nginx服务
nginx-sreload#重新加载配置文件
nginx-squit#平滑停止Nginx服务
worker_connections1024;#连接数
includemime.types;#默认配置
default_typeapplication/octet-stream;#默认配置
keepalive_timeout65;#超时时间
server_namelocalhost;#服务的域名
access_log/var/log/bluebell-access.log;#访问日志
error_log/var/log/bluebell-error.log;#错误日志
location/{#访问/根下的所有路径,反向代理从80转到8084
proxy_passhttp://127.0.0.1:8084;
proxy_set_headerHost$host;

proxy_set_headerX-Forwarded-For
$proxy_add_x_forwarded_for;
}
执行下面的命令检查配置文件语法:
nginx-t
执行下面的命令重新加载配置文件:
nginx-sreload
接下来就是打开浏览器查看网站是否正常了。
Nginx反向代理部署,有负载均衡
当然我们还可以使用nginx的upstream配置来添加多个服务器地址实现负载均衡。
worker_processes1;#工作进程
worker_connections1024;#连接数
includemime.types;#默认配置
default_typeapplication/octet-stream;#默认配置
keepalive_timeout65;#超时时间
#这里需要填真实可用的地址,默认轮询
#serverbackend1.example.com;
#serverbackend2.example.com;
server_namelocalhost;#服务的域名
access_log/var/log/bluebell-access.log;#访问日志
error_log/var/log/bluebell-error.log;#错误日志
location/{#访问/根下的所有路径,反向代理从80转到8084
proxy_passhttp://backend/;#负载均衡组名
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For
$proxy_add_x_forwarded_for;
}
Nginx分离动静态文件请求
上面的配置是简单的使用nginx作为反向代理处理所有的请求并转发给我们的Go程序处理,其实我们还可以有选择的将静态文件部分的请求直接使用nginx处理,而将API接口类的动态处理请求转发给后端的Go程序来处理。
下面继续修改我们的nginx的配置文件来实现上述功能。
指定静态文件所在路径,防止前端拼接的接口,后端没有。刷新后404情况
default_typeapplication/octet-stream;
access_log/var/log/bluebell-access.log;
error_log/var/log/bluebell-error.log;
#静态文件请求,以下面这些结尾的请求
location~.*\.(gif|jpg|jpeg|png|js|css|eot|ttf|woff|svg|otf)${
root/data/app/bluebell;#指定静态文件所在路径,防止前端拼接的接口,后端没有。刷新后404情况
#因为是单页面应用这里使用try_files处理一下,避免刷新页面时出现404的问题
root/data/app/bluebell/templates;#指定index.html前端文件所在路径
try_files$uri$uri//index.html;#所有的请求最后指向index.html
proxy_passhttp://127.0.0.1:8084;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
前后端的代码没必要都部署到相同的服务器上,也可以分开部署到不同的服务器上,下图是前端服务将API请求转发至后端服务的方案。
上面的部署方案中,所有浏览器的请求都是直接访问前端服务,而如果是浏览器直接访问后端API服务的部署模式下,如下图。
此时前端和后端通常不在同一个域下,我们还需要在后端代码中添加跨域支持。
这里使用github.com/gin-contrib/cors库来支持跨域请求。
最简单的允许跨域的配置是使用,它默认允许所有跨域请求。
//config:=cors.DefaultConfig()
//config.AllowAllOrigins=true
//router.Use(cors.New(config))
router.Use(cors.Default())
}
此外,还可以使用自定义具体的跨域请求相关配置项:
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
//CORSforhttps://foo.comandhttps://github.comorigins,allowing:
//-Preflightrequestscachedfor12hours
router.Use(cors.New(cors.Config{
AllowOrigins:[]string
以上就是Golang项目搭配nginx部署反向代理负载均衡的方法的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--golang实现nginx
本文地址:https://www.idcbaba.com/guowai/3488.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



