2010-08-12 124 views
27

如何从https重新注册到http?nginx将HTTPS重定向到HTTP

我有下面的代码,但它似乎并没有工作。

server { 
     listen 443; 
     server_name example.com; 
     rewrite ^(.*) http://example.com$1 permanent; 
} 
+1

请你接受的答案吗? – brupm 2014-02-20 01:02:52

回答

0
if ($host = 'foo.com') { 
     rewrite ^/(.*)$ http://www.foo.com$1 permanent; 
    } 
+6

nginx [陷阱](http://wiki.nginx.org/Pitfalls#Server_Name)和[IfIsEvil](http://wiki.nginx.org/IfIsEvil)。这段代码应该被重构为两个separte'server'块,一个捕获http,另一个捕获https,然后返回301 http:// $ server_name $ request_uri;'。 – 2013-10-29 02:01:10

20

上面的答案会工作,你需要生成一个自签名的证书(或有一个真实的),并配置nginx的是这样的:

server { 
    listen *:443; 
    ssl on; 
    server_name domain.com; 
    rewrite ^(.*) http://domain.com$1 permanent; 

    ssl_certificate  /data/certs/domain.crt; 
    ssl_certificate_key /data/certs/domain.key; 
} 

请记住,如果是一个自签名证书,浏览器会给你一个难看的警告。

+2

如果不购买我们不会使用的证书,是否可以在没有丑陋警告的情况下进行重定向?谢谢! – dgilperez 2012-09-27 11:05:02

+0

你可以从startssl获得一个免费的SSL证书,这将消除警告。自签名证书将始终引发您正在谈论的警告。 – 2012-10-25 02:56:37

+3

你也可以用''rewrite ^(。*)http:// $ host $ 1 permanent'替换''rewrite ^(。*)http://domain.com$1 permanent;''如果你有多个服务器指定的名称。 – ub3rst4r 2014-08-17 23:24:43

13

建立关jberger的评论的配置应该工作将是:

server { 
    listen *:80; 
    server_name example.com; 
} 

server { 
    listen    *:443 ssl; 
    server_name   example.com; 
    ssl_certificate  /etc/ssl/certs/example.com.cert; 
    ssl_certificate_key /etc/ssl/private/example.com.key; 
    return 301 http://$server_name$request_uri; 
} 
+1

最好,除了问题是要求https - > http。将'https'改为'http',并将生成的'return 301 http:// $ server_name $ request_uri;'移至443服务器块。 – here 2014-01-08 01:09:33

+0

谢谢@here。更新。 – krd 2014-02-19 18:19:44