nginx小技巧-動態域名(微信,小程序80端口)

若是公司有微信開發需求的話,得有備案了的域名和80端口html

員工開發調試是個問題,若是每次都找運維修改,維護,會被K的。nginx

交換機設置DMZ到一臺固定服務器,在上面部署nginx/openrestygit

能夠gitlab(svn)+jenkins/ansible等運維方式實現每次修改配置文件後,提交到gitlab觸發CI/CD推送到nginx服務器,執行reloadredis

固然變通的也有,好比,openresty+lua訂閱redis,發現變動後,讀取redis的配置,rewrite到本地配置文件而後reload,可是總歸是比較笨重的小程序

下面說的是經過server_name設置通配符來實現動態域名的方案安全

server {
    listen 443 http2 ssl;
    listen 80;
    server_name  ~(?<h>.+)_(?<a>\d+)_(?<b>\d+).domain.com;
    location / {
        //proxy settings ...
        //$h 是abc_1_1中的abc
        //proxy_set_header   Host $h;
        proxy_pass http://192.168.$a.$b;
    }
}
複製代碼

使用方法bash

開發者機器上安裝nginx,而且配置相應的vhost服務器

server {
        listen       80;
        server_name  abc*;

        location / {
            root html;
            index index.html;
        }
    }
複製代碼
curl http[s]://abc_1_1.domain.com
複製代碼

等於微信

curl -H"abc_1_1.domain.com" http[s]://192.168.1.1
複製代碼

爲啥用_分隔,而不是用.分隔成多級域名,是由於Let's Encrypt的通配符是同級通配符,好比*.domain.com只支持a.domian.com這種,a.b.domain.com是無效的,若是不須要https訪問(小程序須要https)的話,則能夠自行修改爲.分隔微信開發

注意,此方案會存在必定的安全隱患,好比,ip爆破(能夠設置白名單訪問,basic auth,限制動態ip範圍).

好處是維護簡單(新增域名,更改域名->ip映射,修改配置,採集數據,打印日誌等)

本文只是其中反向代理中的一種,相似的反代方案還有frp和ngrok,還能夠用dns(bind,dnsmasq).

相關文章
相關標籤/搜索