我有一个由 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 服务器 - 每个您正在侦听的端口一个。它使故障排除变得更加容易,并且会减少您以后遇到的麻烦。