golang实现nginx

golang实现nginx

浏览次数:
信息来源: 用户投稿
更新日期: 2026-01-16
文章简介

我们编译好bluebell项目后,相关必要文件的目录结构如下: ││└──app.0afe9dae.css ││├──avatar.7b0a9835.png ││├──iconfont

2025阿里云双十一服务器活动

我们编译好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;

golang实现nginx

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部署反向代理负载均衡的方法的详细内容,更多请关注主机测评网其它相关文章!

标签:
几款最便宜香港VPS推荐(香港最便宜的vps)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!