NGINX Игнорировать HTTPS для одной страницы

У меня есть система видеопортала, которая воспроизводит прямые трансляции. Проблема в том, что прямые трансляции создаются на лету через докер, поэтому я не могу легко их защитить (HTTPS). Мне нужен способ указать NGINX не защищать (HTTP) одну страницу по адресу {my_domain}/portal/{url_variable}, а убедиться, что остальная часть сайта будет HTTPS. Вот моя текущая конфигурация:

# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/app.domain.com/before/*;

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name app.domain.com;
root /home/forge/app.domain.com/public;

# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/app.domain.com/111111/server.crt;
ssl_certificate_key /etc/nginx/ssl/app.domain.com/111111/server.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'stuff';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";

Я попытался добавить еще один сервер, который прослушивает порт 80 и использует местоположение только для URL-адреса портала, но тогда весь сайт не отображается.


person fyroc    schedule 02.06.2018    source источник
comment
... прямые трансляции создаются на лету через докер, поэтому я не могу их легко защитить... - я не понимаю эту проблему. Для возможности использования HTTPS совершенно не важно, генерируется видеопоток динамически или является статическим файлом. Но в любом случае, если вы хотите использовать HTTP для частей вашего сайта, вам необходимо правильно настроить порт 80, так как это порт, используемый для HTTP. Если вы настроите только порт 443, доступ будет разрешен только по HTTPS.   -  person Steffen Ullrich    schedule 02.06.2018
comment
@SteffenUllrich Как мне разрешить порт 80 только на одной странице /portal/{URLVar}?   -  person fyroc    schedule 02.06.2018
comment
Просто объяснить. Прямые трансляции обслуживаются через HTTP, а сайт — HTTPS. Как вы сказали, это не сработает, поскольку вы не можете обслуживать ресурсы HTTP в HTTPS. Мое решение состоит в том, чтобы обслуживать эту единственную страницу не как HTTPS, а как HTTP. Мой вопрос: как мне это сделать с NGINX?   -  person fyroc    schedule 02.06.2018
comment
Если живой поток уже обслуживается HTTP, как вы говорите, это означает, что это должен делать другой сервер, независимый от вашего сервера. Таким образом, вам не нужно ничего делать на своем сервере, но URL-адрес прямой трансляции должен просто указывать на сервер, предоставляющий прямую трансляцию. Если вы не хотите публиковать сервер, вы можете использовать свой nginx в качестве обратного прокси-сервера для этого конкретного внутреннего URL-адреса, и таким образом внутренний URL-адрес HTTP может быть доступен по HTTPS извне.   -  person Steffen Ullrich    schedule 02.06.2018
comment
@SteffenUllrich Просто чтобы убедиться, что мы говорим об одном и том же, иначе я просто не понимаю вас. У меня есть портал здесь: https://app.domain.com/portal/stream_name и мне нужно, чтобы мой видеоплеер обслуживал поток, который http://206.189.200.80:5732/hls/stream_name.m3u8 в настоящее время не будет, потому что я не могу обслуживать http на странице https.   -  person fyroc    schedule 02.06.2018
comment
У потока уже есть URL. Либо вы разрешаете клиенту напрямую обращаться к этому URL-адресу, и в этом случае никаких изменений в вашем nginx не требуется. Или вы делаете свой прокси-сервер nginx этим URL-адресом, то есть proxy_pass один внешний видимый URL-адрес (местоположение nginx) на внутренний URL-адрес. И с этим вы можете сделать внутренний URL-адрес доступным через HTTPS в Интернете, даже если внутренний URL-адрес был только HTTP.   -  person Steffen Ullrich    schedule 02.06.2018
comment
Я вижу, к чему ты клонишь. Вы не против сделать это ответом с примером?   -  person fyroc    schedule 02.06.2018
comment
@SteffenUllrich, кстати, это сработало отлично   -  person fyroc    schedule 02.06.2018
comment
Постов о том, как использовать nginx в качестве прокси для внутренних серверов, достаточно. Нет необходимости делать еще один ответ. Рад, что это сработало для вас.   -  person Steffen Ullrich    schedule 02.06.2018