Nginx에서 HTTPS를 HTTP로 변경할 수 없습니다.

Nginx에서 HTTPS를 HTTP로 변경할 수 없습니다.

nginx로 운영되는 웹 서버가 있습니다. 무료 도메인 이름을 등록 .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 리스너로 가리킵니다.

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

모범 사례는 수신 대기 중인 각 포트에 대해 http 및 https 서버를 별도로 정의하는 것입니다. 그러면 문제 해결이 더 쉬워지고 나중에 문제를 덜 수 있습니다.

관련 정보