![仅当目录存在时才在 nginx 中创建用户透明的位置块](https://linux22.com/image/673945/%E4%BB%85%E5%BD%93%E7%9B%AE%E5%BD%95%E5%AD%98%E5%9C%A8%E6%97%B6%E6%89%8D%E5%9C%A8%20nginx%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7%E9%80%8F%E6%98%8E%E7%9A%84%E4%BD%8D%E7%BD%AE%E5%9D%97.png)
我有一个目录,有时存在,有时不存在。如果请求并且存在,则其中的所有文件都应可用,例如像这样
location /my_dir {
root /other/www/root
}
因此,如果用户请求http://myhost.example.com/my_dir/file
并且/my_dir
存在,则应该提供服务。但是,如果目录/other/www/root/my_dir
不存在,nginx应该表现得好像位置块从未定义,并使用正常规则来处理请求。具体来说,如果目录当前不存在,客户端不应该知道这个特殊规则,即不应该有用户可见的指示符。
一个想法是将默认配置放在命名位置,并将上面的几行更改为以下内容(参见如何编写具有命名位置的 DRY、模块化 nginx conf(反向代理)):
location /my_dir {
root /other/www/root
try_files $uri $uri/ @default;
}
location / {
error_page 418 = @default;
return 418;
}
location @default {
# all default stuff like the default root, index etc. goes here
}
这有意义吗或者有更好的方法吗?
更新
以下是 nginx 的两个示例配置:
# Example 1
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com
root /var/www/www.example.com
index index.html index.htm
}
# Example 2
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com
return 301 https://$server_name/$request_uri
}
在每种情况下,我都希望为该/my_dir
位置添加特殊规则,但前提是特殊根目录/other/www/root
当前存在。如果不存在,客户端不应该注意到该/my_dir
位置的特殊处理。