Nginx

Nginx:在位置使用 $http_host

  • July 5, 2017

我在 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;
}

上面的施工不工作。

您可以使用$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代表:按照優先順序:請求行中的主機名,或“主機”請求標頭欄位中的主機名,或與請求匹配的伺服器名。

我不知道這是否可能。如果是有人會提供另一個答案。

另一種方法是為具有任何自定義位置的每個站點創建一個伺服器塊,然後在一個公共 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;
 }
}

common1.conf

location /common/location {
 //whatever
}

引用自:https://serverfault.com/questions/859567