Re: Проксирование http и https в одном конигурационном файле, на порты отличные от 80 и 443

mnsold nginx-forum at nginx.us
Wed Dec 11 20:45:17 UTC 2013


Maxim Dounin Wrote:
-------------------------------------------------------
> > Согласитесь, N количество блоков  server {} и N количество блоков
> location
> > {} проще изменить, меньше вероятности допустить ошибки и понимать
> легче, чем
> > N*2 количество блоков  server {} и N*2 количество блоков location {}
> > сделанных отдельно для http и для https.
> 
> Не соглашусь.  Проще менять то, что само по себе просто.  А 
> вероятность допустить ошибку - гораздо выше при редактировании 
> сложного конфига.  Количество - не так важно, и принципиального 
> значения не имеет.
> 
> Ну и не следует забывать, что все эти попытки "сокращения" 
> конфигурации обычно выливаются в множество лишней работы при 
> обработке запросов.  На всякий случай я оставлю эту ссылку здесь:
> 
> http://nginx.org/en/docs/faq/variables_in_config.html


Я с вами тоже тут не соглашусь, т.к. конфиг вида:
server {
listen 80;
listen 443 ssl;
...
include app;
...
}

файл app:
location / {
...
proxy_pass $schema://upstream:;
...
}
Очень простой и то, что вы написали "А вероятность допустить ошибку -
гораздо выше при редактировании сложного конфига" тут несколько не уместно,
т.к. вы правильно написали чуть выше "само по себе просто" и эти слова очень
подходят для данной конфигурации. 

Не ясна тогда возможность указывать в директивы в одном блоке server {}
server {
listen 80;
listen 443 ssl;
С ваших слов получается - если удается заставить проксировать по схеме
http->http + https->http то можно использовать такую конструкцию, в
остальном - ее использовать не правильно, и нужно плодить блоки server{} и
location{}.
Я не утверждаю, что именно так вы сказали, это лишь вывод который сделал я
на основе ваших наводок.

И конфиг выше уж точно проще чем этот конфиг (как минимум с точки зрения
внесения правок, минимизации ошибок, да и не только этого):

server {
listen 80;
...
include app;
...
}

файл app:
location / {
...
proxy_pass http://upstream:;
...
}

server {
listen 443 ssl;
...
include apps;
...
}

файл apps:
location / {
...
proxy_pass https://upstream:;
...
}
Даже с точки зрения "множество лишней работы при обработке запросов" в
данном случае:
1сервер+1локейшен(в одном файле)+одна доп. переменная $schema может быть
проще в обработке чем 2сервера+2локейшена(в 2х файлах) и в место одной
переменной статика в виде http и https.
Это только мысли в слух, они ничем не подтверждены, таких тестов я пока не
делал и в серьез их сейчас конечно воспринимать не нужно, но и отказываться
от них еще рано.

Максим, вы не подумайте что я вас не понимаю, прекрасно понимаю, но хотелось
бы найти решение для вопроса который я озвучивал ранее и был бы признателен
за помощь:
как проксировать одно приложение по http и https в одном блоке server {} и
одном блоке location {} (без дублей), учитавая, что приложение на бэкэенде
может быть доступно как в корне так и по контекстному пути, а порты
отличаются от 80 и 443.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,245412,245448#msg-245448



Подробная информация о списке рассылки nginx-ru