我正在将编译好的 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 中获取它们。