nginx: избавляемся от localhost:XXXX
Наконец-то дошли руки поставить nginx на тестовый сервер, что позволило избавиться от всех этих kavaleu-al:1080, kavaleu-al:8500, kavaleu-al:3000. TeamCity-серверу повезло еще больше, он получил свой собственный субдомен teamcity.kavaleu-al вместо “стыдного” kavaleu-al:8080
Что я люблю в современном IT, так это то, что большинство вещей решаются за 10-20 минут по принципу “нашел”, “поставил”, “настроил” и все работает. Про nginx я знал очень давно, так что “искать” его не пришлось. Тем более, что мне уже давно мозолит статья про него. Ставится он за 5 минут. Ну и настройка у него тоже простая. Хотя мне пришлось повозиться (20 минут, не больше). Зато сейчас я абсолютно довольный слон. Но обо всем по порядку.
Я ставил nginx на винду, поэтому буду рассказывать про нее. Установка его на линуксе, конечно же отличается, но там тоже ничего сложного (sudo apt-get install nginx). Уверен, вы разберетесь.
У версии под винду есть особенность. Она, как говорят разработчики, не быстрая (что для тестового сервера не важно):
В настоящий момент в качестве метода обработки соединений используется только select(), поэтому не стоит ожидать высокой производительности и масштабируемости.
Шаг 1: Установка
Скачиваем дистрибутив. Распаковываем его в нужную вам папку. И запускаем.
cd c:\
unzip nginx-1.5.8.zip
cd nginx-1.5.8
start nginx
Идем браузером на localhost и, вуаля, видим Welcome to nginx!
. Значит мы все сделали верно.
Если же во время старта nginx ругается на то, что не может забиндитться на 80 порт (типа не хватает прав), то дело, скорее всего, в том, что кто-то уже этот порт себе забрал. В моем случае это был Скайп. Отбираем у него 80й порт и nginx заводиться как молодой (дело тут явно не правах, у меня UAC затянут по максимуму, но все равно не ругается, скорее все сообщение о правах досталось нам от линуксовой версии, там нужен рут для портов ниже 1024).
Шаг 2: Настройка
Открываем файл nginx.conf
(в папке conf
) и находим секцию another virtual host using mix of
. Изменяем ее как-то так:
server {
listen 80;
server_name teamcity.kavaleu-al;
location / {
proxy_pass http://localhost:8080/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
Из ключевых вещей тут listen 80
и server_name teamcity.kavaleu-al
(все входящие соединения на teamcity.kavaleu-al:80 обрабатывать этой секцией) и proxy_pass http://localhost:8080/
(перенаправлять все запросы на http://localhost:8080/).
Вместо виртуального хоста (субдомена) можно было настроить “папку” на основном хосте, например kavaleu-al/teamcity/ Для этого поднимаемся к основному серверу и добавляем ему новый локэйшен (я сделал это для своего ColdFusion сервера).
location /sop/ {
proxy_pass http://localhost:8500/sop/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
Чтобы браузер узнал о teamcity.kavaleu-al, нужно править файл hosts, добавив туда заодно и kavaleu-al
127.0.0.1 kavaleu-al
127.0.0.1 teamcity.kavaleu-al
Теперь просим nginx перечитать конфиг nginx -s reload
. Заходим на http://kavaleu-al/sop
и http://teamcity.kavaleu-al
и радуемся успеху.
Если радоваться нечему (а у меня так и было :( ), то не отчаиваемся. Берем волшебную команду nginx -t
и смотрим что-то же мы сделали не так.
Шаг 3: Автозапуск nginx
nginx дистрибутив не содержит виндовых сервисов, поэтому нужно поместить команду start nginx
в автозагрузку. Для девелоперской машины автозагрузка лучшее места. Но вот для сервера этот способ может оказаться неудачным. Так как сервер стартует и работает без пользователя. Т.е. не для кого выполнить автозагрузку.
Я поместил start nginx
в Scheduled Jobs, можно было бы создать из команды start nginx
сервис. Благо утилит в инете валом. Вроде даже, стандартная виндовая команда для этого есть. Но лучшее враг хорошего и я остановился на Планировщике.
Ура!
Вот, в принципе, и все. Ничего сложного. Писать оказалось в разы дольше, чем настраивать.
Еще раз напоминаю о волшебной команде nginx -t
. Если у вас не запускается nginx эта команда расскажет почему. Мне она сильно помогла.