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的管理界面。瀏覽器

相關文章
相關標籤/搜索