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@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru