2016-07-06 88 views
0

我想使用Nginx实现SSL终止。我需要强制通过https所有流量,所以我有这个规则在我的Nginx的配置:所有HTTP方法的SSL终止与Nginx

if ($scheme = http) { 
     rewrite ^ https://$server_name$request_uri? permanent; 
} 

这对于浏览器的伟大工程,以及当我以https直接打API。但是,如果我通过使用其他HTTP方法(POST,PUT等)的请求通过http命中api,它会将它们视为GET方法。我知道这是因为301被返回而发生的,但是我怎么能仍然对所有HTTP方法保持这种强制SSL行为?

+0

对于API,重定向不鼓励,因为只隐藏问题!您应该在API的http条目上回答错误以避免安全漏洞。 – Tom

回答

1

解决!发现HTTP代码307的行为与303完全相同,但不需要更改HTTP方法。返回该代码而不是解决问题:

return 307 https://$server_name$request_uri; 
+0

准确地说,'永久性'国旗问题301代码 –