nsqadmin之nginx代理配置

使用nsq消息队列后,在本地能够直接经过访问 http://localhost:4171 看到管理界面。可是生产环境中,不能直接对外暴露服务器4171端口,这时候须要配置nginx代理。css

然而nsqadmin配置nginx比较坑,简单的经过proxy_pass http://127.0.0.1:4171/依然是没法正常显示管理界面的。网上搜索到的各种文章,没一个能行。本文记录下nsqadmin正确的nginx代理配置过程。nginx

  1. 生成静态文件 若是直接进行以下配置,浏览器访问地址 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/ 
        }
    }
    复制代码
  2. 代理/apigulp

上述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的管理界面。浏览器

相关文章
相关标签/搜索