2013-04-30 57 views
3

我想在nginx的一個URL重定向到一個非HTTP協議如測試:// 123456當我去test.com/123456如何重定向nginx的非HTTP沒有HTML頭

我已經試過以下重寫: 重寫^/$試驗(*):// $ 1穩定;

和它的作品不過怪異的一部分,它增加HTML /身體頭,其弄亂我的代碼,有什麼辦法沒有HTML頭或任何其他推薦的方法做這樣的重寫?

HTTP/1.1 301 Moved Permanently 
Server: nginx/1.1.19 
Date: Tue, 30 Apr 2013 14:14:47 GMT 
Content-Type: text/html 
Content-Length: 185 
Connection: keep-alive 
Location: test://123456 

<html> 
<head><title>301 Moved Permanently</title></head> 
<body bgcolor="white"> 
<center><h1>301 Moved Permanently</h1></center> 
<hr><center>nginx/1.1.19</center> 
</body> 
</html> 

回答

1

這並不奇怪,這是它是如何應該是。

RFC 2616指定要刪除的實體主體應該存在。

10.3.2 301永久移動

新的永久URI應該在響應中的位置域指定。除非請求方法是HEAD,否則響應的實體應該包含一個超鏈接到新URI的短超文本註釋。

和...

10.3.3 302實測值

臨時URI應該通過在響應中的位置字段進行說明。除非請求方法是HEAD,否則響應的實體應該包含一個超鏈接到新URI的短超文本註釋。

應該在這方面,在RFC 2119定義:

這個詞,或「推薦」的形容詞,意味着有可能存在在特定情況下正當的理由忽略特定項目,但在選擇不同的課程之前,必須理解並仔細權衡全部含義。從NGINX 301 and 302 serving small nginx document body. Any way to remove this behaviour?


當然,你仍然可以做到這一點所採取

答案,一個可能性是代理請求和GET變更請求的方法是HEAD。這應該確保只發送HTTP標頭。

這是未經測試,但它應該是一個很好的起點:

server { 
    listen 8080; 
    server_name localhost; 
    return 301 test://$request_uri; 
} 

server { 
    listen 80; 
    server_name example.com; 
    location/{ 
     proxy_method HEAD; 
     proxy_pass http://localhost:8080; 
    } 
} 
利息

在這方面還NGINX convert HEAD to GET requests