Nginx: различия между версиями
Vovan (обсуждение | вклад) (→Решение) |
Vovan (обсуждение | вклад) (→На '''Интернет сервере''' делаем...) |
||
(не показано 12 промежуточных версий этого же участника) | |||
Строка 9: | Строка 9: | ||
=Решение= | =Решение= | ||
+ | |||
+ | Решение делается на Ubuntu Server 8.04.3 LTS. Ориентируемся по картинке ниже... | ||
+ | Некоторые ссылки для написания статьи: | ||
+ | http://debianworld.ru/articles/ustanovka-nginx-kak-front-end-k-apache-v-debian-ubuntu/ | ||
+ | http://www.opennet.ru:8101/base/net/nginx_frontend_apache.txt.html | ||
+ | |||
+ | ==На '''Интернет сервере''' делаем... == | ||
+ | |||
+ | * Устанавливаем nginx | ||
+ | |||
+ | aptitude install nginx | ||
+ | |||
+ | * Редактируем конфиг nginx | ||
+ | |||
+ | sudo nano /etc/nginx/nginx.conf | ||
+ | |||
+ | приблизительно так: | ||
+ | |||
+ | # пользователь, от которого запускается процесс | ||
+ | user www-data; | ||
+ | # кол-во рабочих процессов. Обычно равно кол-ву ядер на машине | ||
+ | worker_processes 2; | ||
+ | error_log /var/log/nginx/error.log; | ||
+ | pid /var/run/nginx.pid; | ||
+ | events { | ||
+ | worker_connections 1024; | ||
+ | } | ||
+ | http { | ||
+ | include /etc/nginx/mime.types; | ||
+ | default_type application/octet-stream; | ||
+ | access_log /var/log/nginx/access.log; | ||
+ | sendfile on; | ||
+ | tcp_nopush on; | ||
+ | keepalive_timeout 2; | ||
+ | tcp_nodelay on; | ||
+ | gzip on; | ||
+ | gzip_comp_level 3; | ||
+ | gzip_proxied any; | ||
+ | gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; | ||
+ | include /etc/nginx/conf.d/*.conf; | ||
+ | include /etc/nginx/sites-enabled/*; | ||
+ | } | ||
+ | |||
+ | * Останавливаем nginx: | ||
+ | |||
+ | /etc/init.d/nginx stop | ||
+ | |||
+ | * Создаем файл конфигурации proxy.conf: | ||
+ | |||
+ | 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; | ||
+ | client_max_body_size 10m; | ||
+ | client_body_buffer_size 128k; | ||
+ | proxy_connect_timeout 90; | ||
+ | proxy_send_timeout 90; | ||
+ | proxy_read_timeout 90; | ||
+ | proxy_buffer_size 4k; | ||
+ | proxy_buffers 4 32k; | ||
+ | proxy_busy_buffers_size 64k; | ||
+ | proxy_temp_file_write_size 64k; | ||
+ | |||
+ | * Создаем файл виртуального хоста: | ||
+ | |||
+ | nano /etc/nginx/sites-available/mysite.ru | ||
+ | |||
+ | приблизительно так создаем виртуальный хост для '''ВебСервера 2''' с виртуальным хостом mysite.ru: | ||
+ | |||
+ | upstream mysite.ru { | ||
+ | # Внимание!, если back-end apache имеет виртуальные хосты, то название ''mysite.ru'' должно совпадать с названием виртуального хоста на apache! | ||
+ | # Адрес back-end'a! | ||
+ | server 192.168.10.7:80; | ||
+ | } | ||
+ | server { | ||
+ | listen 80; | ||
+ | server_name www.mysite.ru mysite.ru; | ||
+ | access_log /home/site/mysite.ru/logs/nginx_access.log; | ||
+ | error_log /home/site/mysite.ru/logs/nginx_error.log; | ||
+ | # Перенаправление на back-end | ||
+ | location / { | ||
+ | proxy_pass http://mysite.ru; | ||
+ | include /etc/nginx/proxy.conf; | ||
+ | } | ||
+ | # Статическиое наполнение отдает сам nginx | ||
+ | # back-end этим заниматься не должен | ||
+ | # Теоретически в эту директорию nginx должен кешировать файлы, типы которых указаны. | ||
+ | location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ { | ||
+ | root /home/site/debianworld.ru/static/; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | * Включаем новый хост: | ||
+ | |||
+ | ln -s /etc/nginx/sites-available/mysite.ru /etc/nginx/sites-enabled/mysite.ru | ||
+ | |||
+ | * Запускаем nginx | ||
+ | |||
+ | /etc/init.d/nginx start | ||
+ | |||
+ | * Добавляем в ''/etc/rc.local'' команду для автоматического запуска ''nginx'' при загрузке сервера | ||
+ | |||
+ | nano /etc/rc.local | ||
+ | |||
+ | до ''exit 0'' добавляем строчку | ||
+ | |||
+ | /etc/init.d/nginx start | ||
+ | |||
+ | ==На одном из '''Веб серверов''' делаем...== | ||
+ | Как Вы уже догадались, делаем на '''ВебСервере 2'''... | ||
+ | Предполагается, что на этом сервере уже работает apache с настроенным виртуальным хостом mysite.ru | ||
+ | |||
+ | * Устанавливаем поддержку apache-м модуля '''mod_rpaf''' | ||
+ | |||
+ | Данный модуль для apache необходим для работы связки nginx - front-end/apache - back-end. Необходимость в данном модуле возникает '''по следующей причине:''' запросы к apache приходят с ip адреса на котором работает nginx (в простейшем случае это тот же самый адрес на котором работает apache), соответственно в журнальных файлах apache будет фигурировать только ip nginx сервера, что не очень хорошо. Также без использования данного модуля начнутся проблемы со скриптами в которых используется ip адрес посетителя и станет правильно работать механизм ограничения доступа по ip адресам с помощью .htaccess. | ||
+ | |||
+ | итак, устанавливаем | ||
+ | |||
+ | aptitude install libapache2-mod-rpaf | ||
+ | |||
+ | настраиваем | ||
+ | |||
+ | nano /etc/apache2/mods-available/rpaf.conf | ||
+ | |||
+ | изменяем значение параметра '''RPAFproxy_ips''' на ip адрес сервера с nginx тем самым давая возможность apach-у получать реальные ip в логах виртуальных хостов | ||
+ | |||
+ | <IfModule mod_rpaf.c> | ||
+ | RPAFenable On | ||
+ | RPAFsethostname On | ||
+ | RPAFproxy_ips 192.168.10.1 | ||
+ | </IfModule> | ||
+ | |||
+ | перезапускаем apache | ||
+ | |||
+ | /etc/init.d/apache2 restart | ||
+ | |||
+ | проверяем работоспособность | ||
+ | |||
+ | '''Примечание:''' В этой статье не рассматривается настройка ДНС. Для работы с адресами, работающими через nginx еще необходимо настроить DNS сервер! | ||
+ | |||
+ | |||
+ | <br clear="all"> | ||
[[Изображение:nginx11.png|center]] | [[Изображение:nginx11.png|center]] |
Текущая версия на 01:55, 22 августа 2009
Все познается в примерах...
Содержание
Задача
Выпустить в интернет веб-сервисы с различных ip хостов одной подсети через сервер, имеющий выход в интернет через pppoe соединение.
При этом хосты, на которых крутятся web-сервисы должны видеть только сервер, смотрящий в интернет, сами в интернет смотреть не должны.
Работающие apache на каждой из ip хостов должны в свои логи получать реальные ip адреса клиентов из интернета.
Решение
Решение делается на Ubuntu Server 8.04.3 LTS. Ориентируемся по картинке ниже... Некоторые ссылки для написания статьи: http://debianworld.ru/articles/ustanovka-nginx-kak-front-end-k-apache-v-debian-ubuntu/ http://www.opennet.ru:8101/base/net/nginx_frontend_apache.txt.html
На Интернет сервере делаем...
- Устанавливаем nginx
aptitude install nginx
- Редактируем конфиг nginx
sudo nano /etc/nginx/nginx.conf
приблизительно так:
# пользователь, от которого запускается процесс user www-data; # кол-во рабочих процессов. Обычно равно кол-ву ядер на машине worker_processes 2; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; tcp_nopush on; keepalive_timeout 2; tcp_nodelay on; gzip on; gzip_comp_level 3; gzip_proxied any; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
- Останавливаем nginx:
/etc/init.d/nginx stop
- Создаем файл конфигурации proxy.conf:
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; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k;
- Создаем файл виртуального хоста:
nano /etc/nginx/sites-available/mysite.ru
приблизительно так создаем виртуальный хост для ВебСервера 2 с виртуальным хостом mysite.ru:
upstream mysite.ru { # Внимание!, если back-end apache имеет виртуальные хосты, то название mysite.ru должно совпадать с названием виртуального хоста на apache! # Адрес back-end'a! server 192.168.10.7:80; } server { listen 80; server_name www.mysite.ru mysite.ru; access_log /home/site/mysite.ru/logs/nginx_access.log; error_log /home/site/mysite.ru/logs/nginx_error.log; # Перенаправление на back-end location / { proxy_pass http://mysite.ru; include /etc/nginx/proxy.conf; } # Статическиое наполнение отдает сам nginx # back-end этим заниматься не должен # Теоретически в эту директорию nginx должен кешировать файлы, типы которых указаны. location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ { root /home/site/debianworld.ru/static/; } }
- Включаем новый хост:
ln -s /etc/nginx/sites-available/mysite.ru /etc/nginx/sites-enabled/mysite.ru
- Запускаем nginx
/etc/init.d/nginx start
- Добавляем в /etc/rc.local команду для автоматического запуска nginx при загрузке сервера
nano /etc/rc.local
до exit 0 добавляем строчку
/etc/init.d/nginx start
На одном из Веб серверов делаем...
Как Вы уже догадались, делаем на ВебСервере 2... Предполагается, что на этом сервере уже работает apache с настроенным виртуальным хостом mysite.ru
- Устанавливаем поддержку apache-м модуля mod_rpaf
Данный модуль для apache необходим для работы связки nginx - front-end/apache - back-end. Необходимость в данном модуле возникает по следующей причине: запросы к apache приходят с ip адреса на котором работает nginx (в простейшем случае это тот же самый адрес на котором работает apache), соответственно в журнальных файлах apache будет фигурировать только ip nginx сервера, что не очень хорошо. Также без использования данного модуля начнутся проблемы со скриптами в которых используется ip адрес посетителя и станет правильно работать механизм ограничения доступа по ip адресам с помощью .htaccess.
итак, устанавливаем
aptitude install libapache2-mod-rpaf
настраиваем
nano /etc/apache2/mods-available/rpaf.conf
изменяем значение параметра RPAFproxy_ips на ip адрес сервера с nginx тем самым давая возможность apach-у получать реальные ip в логах виртуальных хостов
<IfModule mod_rpaf.c> RPAFenable On RPAFsethostname On RPAFproxy_ips 192.168.10.1 </IfModule>
перезапускаем apache
/etc/init.d/apache2 restart
проверяем работоспособность
Примечание: В этой статье не рассматривается настройка ДНС. Для работы с адресами, работающими через nginx еще необходимо настроить DNS сервер!