понедельник, февраля 14, 2011

CentOS 5.5+Nginx+Jetty

Используем CentOS 5.5 как сервер, Nginx как фронтенд-reverse-proxy, пересылающий запросы в jetty. Настройка с самого нуля.
1. Ставим CentOS 5.5 как сервер. Без ГУИ. Не забыли yum update.

2. Открываем в SELinux http(s):
[user@localhost ~]# system-config-securitylevel-tui
там Security Level: Enabled, лезем в Customize и открываем порты WWW, Secure WWW.

3. Устанавливаем и настраиваем nginx:
a) Добавляем репозиторий Yum CentALT:
[user@localhost ~]# cat > /etc/yum.repo.d/centalt.repo
[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0
b) [user@localhost ~]# yum install nginx
c) Проверили что nginx работает
[user@localhost ~]# services nginx start
[user@localhost ~]# telnet localhost 80
d) Добавили nginx в автозагрузку:
[user@localhost ~]# chkconfig --levels 235 nginx on

4. Устанавливаем Oracle Java 1.6:
a) Скачали java
[user@localhost ~]# wget ссылка_на_нужную_версию_jdk_или_jre_RPM!_c_http://www.oracle.com/technetwork/java/javase/downloads/index.html
b) Установили [user@localhost ~]# sh jdk-6u24-linux-*-rpm.bin
c) Если ранее был openjdk, альтернативим
[user@localhost ~]# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_24/jre/bin/java 100
[user@localhost ~]# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_24/jre/bin/javac 100
[user@localhost ~]# alternatives --config java
[user@localhost ~]# alternatives --config javac

5. Устанавливаем Jetty 7:
a) Скачали jetty
[user@localhost ~]# wget http://download.eclipse.org/jetty/stable-7/dist/jetty-distribution-7.3.0.v20110203.tar.gz
b) Распаковали в /opt (по умолчанию все должно быть в /opt/jetty)
[user@localhost ~]# tar -xvzf jetty-distribution-7.3.0.v20110203.tar.gz -C /opt
c) Переименовали папку opt/jetty-distribution-7.3.0.v20110203 в opt/jetty
[user@localhost ~]# mv /opt/jetty-distribution-7.3.0.v20110203/ /opt/jetty
d) Скопировали в /etc/init.d скрипт jetty.sh
[user@localhost ~]# cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
e) Запустили сервис
[user@localhost ~]# service jetty start
f) Проверили что все работает
telnet localhost 8080
g) Добавили jetty в автозагрузку:
[user@localhost ~]# chkconfig --levels 235 jetty on

6. Настраиваем nginx как прокси для jetty
a) Редактируем конфиг ngnix
[user@localhost ~]# vi /etc/nginx/nginx.conf
Делаем чтобы выглядело так
server {
listen 80;
server_name mydomain.com www.mydomain.com;
access_log /var/log/nginx_67_log main;
location / {
proxy_pass http://127.0.0.1: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;
}
}
b) Перезапускаем nginx, проверяем
service nginx restart
telnet localhost 80

7. Настраиваем правильное использование X-Forwarded-For в Jetty
a) [user@localhost ~]# vi /opt/jetty/etc/jetty.conf
b) В секцию addConnector добавили forwarded
<call name="addConnector">
<arg>
<new class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<set name="host"><property name="jetty.host" /></Set>
<set name="port"><property name="jetty.port" default="8080"/></Set>
<set name="maxIdleTime">300000</Set>
<set name="Acceptors">2</Set>
<set name="statsOn">false</Set>
<set name="confidentialPort">8443</Set>
<set name="lowResourcesConnections">20000</Set>
<set name="lowResourcesMaxIdleTime">5000</Set>

<!-- добавили forwarded! -->
<set name="forwarded">true</Set>

</New>
</Arg>
</Call>

c) Рестартанули jetty
[user@localhost ~]# service jetty restart


Материалы:
http://vexell.ru/2011/01/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-nginx-%D0%BD%D0%B0-centos-5/
http://easylinux.ru/node/289
http://stackoverflow.com/questions/266931/how-to-configure-nginx-to-work-with-jetty6-webserver

Мой список блогов