Настройка nginx для работы с apache и tomcat серверами на примере Ubuntu 10.04 Server

    Возникло желание поставить на свой сервер nginx. И тут же возникла потребность оставить Apache (nginx может его полностью заменить). Так же на сервере работает Apache Tomcat, пока пустой, но все же есть. Я опишу простой пример как заставить nginx работать в роли фронт-энд прокси, слушая порт 80 и перенаправляя запросы другим серверам, в зависимости от контекста. Поехали…

    Для начала определимся с версиями. apache2 достаточно свеж в репозиториях Ubuntu 10.04. С недавних пор там появилась последняя версия сервера tomcat. А вот nginx стар, очень стар, просто супер-стар. Собирать из исходников последнюю версию? Если хотим пересобрать велосипед — пожалуйста. Дело в том, что многоуважаемый Никита Кардашин с форума nginx собирает последние версии nginx в deb-пакеты и любезно предоставляет их в своем репозитории. Там имеются пакеты даже для lucid. Давайте же добавим его репозитории в sources.list. Делаем себя рутом и далее все выполняем от него:

    $ sudo su
    # echo 'deb repo.dlocal.ru/nginx-repo/ubuntu/nginx8 lucid/' >> ./etc/apt/sources.list
    # apt-get update
    # apt-get install apache2 nginx


    Почему я не ставлю tomcat6? Да потому, что не смотря на обновленную версию в репозиториях, она оказалась не работоспособной. Т.е. привести к рабочему состоянию сервер можно, но зачем трахать себе мозг, если можно скачать, распаковать и наслаждаться? Но для начала настроим Apache и NginX. Отредактируем файл /etc/apache2/ports.conf, заставив apache принимать подключения только с адреса 127.0.0.1:

    NameVirtualHost *:80
    Listen 127.0.0.1:80 # указываем серверу apache что он будет находится только на localhost порту 80

    <ifmodule mod_ssl.c="">
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 127.0.0.1:443 # тоже самое только для порта 443 если включена поддержка ssl


    Теперь настроим прокси в nginx. редактируем файл /etc/nginx/sites-available/default:

    server {
    listen хх.хх.хх.хх:80; # где хх.хх.хх.хх это ваш внешний ip адрес
    server_name www.example.com; # www.example.com изменить на dns имя вашего сайта

    access_log /var/log/nginx/access.log;

    # редиректим все на localhost порт 80
    location / {
    proxy_pass localhost:80/;
    proxy_redirect off;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # это самы интересный пунк, отдаем статику средствами nginx без редиректа в apache
    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
    root /var/www;
    }
    }


    Перезапускаем apache и nginx:

    # /etc/init.d/apache2 restart
    # /etc/init.d/nginx restart


    Теперь перейдем к tomcat. Займемся его «установкой»:

    # cd /opt
    # wget apache.infocom.ua/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz
    # tar -xvzf ./apache-tomcat-6.0.26.tar.gz
    # rm ./apache-tomcat-6.0.26.tar.gz
    # ln -s ./apache-tomcat-6.0.26 ./tomcat


    Далее нужно отредактировать его настройки. В файле /opt/tomcat/conf/server.xml находим секцию Connector и приводим ее к следующему виду:

    <Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />


    Теперь и tomcat принимает подключения только с локального 127.0.0.1. Далее в настройках nginx в файле /etc/nginx/sites-available/default создаем еще одну секцию location, например:

    location /tomcat {
    proxy_pass localhost:8080/;
    proxy_redirect off;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }


    Теперь по адресу <ваш_ip>/tomcat будет отвечать tomcat. Спасибо за внимание.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 10

      +1
      >> Почему я не ставлю tomcat6? Да потому, что не смотря на обновленную версию в репозиториях, она оказалась не работоспособной. Т.е. привести к рабочему состоянию сервер можно, но зачем трахать себе мозг, если можно скачать, распаковать и наслаждаться?

      Вы точно ставили tomcat на Ubuntu. Она там рабочий из коробки (по моим практическим иследованиям).

      Я делаю почти как вы, только Apache вешаю тоже на другой порт. На 80 — только nginx :)
        0
        А разве можно оба web-сервера на один порт повесить? Они ж ругаются друг на друга, что порт «in use»…
        +1
        debian и tomcat6 из его комплекта и у вас не работает софт? Отключите security. Я не знаю ЗАЧЕМ товарищи из debian ставят такую суровую политику security доя tomcat, но если удалить файл отвечающий за это security все становится хорошо и гладко :)
          0
          А вот и ответ на вопрос le0pard. Видимо я просто не разобрался с политикой безопасности
          +1
          если у вас фронт и бек на одном сервере, то я бы использовал unix-socket, а не localhost.
            +1
            Покопаю и в эту сторону, спасибо за наводку.
          • UFO just landed and posted this here
          • UFO just landed and posted this here

            Only users with full accounts can post comments. Log in, please.