2017-09-29 15 views
0

我試圖讓這個重寫規則的工作: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)

回答

0

我不會以紀念這個作爲回答,但系統似乎要我把一個答案 - 所以:

更新修復: Eugh,這是其中的一個天!問題是,我有這個在我的配置:

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

和請求的iCal的網址是:

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

可能是個愚蠢的問題,但是你有沒有在nginx中啓用CGI處理模塊?如果沒有,您看到的行爲就是我所期望的(將其視爲要下載的文件)。

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

+0

感謝:;我將在這裏離開這個崗位,以防萬一它可以幫助別人)(雖然我有點被噓,噓embaressed)

我做固定它答覆。是的,我們有一個cgi的反向代理設置(去apache2)。我已經更新了我的問題。這真的很奇怪,因爲我有其他規則工作正常(他們保存用戶所在的URL,但顯示從cgi腳本輸出的內容) –

+0

啊,現在我覺得很愚蠢!我使用的是http:// url,但後來有一條規則將所有/ booking /位置都轉換爲https - 所以它在處理的是:'rewrite(。*)https:// $ host $ 1 last; '...因此打破它!咄 –