【发布时间】:2019-09-10 00:01:46
【问题描述】:
这里有一个奇怪的问题。我使用 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://my_website" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
有没有人看到我遗漏的东西会导致这个奇怪的 301 重定向到非 https 端点?
【问题讨论】:
-
您的 nginx 配置中没有任何内容可能导致此重定向。可能是您的端点发起重定向,因为请求是通过 HTTP 代理的。为了确认,我建议将 $upstream_status 变量添加到 log_format。如果它等于 301,那么我是对的。它可能可以通过在 proxy_pass 中使用 https 或更改端点代码来解决。
标签: ajax nginx https fullcalendar http-status-code-301