nginx try_files 和 add_header

Raj*_*K S 7 nginx single-page-application nginx-location

有人可以解释一下吗?

我有一个 nginx 服务器块,其中包含以下代码片段:

location / {
  try_files $uri $uri/ /index.html;
}
Run Code Online (Sandbox Code Playgroud)

基本上,我用它来提供 Angular SPA。它运作良好且很棒。

现在我想将Access-Control-Allow-Origin标头附加到响应中。所以我像这样改变了块:

location / {
  if ($request_method = 'OPTIONS') {
          add_header 'Access-Control-Allow-Origin' '*';
          add_header 'Access-Control-Max-Age' 1728000;
          return 204;
  }
  if ($request_method = 'GET') {
          add_header 'Access-Control-Allow-Origin' '*';
  }
  try_files $uri $uri/ /index.html;
}
Run Code Online (Sandbox Code Playgroud)

现在,每当我访问时,http://<application>.com我都会获得该页面,并且能够导航到http://<application>.com/some-page. 但是如果我直接尝试访问http://<application>.com/some-page,我会得到 nginx 404。以前不是这样的。如果我注释掉if的声明GET,事情就会恢复正常。

为什么?这里的声明有什么区别if