我在 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;
}
在您的配置中。