【问题标题】:nginx rewrite rule - seems to redirect instead of showing contents?nginx 重写规则 - 似乎重定向而不是显示内容?
【发布时间】:2018-03-11 06:26:57
【问题描述】:

我正在尝试让这个重写规则起作用:

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)

【问题讨论】:

    标签: nginx


    【解决方案1】:

    我不打算将此标记为答案,但系统似乎希望我给出答案 - 所以:

    已修复更新: 哎呀,这是那些日子之一!问题是我的配置中有这个:

      location ~ ^/cgi-bin/links/booking/ {
        rewrite (.*) https://$host$1 last;
      }
    

    请求的 ical URL 是:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的回复。是的,我们有一个 cgi 的反向代理设置(去 apache2)。我已经更新了我上面的问题。这真的很奇怪,因为我的其他规则工作正常(它们保留用户所在的 URL,但显示从 cgi 脚本输出的内容)
      • 啊伙计,现在我觉得自己很愚蠢!我使用的是 http:// url,但随后有一条规则将所有 /booking/ 位置拉入 https - 所以它正在做的是处理:rewrite (.*) https://$host$1 last; ... 从而破坏它!呵呵
      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 2022-06-10
      • 2015-05-17
      • 2011-05-16
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多