Nginx - / 的单独位置

Nginx - / 的单独位置

我想使用 nginx 将一个位置仅用于根 URL(https://example.com/) 并从不同位置提供所有其他文件。最终我想使用它在代理上/代理之前进行身份验证,但最初我只是尝试使用简单的文件位置。

根据文档,我使用了两个位置块:

server {
  listen  443 ssl;
  ssl_certificate      /etc/nginx/cert.pem;
  ssl_certificate_key  /etc/nginx/cert.key;

  location = / {
    root /usr/share/nginx/html;
    index index.html;
  }

  location / {
    root /usr/share/nginx/html2;
  }
}

但是对 https:// example.com/ 的请求得到的是 /usr/share/nginx/html2/index.html 而不是 /usr/share/nginx/html/index.html

同样地,我也尝试过:

  location = / {
    root /usr/share/nginx/html;
    index index.html;
  }

  location ~* ^/.* {
    root /usr/share/nginx/html2;
  }

但我得到了相同的结果。

有没有直接的方法来实现这个功能?

答案1

这是因为 index 指令将进行内部重定向,/index.html因此它与第二个 location 块匹配。将第一个块更改为:

location ~ ^/(index\.html)?$ {
    root /usr/share/nginx/html;
    index index.html;
}

相关内容