2017-04-09 91 views
2

考慮以下nginx的配置文件:nginx的響應「301永久移動」

server { 
    listen 443; 
    ssl on; 
    ssl_certificate  /etc/tls/cert.pem; 
    ssl_certificate_key /etc/tls/key.pem; 
    location/{ 
     proxy_pass http://api.default.svc.cluster.local; 
    } 
} 

所有443的傳入TCP請求應該重定向到api.default.svc.cluster.local:80運行我的服務器(這是一個節點REST的API BTW)。這工作正常,我可以curl https://<nginx-IP>/ nginx並得到正確的答覆,如預期。

現在,我想將位置從/更改爲/api,因此我可以觸發curl https://<nginx-IP>/api以獲得與以前相同的響應。

1.嘗試

所以我改變位置線在配置到:

location /api {

不幸的是這是行不通的,而不是我得到一個錯誤Cannot GET /api這是一個節點錯誤,顯然它被路由到api,但是仍然有些臭。

2.嘗試

它似乎在URI結尾的斜線是必需的,所以我把它添加到位置:

location /api/ {

現在事情發生了轉變。我不會像以前那樣得到同樣的錯誤,而是我會得到一個「301永久移動」。我怎樣才能修復我的nginx配置文件?

關於環境

我使用的是kubernetes部署中部署nginx的反向代理含的其他信息。介紹了配置。然後我使用kubernetes服務公開nginx。另外,我嘗試使用kubernetes入口來處理這種情況,使用相同的路由,但入口服務會以default backend - 404消息作出響應。

回答

2

正如問題中所提到的,URI中的斜線是重要的。我在此位置解決了這個問題,但是,我沒有將它添加到使用proxy_pass的URI中。

至於我得到了它使用下面的配置工作nginx的代理:

server { 
    listen 443; 
    ssl on; 
    ssl_certificate  /etc/tls/cert.pem; 
    ssl_certificate_key /etc/tls/key.pem; 
    location /api/ { 
     proxy_pass http://api.default.svc.cluster.local/; 
    } 
} 

關於進入的解決方案,我是不是能夠得到它通過添加缺少尾部斜槓的路徑工作。該服務由於其名稱而被指定,因此不能添加結尾斜槓(即,它會導致錯誤)。

相關問題