nginx将HTTPS重定向到HTTP

时间:2010-08-12 17:17:38

标签: nginx https http-redirect

如何从https重定向到http?

我有下面的代码,但它似乎不起作用。

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

4 个答案:

答案 0 :(得分:22)

上面的答案可行,你需要生成一个自签名证书(或有一个真正的证书)并配置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; 
 }

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

您需要创建2个单独的服务器块:

  1. 端口443(HTTPS)-在此块中定义所有内容,例如PHP,404,home,root等。即使您要将https://www.example.com重定向到https://example.com或反之亦然,也可以像@coulix一样在这里进行。

  2. 端口80(HTTP)-在这里您将只使用:

server {
    listen    80;
    listen    [::]:80;
    server_name    example.com www.example.com;

    # Redirect HTTP to HTTPS
    return    301    https://example.com$request_uri;
}