使用nsq消息队列后,在本地能够直接经过访问 http://localhost:4171 看到管理界面。可是生产环境中,不能直接对外暴露服务器4171端口,这时候须要配置nginx代理。css
然而nsqadmin配置nginx比较坑,简单的经过proxy_pass http://127.0.0.1:4171/
依然是没法正常显示管理界面的。网上搜索到的各种文章,没一个能行。本文记录下nsqadmin正确的nginx代理配置过程。nginx
生成静态文件 若是直接进行以下配置,浏览器访问地址 nsqadmin.example.com/nsq将显示css、js等各种静态资源找不到(404),这时候须要同时代理静态资源目录。git
server {
listen 80;
server_name nsqadmin.example.com;
auth_basic "NSQAdmin Auth";
auth_basic_user_file auth-passwd/nsqadmin-htpasswd;
location /nsq/ {
proxy_pass http://127.0.0.1:4171/;
}
复制代码
为了生成静态资源文件,根据官方仓库nsq/nsqadmin at master · nsqio/nsq (github.com)的说明,须要进行以下步骤:github
# 1. clone repo
git clone https://github.com/nsqio/nsq.git
cd nsqadmin
# 2. install go-bindata
go get -u github.com/shuLhan/go-bindata
# 3. install NodeJS 14.x (includes npm)
# 4. install dependencies
npm install
# 5. 执行
./gulp --series clean watch # 或者执行 ./gulp --series clean build
# 6. 执行
go-bindata --debug --pkg=nsqadmin --prefix=static/build/ static/build/...
复制代码
若是嫌弃上述过程太麻烦,能够直接拷贝仓库里编译好的static文件夹,即nsqadmin目录下的static文件夹。shell
上述过程把全部相关的静态文件都build到了static/build/
目录下,咱们须要将该目录拷贝至服务器的某个目录下,例如/data/static
。而后nginx配置以下:npm
server {
listen 80;
server_name nsqadmin.example.com;
auth_basic "NSQAdmin Auth";
auth_basic_user_file auth-passwd/nsqadmin-htpasswd;
location /nsq/ {
proxy_pass http://127.0.0.1:4171/;
}
location /static/ {
alias /data/static/
}
}
复制代码
代理/api
gulp
上述nginx配置完成后,能够显示出nsqadmin的首页内容,可是当咱们点击交互时依然会出错,查看页面请求,你会发现nsqadmin在请求/api
路由,而这些路由显示为404。咱们须要将/api
代理到nsq内部。所以须要追加以下配置:api
server {
listen 80;
server_name nsqadmin.example.com;
auth_basic "NSQAdmin Auth";
auth_basic_user_file auth-passwd/nsqadmin-htpasswd;
location /nsq/ {
proxy_pass http://127.0.0.1:4171/;
}
location /static/ {
alias /data/static/
}
location /api {
proxy_pass http://127.0.0.1:4171/nsq$request_uri;
}
}
复制代码
最后重启nginx, 访问 nsqadmin.example.com/nsq,输入用户名、密码便可正常访问nsqadmin的管理界面。浏览器