Назад | Перейти на главную страницу

Перенаправление с 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; Конфигурация сайта довольно проста:

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 / апр / 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, например, Gecko) Chrome / 73.0.3683.103 Safari / 537.36 "

Кто-нибудь видит что-то, что мне не хватает, что могло бы вызвать это странное перенаправление 301 на конечную точку, отличную от https?

Редирект 301, скорее всего, исходит от вашего внутреннего сервера в контейнере докера. Он настроен с http://... URL. Настройте сервер приложений в контейнере с правильным URL-адресом.

Очистите кеш и измените значение перенаправления на if ($ sceme = http) {return 301 https: // my_website$ request_uri

HTTP 301 означает постоянное перенаправление, а постоянное означает, что кеш браузера всегда под подозрением. (Вот почему я всегда использую HTTP 302 в течение нескольких недель в любой новой версии.) Очистите весь кеш браузера. Кроме того, вы можете найти в Google руководство, как удалить все кешированные ответы 301 в вашем браузере. Они довольно липкие!

Если можете, всегда используйте curl -v http://x для отладки ничего не кеширует.