Я должен также упомянуть, что XenServer включает все, что необходимо установить сверху чистого металла. С Xen.org необходимо установить его сами, который может быть очень сложным/забавным/интересным (выбор, какой бы ни каждый соответствует контексту).
Если бы Вы хотели быть действительно умными, то Вы могли бы использовать вещь прокси соединения осуществить сниффинг первых двух байтов входящего потока данных и руки от соединения на основе содержания байта 0: если это - 0x16 (байт 'квитирования' SSL/TLS), передайте соединение со стороной SSL, если это - алфавитный символ, сделайте нормальный HTTP. Мой комментарий о нумерации порта применяется.
Я не думаю, что существует что-либо, что может обработать два различных протокола на единственном порте...
Мне любопытно относительно того, почему можно только передать один порт, но что в стороне... это не идеально, но если бы я был месте, то я служил бы всему по https.
Вы не можете поддерживать и HTTP и HTTPS по тому же порту, потому что оба конца соединения ожидают говорить определенный язык, и они не достаточно умны, чтобы удаться, говорит ли другой конец что-то еще.
Как Ваш комментарий к предложенному ответу Wil, Вы могли использовать обновление TLS (я полагаю, что более новые выпуски nginx поддерживают его, хотя я не попробовал), но это не выполняет HTTP и HTTPS, это просто выполняет HTTP с обновлением TLS. Проблемой является все еще поддержка браузера - большинство браузеров (все еще) не поддерживает ее. Если у Вас есть ограниченное объединение клиентов, то это - возможность, как бы то ни было.
Я не уверен, как это осуществляет его, но CUPSD отвечает и на http и на https на порте 631. Если nginx не может сделать этого теперь, возможно, они могут извлечь уроки из того, как команда CUPS осуществляет его, но CUPS находится под GPL, таким образом, nginx, вероятно, придется посмотреть на изменение его лицензии, если они действительно хотят реализовать такую возможность и не могут найти, что код делает так в другом месте.
Да, это возможно, но потребности, исправляющие nginx исходный код (HoverHell имеет решение, не исправляя). Nginx рассматривает это как неверную конфигурацию скорее затем действительная конфигурация.
Переменный $ssl_session_id может использоваться для отличия между плоскостью и ssl соединением.
Патч против nginx-0.7.65:
--- src/http/ngx_http_request.c-orig 2011-05-03 15:47:09.000000000 +0200
+++ src/http/ngx_http_request.c 2011-05-03 15:44:01.000000000 +0200
@@ -1545,12 +1545,14 @@
c = r->connection;
+ /* disable plain http over https port warning
if (r->plain_http) {
ngx_log_error(NGX_LOG_INFO, c->log, 0,
"client sent plain HTTP request to HTTPS port");
ngx_http_finalize_request(r, NGX_HTTP_TO_HTTPS);
return;
}
+ */
#if (NGX_HTTP_SSL)
Конфигурация сервера:
server {
listen 80;
index index.html;
location / {
root html;
if ($ssl_session_id) {
root html_ssl;
}
}
ssl on;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
}
Теоретически у вас может быть веб-страница, доступная через HTTP, которая может открывать WebSocket на https: 443 в любом месте, где захочет. Первоначальное рукопожатие WebSocket - это HTTP. Итак, да, можно сделать небезопасную страницу действительно способной к безопасному обмену данными. Это можно сделать с помощью библиотеки Netty .