2010-08-12 150 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