无法在 Nginx 上将 HTTPS 更改为 HTTP

无法在 Nginx 上将 HTTPS 更改为 HTTP

我有一个由 nginx 运行的 Web 服务器。我注册了一个免费域名.tk并安装了 Let's Encrypt 证书。以下配置是我的HTTPS:

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

但是现在我删除了Nginx中的所有HTTPS配置,然后它就无法访问http://mysite.tk。我还清除了浏览器上的缓存,但它不起作用。

更新

我的nginx.conf

#user  nobody;
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        # listen       443 ssl;
        server_name  xxx.tk;


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


        # TLS configurations
  #       ssl_certificate      /etc/letsencrypt/live/xxx.tk/fullchain.pem;
  #       ssl_certificate_key  /etc/letsencrypt/live/xxx.tk/privkey.pem;

        # ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  #       ssl_prefer_server_ciphers  on;
        # ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";

        # add_header Strict-Transport-Security max-age=15768000;

        # if ($ssl_protocol = "") {
        #   rewrite ^ https://$server_name$request_uri? permanent;
        # }

        location / {
            index index.php index.html index.htm;
        }
        location /files {
            autoindex on;
        }

        location ~ \.php$ {
            root /home/tester/local/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

}

来自评论:

  • 修改配置后我重新启动了守护进程。

  • Nginx 也在监听 80 端口,确认如下:

    netstat -pltun
    
  • 我清理了浏览器上的所有内容。但它仍然不起作用。

答案1

无法将 HTTPS 反转回 HTTP 的最可能原因是以下行:

# add_header Strict-Transport-Security max-age=15768000;

现在,它被注释掉了,但很可能您已经测试过它。

但是,你的错误是,因为每个 HSTS 指南都应该告诉你,你应该根据你对能够在 HTTPS 上传递域的信心来增加时间值。

答案2

浏览器经常缓存http 301,http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/是一本好书。

它可以在您以前从未在该网站上使用过的浏览器中运行吗?

另请打开浏览器开发工具,查看清除缓存后它是否仍在接收重定向

答案3

首先记住这一点很有帮助如果是邪恶的

此外,默认情况下,任何传入的 https 请求都将发送到端口 443。传入请求通常也会使用 ssl,因此您可能需要在重写时关闭此功能。像这样的块将把所有内容指向您的 http 侦听器,而不是使用 if:

server {
  listen 443;
  server_name _;
  ssl off;
  rewrite ^ http://$server_name$request_uri?$args permanent;
}

最佳实践是单独定义您的 http 和 https 服务器 - 每个您正在侦听的端口一个。它使故障排除变得更加容易,并且会减少您以后遇到的麻烦。

相关内容