从 https 重定向到 http?

从 https 重定向到 http?

这里有一个奇怪的问题。我使用 FullCalendar 向服务器上的端点发起 ajax 请求。端点是:

https://my_website/events/?start=2019-03-31&end=2019-05-12&_=1555698739056

请注意,它明确是 https。但是,当我发起请求时(即当 Fullcalendar 发起请求时),我得到 301 并重定向到非 https 端点:

http://my_website/events?start=2019-03-31&end=2019-05-12&_=1555698739056

由于页面是通过 https 加载的,因此失败。

在此处输入图片描述

端点工作正常 - 当我将其加载到浏览器时,我得到了预期的 json 输出(通过 https)。此页面上还有其他 ajax 请求正常工作,并且我成功地在此站点的其他地方(到另一个端点)使用 Fullcalendar 执行了完全相同的操作。只有这一种情况表现异常。

值得注意的是,它位于 nginx 反向代理/负载均衡器后面的 docker 容器中;站点配置非常简单:

upstream docker {
    server localhost:8701;
    server localhost:8702;
  }

server {
    server_name my_website;
    location / {
      proxy_pass http://docker;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
      # proxy_set_header                HTTP_Country-Code $geoip_country_code;
        proxy_pass_request_headers      on;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/my_website/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/my_website/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = my_website) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name my_website;
    return 404; # managed by Certbot

}

并且 nginx 的请求日志如下:

134.124.11.91 - - [19/Apr/2019:13:49:49 -0500] "GET /events/?start=2019-04-28&end=2019-06-09&_=1555699678658 HTTP/1.1" 301 0 "https://我的网站“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/73.0.3683.103 Safari/537.36”

是否有人发现我遗漏了什么,从而导致这个奇怪的 301 重定向到非 https 端点?

答案1

301 重定向很可能来自 Docker 容器中的后端服务器。它使用 URL 配置http://...。使用正确的 URL 配置容器中的应用程序服务器。

答案2

HTTP 301 表示永久重定向,永久意味着浏览器的缓存始终存在问题。(这就是为什么我总是在任何新版本上连续数周使用 HTTP 302。)清除所有浏览器缓存。或者,谷歌搜索如何删除浏览器中所有缓存的 301 响应的指南。它们非常棘手!

如果可以的话,请始终使用它curl -v http://x来调试,它不会缓存任何内容。

答案3

清除缓存,并将重定向值更改为 if ($sceme = http) { return 301https://我的网站$请求uri

相关内容