nginx 如何强制重定向到命名块

nginx 如何强制重定向到命名块

我正在尝试设置 nginx,以便它直接为我的所有静态文件提供服务,但 api 调用重定向到后端节点应用程序。以前,此应用程序也提供静态文件,但我正在尝试更改它以不这样做。

所以我有几个非常具体的 URL,我想将它们重定向到我的后端。

我已经创建了一个命名块,其中包含我认为所有必需的参数

location @api {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://localhost:2020;
    proxy_redirect off;
  }

但我该如何重定向到它呢?我试过了

  location /api/ {
    try_files @api;
  }

  location = /logon {
    try_files @api;
  }

  location = /logoff {
    try_files @api;
  }

因为这是我能找到的唯一对命名位置的引用,但如果没有至少一个文件可以尝试,我nginx不喜欢它。当然,后端需要知道传递的原始 URL,这样它才能正确路由。这样做了吗?但这也意味着我无法重定向。try_filesproxy_pass

答案1

您可以使用try_files将不存在的文件名作为第一个参数来立即调用到指定位置。请参阅这个文件了解详情。

例如:

try_files nonexistent @api;

或者,您可以使用正则表达式location代替命名位置块。请参阅这个文件了解详情。

例如:

location ~ ^/(api/|log(in|off)$) { proxy_pass ...; ... }

最有效的解决方案是将代理配置放入单独的文件中,并将include其拉入您的三个location块中。请参阅这个文件了解详情。

相关内容