仅当目录存在时才在 nginx 中创建用户透明的位置块

仅当目录存在时才在 nginx 中创建用户透明的位置块

我有一个目录,有时存在,有时不存在。如果请求并且存在,则其中的所有文件都应可用,例如像这样

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位置的特殊处理。

相关内容