Я хотел бы, чтобы мой веб-сервер apache2 обслуживал и http, и https на одном и том же порту.
С другим методом, который я попробовал, он либо не работал на http или https ..
Как я могу это сделать?
Обновление:
если я включаю SSL и затем посещаю страницу с http, я получаю такую страницу:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
<blockquote>Hint: <a href="https://server/"><b>https://server/</b></a></blockquote></p>
<hr>
<address>Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny16 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Server at server Port 443</address>
</body></html>
Из-за этого, кажется, очень возможно иметь и http и https на одном и том же порту.
Первым шагом будет изменение этой страницы по умолчанию, чтобы она отображала заголовок 301-Moved.
Update2: в соответствии с этим , это возможно. Теперь вопрос заключается в том, как настроить Apache для этого.
apache-2.2
ssl
Zulakis
источник
источник
https://example.com:80
. Третье: я не верю, что это все равно возможно.mod_ssl
.Ответы:
Трафик SSL не может работать на том же порту, что и трафик, отличный от трафика SSL, TLS может это делать, но он не используется на веб-серверах. Именно по этой причине TLS в основном используется на SMTP-сервере.
Один и тот же вопрос уже задавался несколько раз (см. Два примера ниже) разными людьми, и всегда говорили, что при использовании одного Apache это невозможно, вам придется использовать какое-то другое программное обеспечение или создать своего собственного слушателя:
Apache2 Переписать http на https через порт 5553
Apache отвечает как HTTP, так и HTTPS на один и тот же порт
Также я не смог найти ни одного официального документа Apache, в котором упоминается трафик http и https на одном и том же порту без некоторого перенаправления.
Имейте в виду, что когда люди говорят SSL, они обычно имеют в виду SSL / TLS, которые не совпадают.
Я бы принял этот ответ от apache.org как категорическое НЕТ на ваш вопрос по работе с http и https на одном и том же порту
https://issues.apache.org/bugzilla/show_bug.cgi?id=52228
Вы можете попробовать модуль mod_rewrite, но я предлагаю вам открыть еще один вопрос о том, как использовать его для перенаправления https (вам все равно потребуется несколько портов). Я не работал с этим, поэтому не могу дать вам подробную информацию о том, как это сделать.
Как я уже сказал, не знаю много о модуле, поэтому я предполагаю, что вам понадобится три порта. Один не-SSL порт для прослушивания mod_rewrite, один не-SSL для трафика http и один порт SSL для https, вам нужно будет настроить порт 999 для mod_rewrite, а затем ваши службы будут прослушивать два разных порта для http и https.
Обратите внимание на то, что сказал Шейн Мэдден в своем комментарии: запрос http на порт с поддержкой SSL выдаст вам только ошибки, даже если вы установите mod_rewrite на этот порт.
источник
Можно перенаправить http в https с помощью пользовательского ErrorDocument.
Однако в текущей версии Apache запуск всего веб-сервера по протоколам http и https невозможен.
К сожалению, в Apache 2.2-16 есть ошибка, которая еще не исправлена, из-за которой перенаправление работает только в Apache 2.4.
Для получения дополнительной информации посмотрите здесь: https://issues.apache.org/bugzilla/show_bug.cgi?id=50823
Обновление
Вот фрагмент кода, который я тестирую с помощью Apache 2.4:
Используйте его, установив
ErrorDocument 400 /redirect-400-error.php
в вашем конфигурационном файле apache. Вы можете найти больше информации о реализации пользовательских ErrorDocuments здесь.источник
Простое решение:
Теперь вы получаете перенаправление «Найдено» и никаких неприятных сообщений об ошибках.
источник
http://
вместоhttps://
Я думаю, что это может работать путем определения статического ErrorDocument, например:
Затем создайте файл
redirect_https.txt
в корневом каталоге вашего документа со следующим содержимым:Это работает (даже пытался) и отправляет браузеру «фальшивый» HTTP-редирект.
источник