Итак порядок установки:
- Этап 1. Перенос Apache на порт отличный от 80го
Этап 2. Установка nginx
Этап 3. Настройка nginx
Этап 4. Установка и настройка RPAF в Apache
Этап 1. Перенос Apache на порт отличный от 80го
- AppServ по умолчанию настраивает Apache на прослушивание 80го порта, что вполне логично и правильно, но в нашем случае 80й порт будет прослушиваться nginx'ом, поэтому и требуется перенести Apache на другой порт.
Открываем C:\AppServ\Apache2.2\conf\httpd.conf и ищем в нем строчку Listen 80 (либо свой номер порта, если у Вас веб-сервер был установлен на другом порту) и заменяем ее на Listen 127.0.0.1:81
Также просматриваем строчки задания виртуальных хостов (если они есть) и меняем их тоже
находим NameVirtualHost *:80 и меняем на NameVirtualHost *:81
находим все <VirtualHost *:80> и меняем на <VirtualHost *:81>
После этого сохраняем изменения и перезапускаем Apache. Теперь можно проверить, что веб-сервер отвечает на порту 81 (Для проверки был создан файл test.php содержащий <?php phpinfo(1); ?>).
- Для установки nginx достаточно распаковать nginx-0.7.65.zip в папку где у нас будет находиться веб-сервер,
например в C:\AppServ\nginx.
Опытным путем было выяснено, что под Windows Nginx должен быть обязательно установлен на диск C, иначе он не запускается.
Для простоты управления веб-сервером nginx создадим несколько bat файлов:start.bat@ECHO OFF
start c:\nginx\nginx.exestop.bat@ECHO OFF
start c:\nginx\nginx.exe -s stopПосле этих действий можно запустить nginx и посмотреть как он работает (естественно, что пока мы не подключили php обрабатывать его файлы nginx не сможет)reload.bat@ECHO OFF
start c:\nginx\nginx.exe -s reload
Итак запускаем start.bat и идем в браузер смотреть, что получилось. Вводим в адресной строке http://localhost и получаем в ответ На этом пока остановимся, выключим nginx (запустив stop.bat) и перейдем к следующему шагу
- Открываем файл конфига C:\nginx\conf\nginx.conf и заменяем его на
Комментарии по тексту есть, но все же поясню пару мест.
Код: Выделить всё
#2 рабочих процесса worker_processes 2; # лог для ошибок error_log C:/nginx/logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; events { # максимум рабочих соединений worker_connections 2000; } http { include mime.types; default_type application/octet-stream; # Формат лога #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # Лог доступа всего веб-сервера #access_log logs/access.log main; # Таймаут при чтении заголовка запроса клиента client_header_timeout 3m; # Таймаут при чтении тела запроса клиента client_body_timeout 3m; # Таймаут при передаче ответа клиенту send_timeout 3m; # Таймаут keep-alive соединения keepalive_timeout 2m; #gzip on; server { # Слушать 80 порт listen 80; # Использовать следующие хосты. server_name _; # Лог доступа для конкретного виртуального хоста #access_log logs/host.access.log main; # Отдаем статику напрямую location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|js)$ { root C:/AppServ/www; access_log off; expires 30d; } # Запрещаем обращение к файлам .htaccess и .htpasswd location ~ /\.ht { deny all; } # Передаем запрос Apache location / { # Адресс и порт Apache proxy_pass http://127.0.0.1:81/; 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; #client_body_temp_path tmp/client_body_temp; 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; #proxy_temp_path tmp/proxy_temp; charset koi8-r; } #error_page 404 /404.html; # При перечисленных ошибках показывать статическую страницу /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
Если на сервере будет находиться не один сайт как в конфиге выше, а несколько, то для каждого должен быть указан свой блок server. Причем первый блок server считается сервером по умолчанию и он будет вызываться при обращении по IP или хосту не описанному ни в одном server_name.
В server_name может быть указано: "_" - аналог default в Apache; один или несколько хостов через пробел; хост начинающийся с точки - описывает все его поддомены
Приведу пример каркаса структуры для поясненияОтдельного внимания заслуживают секции location, позволяющие разруливать запросы, но их рассмотрение лучше вынести в отдельную статьюКод: Выделить всё
... http { ... server { # хост по умолчанию server_name _; ... } server { # несколько перечисленных хостов server_name pupkin.ru www.pupkin.ru; ... } server { # все поддомены vasia.ru server_name .vasia.ru; ... } }
- Так как у нас обращение к Apache идет не напрямую, а через Nginx, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес сервера, на котором расположен Nginx. Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует в Apache из него REMOTE_ADDR.
Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP.
Скачиваем mod_rpaf и распаковываем в папку модулей Apache (C:\AppServ\Apache2.2\modules). После этого открываем C:\AppServ\Apache2.2\conf\httpd.conf и добавляем в конец файлавместо 192.168.1.26 укажите IP адрес сервера, на котором расположен Nginx.Код: Выделить всё
LoadModule rpaf_module modules/mod_rpaf.so RPAFenable On RPAFsethostname On RPAFheader X-Forwarded-For RPAFproxy_ips 192.168.1.26 127.0.0.1
Теперь сохраняем изменения и перезапускаем Apache.
Так же желательно перенести папку C:\AppServ\Apache2.2\icons в папку C:\AppServ\www. Без этого при просмотре содержимого каталогов (опция Indexes в Apache) nginx будет пытаться загрузить несуществующие иконки для файлов.
Теперь можно запустить nginx (start.bat) и проверять работу веб-сервера в браузере.
Введем в адресной строке http://localhost/test.php (файл test.php мы создали на первом шаге) и увидим
Более подробно про директивы используемые в конфигурационном файле nginx можно почитать на сайте разработчика
http://sysoev.ru/nginx/docs/
Вопросы и уточнения и пожелания пишите в разделе Вопросы по веб-серверам
Copyright © 2010 Creaternal (v-tanke.ru).
При копировании информации ссылка на источник и указание copyright обязательны.