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