nginx 如何动态加载配置?

先说说为什么需要动态加载配置吧:

我们正在做一项多站点服务,比如用户username1拥有站点https://username1.example.com,现在这一步我已经解决了,办法是username指定到同名的文件夹下面:

   if ($http_host ~* "^(.*)\.example\.com$") {
        set $root /var/html/subdomains/$1;
    }

    root $root;

通过上面可以看到,所有的子站点都在/var/html/subdomains这个文件夹下面。

但是产生了一个新的问题,我的这个子域名系统要求支持cname解析,即,要求子域名 https://username1.example.com能通过用户自己注册的域名 https://username1-domain.com 打开。

因此用户可以把username1-domain.com通过cname解析到username1.example.com,但是这是用户行为,因此需要动态的在系统中把username1-domain.com的请求解析到/var/html/subdomains/username1的server配置中,并且最好能提供https支持,即用户在后台上传自己的https证书,并自动配置到nginx的配置里,以让https://username1-domain.com可以正常的访问。

而此时用户注册的域名是没有规则的,无法通过上面的代码块做文件夹的映射。

所以上面的动态把任意域名解析到服务器的一个文件夹,该如何操作?

谢谢。


斯蒂芬大帝
浏览 1279回答 1
1回答

慕容708150

Nginx自身做不到(我说的是Nginx社区版,企业版Nginx-plus是支持的)。Apache有个.htaccess文件实现动态配置,但是Nginx没有这种设置。但是Nginx可以通过reload操作实现配置热加载,几乎也是没有业务中断的。所以你其实可以通过配置管理+reload的方案变相实现这个需求。非要严格的动态支持,lua可以考虑(比如换成openresty项目)
打开App,查看更多内容
随时随地看视频慕课网APP