Nginx 上的通配符虚拟主机

ror*_*ist 29 nginx wildcard subdomain virtualhost

我刚刚在我的服务器上安装了 Nginx 并且对结果非常满意,但是我仍然不知道如何插入通配符虚拟主机。

这是我想要的 [目录] 结构:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是非常基本的,但是,我希望能够通过简单地为新子域添加 A 记录来添加域,该记录将立即指向 public_html 下的同名子目录。

网上有很多东西,但我还没有遇到过完全这样的东西。

任何帮助将不胜感激。

Ale*_*rov 49

我给你看。

配置文件

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}
Run Code Online (Sandbox Code Playgroud)

测试文件

我们有两个测试文件:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T
Run Code Online (Sandbox Code Playgroud)

测试

静态服务器名称:

$ 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
Run Code Online (Sandbox Code Playgroud)

和正则表达式服务器名称:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,“不幸不起作用”没有提供任何细节。有关详细信息,请始终查看 nginx error.log。我已经更新了我的答案以向您展示此配置的工作原理。你可以看到我的 Nginx 版本是 0.8.54 (5认同)

Ant*_*ris 7

下面的这个 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;
}
Run Code Online (Sandbox Code Playgroud)