Ошибка редиректа с https на http://$host:443
Ошибка неверного порта при отдельных переходах по страницам характерна не только для Виртуальной Машины, а и многих самостоятельных конфигураций с Nginx. Однако, данная ошибка присутствует во всех VM Bitrix на протяжении последних лет.
Как проявляется баг?
Самыми частыми симптомами появления проблемы являются появившиеся ошибки в отчетах поисковых краулеров Google и Яндекс. В один прекрасный день после перехода на https протокол в отчетах начинают попадаться ошибочные страницы с url — http://host.com:443/page или наоборот https://host.com:80/page
Простым взглядом на строки легко понять, что проблема кроется в том, что страница «находящаяся» на https пытается быть открытой по протоколу http или в «иную сторону».
Зачастую найти точки входа ботов на ошибочные страницы довольно сложно. Это могут быть результаты поиска, переход после авторизации, результаты форм и что угодно еще. Радует то, что по-большому счету искать причину и не нужно. Главное устранить эти «нелогичные» редиректы на уровне сервера.
Отдельным случаем проявления данной проблемы является открытие страницы с <i>ошибкой 400</i>. На данной странице красуется сообщение: The plain HTTP request was sent to HTTPS port
Правим конфиги «Виртуалки»
/etc/httpd/bx/conf/bx_ext_***.com.conf
Если у вас на виртуальной машине работает один сайт, то понадобится найти файл конфига Апапч:
/etc/httpd/bx/conf/default.conf
и над ServerAdmin [email protected] вставляем
ServerName https://YOUR_SITE
При многосайтовой конфигурация виртуалки делаем тоже самое, но в файле нужного сайта bx_ext_YOUR_SITE.conf
Альтернативный способ
Иногда описанного выше недостаточно. Приходится идти глубже и править директивы связанные с страницами ошибок. Ищем файл отвечающий за конфиг nginx нашего ssl домена
/etc/nginx/bx/site_avaliable/ssl. s1.conf
Добавляем error_page 497 https://$host$request_uri;. Получим нечто похожее на:
# Default SSL certificate enabled website server { listen 443 default_server http2; server_name _; # Enable SSL connection server_name_in_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host:443; proxy_set_header HTTPS YES; set $proxyserver "http://127.0.0.1:8888"; set $docroot "/home/bitrix/www"; index index.php; root /home/bitrix/www; include bx/conf/bitrix.conf; # Include server monitoring API's include bx/server_monitor.conf; error_page 497 https://$host$request_uri; }
Проблема должна исчезнуть. Если вам известны иные методы напишите нам в комментариях.
Решение наверняка 🙂
Если не помогло все вышеописанное и ошибка остается — то причина в файле настроек nginx :
/etc/nginx/bx/site_avaliable/bx_ext_s1. conf
Нужен именно файл обычного протокола http (bx_ext_), а не https (bx_ext_ssl)
Добавляем return 301 https:/YourDomain.com$request_uri;. Получим нечто похожее на:
# Ansible managed # Additional website http server { listen 80 ; server_name YourDomain.com www.YourDomain.com; return 301 https://YourDomain.com$request_uri; ... ... error_page 497 https://$host$request_uri; }
В 2020 году кроме коронавируса появилось еще что-то новое … и иногда нужно колдовать совсем не с nginx, а с http. Альтернативное решение описали тут.
Как настроить HTTPS для 1С-Битрикс
В финальной части цикла поговорим о настройке HTTPS на CMS Битрикс.
Обычно в Битрикс не нужны какие-либо существенные изменения, поскольку почти все ссылки на стандартных шаблонах используются относительные — то есть без указания протокола и даже домена. Вам, скорее всего, после установки сертификата нужно будет только все проверить и внести минимальные правки.
Чек-лист по настройке HTTPS на Битрикс
- Ссылки на страницах — они бывают нескольких видов:
- /contacts/ — относительная ссылка
- //site.com/contacts/ — абсолютная ссылка с относительным протоколом
- https://site.com/contacts/ — абсолютная ссылка с протоколом https
- http://site.com/contacts/ — абсолютная ссылка с протоколом http
Нужно избавиться от всех ссылок последнего вида, поскольку они приводят к ошибкам смешанного содержимого.
- Проверьте работу всех форм обратной связи на сайте. Иногда в ajax-запросах используются абсолютные ссылки для отправки данных, которые перестанут работать, если их не поменять на https.
- Проверьте выгрузки на торговые площадки, такие как Rozetka, Yandex.Market. В пользовательских скриптах выгрузки протокол может быть жестко прописан. Все файлы выгрузки нужно сгенерировать заново. Установите флажок в поле Использовать в выгрузке протокол https в выгрузке Yandex (Рабочий стол > Магазин > Настройки > Экспорт данных). https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
6. Если используется CDN, то поставить флажок в поле Сайт работает по https в настройках сервиса Ускорение сайта CDN.
7. В настройках модуля E-mail маркетинг включите https для ссылок в письмах.
На этом основная настройка завершена. Если у вас остались какие-либо вопросы — обращайтесь в нашу техподдержку.
apache — перенаправление с порта 80
Задавать вопрос
спросил
Изменено 2 года, 4 месяца назад
Просмотрено 63 раза
Возникла проблема. Сделал редирект для сайта с http на https. Редирект периодически срабатывает, но проблема в том, что иногда при переходе на http://example.
DirectoryIndex index.php index.html ExpiresActive on ExpiresByType image/jpeg «доступ плюс 3 дня» ExpiresByType image/gif «доступ плюс 3 дня» Nginx:
пользователь bitrix; рабочие_процессы 8; error_log /var/log/nginx/error.log предупреждение; pid /var/run/nginx.pid; worker_rlimit_nofile 10240; События { использовать эполл; worker_connections 10240; } http { включить /etc/nginx/mime.types; приложение default_type/принудительная загрузка; server_names_hash_bucket_size 128; # Описание поддерживаемых форматов журнала доступа log_format main '$remote_addr - $remote_user [$time_local - $upstream_response_time] ' '$статус "$запрос" $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"'; log_format common '$remote_addr - - [$time_local - $upstream_response_time] ' '"$запрос" $статус $bytes_sent ' '"$http_referer" "$http_user_agent" $msec'; балансировщик log_format '$remote_addr - $remote_user [$time_iso8601] "$host" ' '"$запрос" $статус $body_bytes_sent "схема: $схема" ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" ' '"$request_length" : "$request_time" -> $upstream_response_time'; log_format debug '$upstream_response_time,"$time_local","$remote_addr","$request",$status,$body_bytes_sent'; # загрузить карты по умолчанию включить bx/maps/*.
Тест на завиток:
$ curl http://127.0.0.1 -i HTTP/1.1 301 перемещен навсегда Сервер: nginx/1.16.0 Дата: Чт, 23 июля 2020 г., 10:25:56 по Гринвичу Тип содержимого: текст/html; кодировка = iso-8859-1 Длина контента: 303 Соединение: Keep-alive Расположение: https://127.0.0.1:80/ X-Content-Type-Options: nosniff Параметры X-Frame: SAMEORIGIN <заголовок>
301 перемещен навсегда <тело>Перемещено навсегда
Документ перемещен сюда.
<час> Сервер Apache/2.4.6 (CentOS) на 127.0.0.1, порт 80- apache
.htaccess- nginx
- перенаправление
4
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
apache — Как вы перенаправляете HTTPS на HTTP?
Задавать вопросспросил
Изменено 1 год, 9 месяцев назад
Просмотрено 464k раз
Как перенаправить HTTPS на HTTP?. То есть противоположное тому, чему (вроде бы) все учат.
У меня есть сервер на HTTPS, для которого я заплатил сертификацию SSL, и зеркало, для которого у меня его нет, и которое я храню только на случай чрезвычайных ситуаций, поэтому для него нет смысла получать сертификацию.
На рабочих столах моего клиента есть НЕСКОЛЬКО ярлыков, которые указывают на
http://production_server
иhttps://production_server
https://mirror_server
(что не работает) и большой жирный Internet Explorer 7 красный экран беспокойства для моей компании.К сожалению, я не могу просто переключить это на уровне клиента. Эти пользователи очень неграмотны в компьютерах: и, скорее всего, они сойдут с ума, увидев ошибки «небезопасности» HTTPS (особенно то, как в настоящее время с этим справляются Firefox 3 и Internet Explorer 7: ПОЛНАЯ СТОП, к счастью, но это не помогает мне здесь, LOL).
Очень легко найти решения Apache для перенаправления http->https, но я не могу сделать наоборот.
Идеи?
- апач
- ssl
- перенаправление
- https
5
Это не тестировалось, но я думаю, что это должно работать с использованием mod_rewrite
RewriteEngine On RewriteCond %{HTTPS} на Правило перезаписи (.*) http://%{HTTP_HOST}%{REQUEST_URI}
11
Имейте в виду, что механизм перезаписи запускается только после получения HTTP-запроса, а это означает, что вам все равно потребуется сертификат, чтобы клиент мог установить соединение для отправки запроса!
Однако, если резервная машина будет иметь такое же имя хоста (с точки зрения клиента), тогда не должно быть никаких причин, по которым вы не можете использовать тот же сертификат, что и основная производственная машина.
3
Для тех, кто использует файл
.