我的配置中有一个服务器条目,其中包含 50 个位置条目,我需要在我的服务器上定义另一个域,该域具有相同的配置,但一个位置除外
例如我有
server {
# the port your site will be served on
# the domain name it will serve for
listen 443 ssl;
server_name example.com sudomain.example.com;
ssl_certificate /etc/loc/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/loc/privkey.pem; # managed by Certbot
proxy_set_header X-Forwarded-Proto https;
location /static/ {
root /srv/sites/example;
}
... # many more location defenition
}
我需要做类似的事情
location /robots.txt {
if ($host ~ ^\w+\.\w+\.\w+$) {
# subdomains
alias /srv/robots_disallow.txt;
} else {
alias /srv/robots.txt;
}
}
如果可能的话,我想避免将所有配置提取到代码片段中,然后将其包含在2个服务器条目中,一个用于主域,一个用于子域。
我知道我复制的代码不起作用,而且我已经读过if 是邪恶的
这表明了一些
error_page 418 = @disallow_robots;
location /robots.txt {
alias /srv/robots.txt;
if ($host ~ ^\w+\.\w+\.\w+$) {
# subdomains
return 418;
}
}
location @disallow_robots {
alias /srv/robots_disallow.txt;
}
但后来我明白了the "alias" directive cannot be used inside the named location
答案1
您将通过map
和try_files
语句获得更清洁的解决方案。
例如:
map $host $robots {
~^\w+\.\w+\.\w+$ /robots_disallow.txt;
default /robots.txt;
}
server {
...
location = /robots.txt {
root /srv;
try_files $robots =404;
}
...
}
看这个文件了解详情。