nginx重写规则 - 似乎重定向而不是显示内容?

时间:2017-09-29 10:51:02

标签: nginx

我试图让这个重写规则起作用:

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服务器上发生了这种情况:

enter image description here

然后,如果您下载它,该文件将保存为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)

2 个答案:

答案 0 :(得分:1)

可能是愚蠢的问题,但您是否在nginx中启用了CGI处理模块?如果没有,您所看到的行为就是我所期望的(将其视为要下载的文件)。

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

答案 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;
  }