Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Проксирование http и https в одном конигурационном файле, на порты отличные от 80 и 443
Hello!
On Wed, Dec 11, 2013 at 06:04:55AM -0500, mnsold wrote:
> Подскажите, как можно организовать прокисрование http и https в одном
> конфигурационном файле, если есть несколько веб-серверов порты у которых
> отличаются от 80 и 443.
> Опишу общий вариант, чтобы было понятнее о чем речь, думаю в организациях, у
> которых множество сервисов, такое или очень похожее часто встречается.
>
> Для упрощения пусть будут несколько веб-серверов
> (apache,tomcat,glassfish,jbos ... и т.д.) на одном сервере (в жизни конечно
> не васе прям так, но доля правды есть, да и заменить один хост на хост в
> сети не так и сложно).
>
> Пусть будет сервер в лок сети с установленым на нем ПО:
> - nginx, порты http=80 https=443, он же проксирует все во нешний мир.
> - apache, порты http=8080 https=8083
> - glassfish, порты http=8181 https=8183
>
> 1. Каким образом нужно написать конфиг для проксирования, чтобы http и https
> были в одном конфиге?
> 2. Каким образом нужно написать конфиг для проксирования, чтобы http и https
> были в одном конфиге, при условии, что приложения на apache/glassfish
> находятся не в корне веб сервера?
> 2й вариант наиболее интересен!
Для начала имеет смысл понять две простые вещи:
1) Весь конфиг nginx'а может быть записан в одном файле,
nginx.conf. Все попытки разделения на множество маленьких
файликов по доменам - это лишь средство для упрощения
автоматизации, обычно применяемое в линуксе. Если вам хочется
записать всё в "одном конфиге" - просто напишите всё в nginx.conf,
и с головой будет в порядке.
2) Несколько блоков server{} в рамках одного nginx.conf - это
нормально, и это хороший, годный способ писать простую
конфигурацию. Если у вас два разных виртуальных сервера, которые
обрабатываются по разному - напишите для них разные блоки
server{}, и с головой будет в порядке.
[...]
> в одном из location указать проксирование на apache
> if ( $scheme = "http" ) {
> proxy_pass http://localhost:8080;
> }
> if ( $scheme = "https" ) {
> proxy_pass https://localhost:8083;
> }
[...]
> то в location можно проксирование прописать следующим образом без
> использования if
> proxy_pass $scheme://127.0.1.1; | proxy_pass $scheme://127.0.1.1/app;
> или
> proxy_pass $scheme://127.0.1.2; | proxy_pass $scheme://127.0.1.2/app;
Не надо делать ни так, ни так. Если хочется, чтобы запросы,
пришедшие по https, проксировались с использованием https, а
запросы, пришедшие по http, проксировались без него, то
правильно делать так:
server {
listen 80;
location / {
proxy_pass http://upstream;
}
}
server {
listen 443 ssl;
location / {
proxy_pass https://upstream;
}
}
Блоки server{} - это инструмент, специально предназначенный для
того, чтобы задавать разную обработку для разных виртуальных
серверов. Его и надо использовать для решения таких задач.
Отдельный вопрос - для чего в рамках одного сервера гонять трафик
по SSL, тратя ресурсы на шифрование, но это уже скорее из области
философии.
--
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|