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).

相关文章
相关标签/搜索