社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

nginx小技巧-动态域名

赵安家 • 6 年前 • 737 次点击  
阅读 94

nginx小技巧-动态域名

如果公司有微信开发需求的话,得有备案了的域名和80端口

员工开发调试是个问题,如果每次都找运维修改,维护,会被K的。

交换机设置DMZ到一台固定服务器,在上面部署nginx/openresty

可以gitlab(svn)+jenkins/ansible等运维方式实现每次修改配置文件后,提交到gitlab触发CI/CD推送到nginx服务器,执行reload

当然变通的也有,比如,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;
    }
}
复制代码

使用方法

开发者机器上安装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).


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/9kLauMwXfC
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23208
 
737 次点击