匹配 Nginx 上响应 404 错误的所有位置

匹配 Nginx 上响应 404 错误的所有位置

我正在将编译好的 CGI 从 IIS 移植到 Nginx,该应用程序利用自定义错误 404 执行 Url 重写和静态文件缓存,在 IIS 中这是可行的

    <httpErrors>
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/index.exe" responseMode="ExecuteURL" />
    </httpErrors>

它将 request_uri 传递给 index.exe,然后执行如下操作

example.com/users

内部处理为

example.com/index.exe?module=users

或者类似

example.com/blog/my-first-post.html

处理为

example.com/index.exe?module=blog&postname=my-first-post

在 Nginx 中我正在尝试这个(cgi 在另一台服务器的后台运行)

server {
    listen 80;
    server_name example.com;
    root E:/domains/example.com;
    index index.html index.htm default.html default.htm;
    location ~* ^\/.* {
        proxy_pass http://localhost:5001;
    }
}

但是如果我输入 example.com/users 我会收到 403 错误...

如有任何帮助,我们将不胜感激:)

答案1

这段代码发挥了神奇的作用

  server {
  listen 80;
  server_name julcar.net.ec;
  root D:/Domains/julcar.net.ec/root;
  index index.html index.htm default.html default.htm;
  autoindex on;
  location = / {
      proxy_pass http://localhost:5001;
  }
  location ~ ^\/.+ {
      try_files $uri $uri/ =404;
      error_page 404 = @julcar.net.ec;
  }
  location @julcar.net.ec {
      proxy_pass http://localhost:5001?404=$request_uri;
  }

现在它就像 IIS 一样传递 404 错误,并且很容易在 CGI 中获取它们。

相关内容