我试图让这个重写规则起作用:
rewrite ^/booking/(.*)/([0-9]+).ics$ /cgi-bin/links/booking/ical.cgi?room_id=$2&who=$1 last;
ical.cgi 脚本只是打印出该用户的ical内容。该脚本的输出方式非常简单。首先我们打印出标题:
print $IN->header( 'text/calendar' );
...然后打印出iCal值。这在我们的旧服务器(使用Apache)上工作正常,但出于某种原因,我在新的nginx服务器上发生了这种情况:
然后,如果您下载它,该文件将保存为ical.cgi
,而不是foo.ics
。
我做错了什么?
FWIW,这是我在.cgi脚本的主要位置块中设置的内容:
location ~ \.cgi$ {
gzip off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8181;
}
脚本实际上工作正常(下载的文件是我期待的内容 - 但问题是它被编写为ical.cgi文件名,而不是foo.ics)
答案 0 :(得分:1)
可能是愚蠢的问题,但您是否在nginx中启用了CGI处理模块?如果没有,您所看到的行为就是我所期望的(将其视为要下载的文件)。
答案 1 :(得分:0)
我没有将此标记为答案,但系统似乎要我回答 - 所以:
UPDATE FIXED: Eugh,那是其中的一天!问题是我的配置中有这个:
location ~ ^/cgi-bin/links/booking/ {
rewrite (.*) https://$host$1 last;
}
请求的网址是:
http://www.example.org/booking/andy1/226.ics
所以它正在做的是,首先重定向到https,这就是破坏它的原因。卫生署!我会把这篇文章留在这里,以防它帮助其他人;)(即使我有点被嘘声哄骗了!)
我通过这样做来修复它:
location ~ ^/cgi-bin/links/booking/ical.cgi {
# do nothing!
}
location ~ ^/cgi-bin/links/booking/ {
rewrite (.*)\.cgi https://$host$1.cgi last;
}