nginx将子域的根动态更改为同一级别的文件夹

问题描述

我的服务器上具有以下层次结构:

/var/www/domain.tld/web
                   /sub

/etc/nginx/sites-available/domain.tld 中的根设置如下:

server {

  root /var/www/domain.tld/web;
  index index.html index.php index.htm; 
  ...
    location / {
    try_files $uri $uri/ =404;
}

如何使nginx动态转发到特定文件夹,所以如果我在 / sub 中创建文件夹,例如/ var / www / domain.tld / sub / subdomain >因此,如果我发出请求http://subdomain.domain.tld,它将转发到文件夹子目录中的该文件夹吗? 因此,再次 something.domain.tld 将进入 /var/www/domain.tld/sub/something ,但进入域。 tld 将转到 /var/www/domain.tld/web

谢谢!

解决方法

首先,欢迎来到StackOverflow! :)

可能有几种方法可以实现此目的,但是我会尝试使用一个简单的map$my_subdir设置一个$host变量,然后可以在{{ 1}}。 root变量是根据传入请求自动设置的。

在此示例中,我们使用正则表达式检查$host是否与 subdomain.domain.tld 匹配。如果是这样,请捕获子域部分-方括号中的位-并使用它来使值“ sub / subdomain ”($host意味着使用从正则表达式中捕获的第一件事) 。如果不匹配,则默认为“网络”。

那样,

  • 当请求以$1之类的形式出现时,响应为http://domain.tld/foo.html
  • 如果请求以/var/www/domain.tld/web/foo.html之类的形式出现,则响应为http://bar.domain.tld/foo.html
/var/www/domain.tld/sub/bar/foo.html

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...