場景
本地開發,需要連線測試環境的 redis
,但 redis
是內網的,不對外網開放.
方案
利用 nginx
進行反向代理,把請求轉發到內網的 redis
上.
找到測試環境的一臺 nginx
,配置反向代理.
修改 nginx.conf
http {
...
}
# 注意跟 http 同級
stream {
upstream redis {
server 10.8.xx.xxx:6379 max_fails=3 fail_timeout=30s;
}
server {
listen 16379;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass redis;
}
}
如是不想修改 nginx.conf
,而是在 conf.d
新增新的配置檔案 redis.conf
,則需要把 include
指令從 http
移出來
這樣保證新增的
redis.conf
跟http
同級
http {
...
}
include /etc/nginx/conf.d/*.conf
若遇到 nginx: [emerg] unknown directive "stream" in /usr/local/openresty/nginx/conf/conf.d/redis.conf:1
錯誤
是因為 stream
模組沒載入到,手動載入下
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;
http {
...
}
如果不知道 ngx_stream_module.so
的路徑在那裡,則全域性搜一下
$ find / -name 'ngx_stream_module'
最後,重新載入 nginx
下配置檔案
$ nginx -s reload
# 檢視代理埠是否成功
$ ss -atn | grep 16379
如果覺得不錯,可以給我一個 STAR.
本作品採用《CC 協議》,轉載必須註明作者和本文連結