我刚刚在我的服务器上安装了 Nginx,对结果非常满意,但是我仍然不知道如何插入通配符虚拟主机。
这是我想要的[目录]结构:
-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)
正如您所看到的,它非常基础,但是,我希望能够通过简单地为新的子域添加 A 记录来添加域,该记录将立即指向 public_html 下同名的子目录。
网上有很多东西,但我还没有遇到过完全一样的东西。
任何帮助将不胜感激。
答案1
我会告诉你的。
配置文件
server {
server_name example.com www.example.com;
root www/pub;
}
server {
server_name ~^(.*)\.example\.com$ ;
root www/pub/$1;
}
测试文件
我们有两个测试文件:
$ cat www/pub/index.html
COMMON
$ cat www/pub/t/index.html
T
测试
静态服务器名称:
$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes
COMMON
$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes
COMMON
以及正则表达式服务器名称:
$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes
T
答案2
下面的 Nginx 配置文件允许使用通配符主机名动态路由到相应的文件夹,/var/www/vhost/
同时还动态生成相应的日志文件。
http://test1.wildcard.com
→/var/www/vhost/test1
/var/log/nginx/test1.wildcard.com-access.log
/var/log/nginx/test1.wildcard.com-error.log
http://test2.wildcard.com
→/var/www/vhost/test2
/var/log/nginx/test2.wildcard.com-access.log
/var/log/nginx/test2.wildcard.com-error.log
通配符配置文件
server {
listen 80;
listen [::]:80;
# Match everything except dot and store in $subdomain variable
# Matches test1.wildcard.com, test1-demo.wildcard.com
# Ignores sub2.test1.wildcard.com
server_name ~^(?<subdomain>[^.]+).wildcard.com;
root /var/www/vhost/$subdomain;
access_log /var/log/nginx/$host-access.log;
error_log /var/log/nginx/$host-error.log;
}
答案3
我就是这样处理的使用 Nginx 的虚拟主机:
server_name ~^(?<vhost>.*)$;
root /srv/www/$vhost;
access_log /var/log/nginx/$vhost.access.log;
我不知道为什么父文件夹中的通配符子域名是非常错误/误导的。