【问题标题】:nginx redirect HTTPS to HTTPnginx 将 HTTPS 重定向到 HTTP
【发布时间】:2011-03-29 01:41:27
【问题描述】:

如何从 https 重定向到 http?

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

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

【问题讨论】:

  • 您能接受答案吗?
  • 不是没有 SSL 证书。您需要一个带有 ssl 证书配置的服务器块,并重定向到另一个非 ssl 80 服务器块。没有证书 HTTPS 是无法连接的,并且在没有 ssl 配置的情况下侦听 443 的服务器实际上是 http://domain:443 而不是 https://domain/

标签: nginx https http-redirect


【解决方案1】:

上面的答案会起作用,您需要生成一个自签名证书(或拥有一个真实的证书)并像这样配置 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; 
 }

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

【讨论】:

  • 如果没有丑陋的警告,如果不购买我们不会使用的证书,是否不可能进行此重定向?谢谢!
  • 您可以从startssl 获得免费的SSL 证书,这样就可以摆脱警告。自签名证书总是会抛出你所说的警告。
  • 如果您指定了多个服务器名称,也可以将rewrite ^(.*) http://domain.com$1 permanent; 替换为rewrite ^(.*) http://$host$1 permanent;
  • listen *:443listen 443listen 443 ssl有什么区别?
  • 您还可以从Let's Encrypt 获得免费证书。我知道我参加聚会迟到了……
【解决方案2】:

根据 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;
}

【讨论】:

  • 最好的,除了问题是要求 https -> http 。将https 更改为http 并将生成的return 301 http://$server_name$request_uri; 移动到443 服务器块。
  • 谢谢@这里。已更新。
【解决方案3】:
    if ($host = 'foo.com') {
        rewrite  ^/(.*)$  http://www.foo.com$1  permanent;
    }

【讨论】:

  • nginx PitfallsIfIsEvil。这段代码可能应该重构为两个单独的 server 块,一个捕获 http,另一个捕获 https 然后执行 return 301 http://$server_name$request_uri;
【解决方案4】:

您需要创建 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;
}

【讨论】:

  • OP 要求将 HTTPS 重定向到 HTTP,而不是相反。
猜你喜欢
  • 2018-01-05
  • 1970-01-01
  • 2014-10-11
  • 2018-08-18
  • 2017-02-25
  • 1970-01-01
  • 2014-05-08
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多