2013-10-06 27 views
0

我代理/api在域上,我有這個位置塊。避免nginx轉義proxy_pass上的查詢參數

location ^~ /api/ { 
    rewrite_log on; 
    rewrite ^/api/(.*) /$1$is_args$args break; 
    proxy_pass http://127.0.0.1:1337; 
} 

的網址沒有查詢參數,但一旦他們這樣做,我得到這樣的Could not find path: /records%3fname=hoegh.io

在這裏討論的%3f上游服務器上的錯誤,它工作正常,只要是一個URL編碼爲?,並且由於它是URL編碼的,因此上游服務器無法識別它。這可能會受到阻礙,但我希望能夠讓nginx正確處理這個問題(即,在將URL傳遞給代理之前不要轉義URL)。

任何想法?

+0

難道解決方案爲您提供的工作?請接受 – qodeninja

回答

1

您不需要做任何事情。 $ args自動傳遞。

如果您希望修改傳遞的$參數,您必須重寫。

set $args "foo=bar"; 

例如。

工作液應該如下:

location ^~ /api/ { 
    rewrite_log on; 
    rewrite ^/api/(.*) /$1 break; 
    proxy_pass http://127.0.0.1:1337; 
} 
1

你試過這個嗎?通常不需要添加查詢字符串,因爲Nginx會自動添加查詢字符串:

rewrite ^/api/(.*) /$1? break; 
+0

的回答,我早些時候已經這樣做了,但是似乎查詢字符串根本沒有被傳遞。 – mikl

+0

對不起,我的壞。我忘了在重定向字符串的末尾輸入「?」 – Wolph