2013-04-30 84 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