Nginx:在位置中使用 $http_host

Nginx:在位置中使用 $http_host

我在 nginx 配置中得到了许多服务器别名:

server {
    listen      80;
    server_name example.com site1.example.com site2.example.com site3.example.com
    ...

我如何控制 robots.txt 文件位置中别名的特定文件夹,例如我的意思是:

location ^~ $http_host/robots.txt {
    alias /home/web/public_html/static/$http_host/robots.txt;
}

上面的建筑不起作用。

答案1

您可以使用$host nginx 变量

location /robots.txt {
    alias /home/web/public_html/static/$host/robots.txt;
}

或者:

location /robots.txt {
    root /home/web/public_html/static/$host;
}

默认$host代表:按以下优先顺序:来自请求行的主机名,或来自“Host”请求标头字段的主机名,或与请求匹配的服务器名称。

答案2

我不知道这是否可行。如果可行,有人会提供其他答案。

另一种方法是为每个站点创建一个具有任何自定义位置的服务器块,然后将任何通用指令包含在一个通用 cile 中。像这样

示例1.conf

server {
  listen      80;
  server_name site1.example.com;

  include common1.conf;

  location ^~ robots.txt {
    alias /home/web/public_html/static/example1/robots.txt;
  }
}

例子2.conf

server {
  listen      80;
  server_name site2.example.com;

  include common1.conf;

  location /abcd {
    //whatever
  }

  location ^~ robots.txt {
    alias /home/web/public_html/static/example2/robots.txt;
  }
}

通用1.conf

location /common/location {
  //whatever
}

答案3

您的语句有问题location。它仅匹配用户发送的规范化 URI,即 URL 中域名和可能的端口之后、查询参数之前的部分。

此外,您不需要在alias指令中指定实际的文件名,而只需指定查找文件的路径。

因此您需要使用:

location /robots.txt {
    alias /home/web/public_html/static/example1;
}

在您的配置中。

相关内容