| Oposum | Дата: Понедельник, 12.09.2011, 19:45 | Сообщение # 1 |
Лейтенант
Группа: Администраторы
Сообщений: 61
Награды: 1
Репутация: 1
Статус: Offline
| Народ, пока толком не допер как настроить php обработчик для кодирования flv ссылок но как установить связку сервера с NginX как front-end к Apache могу расписать. Нжиникс в данном случае будет обрабатывать все запросы к серверу - то есть бут стоять фронтом и отдавать статические файлы сразу ну остально бут отсылаться Апачу. Для установки нам подойдет любая рабочая сборка сервера Denwer (Денвер), TopServer, XAMPP или же VertrigoServ и актуальная версия NginX не обязательная самая последняя - лучше выбрать стабильную (на оф сайте такие пометки есть)
И так приступим: 1 по умолчанию 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); ?>).
запрос http://localhost:81/test.php если у вас открылась инфо о ПХП значит порт поменялся
Этап 2. Установка nginx
Для установки nginx достаточно распаковать nginx в папку где у нас будет находиться веб-сервер, например в C:\AppServ\nginx. Опытным путем было выяснено, что под Windows Nginx должен быть обязательно установлен на диск C, иначе он не запускается.
Для простоты управления веб-сервером nginx создадим несколько bat файлов: start.bat @ECHO OFF start c:\nginx\nginx.exe stop.bat @ECHO OFF start c:\nginx\nginx.exe -s stop reload.bat @ECHO OFF start c:\nginx\nginx.exe -s reload
После этих действий можно запустить nginx и посмотреть как он работает (естественно, что пока мы не подключили php обрабатывать его файлы nginx не сможет) Итак запускаем start.bat и идем в браузер смотреть, что получилось. Вводим в адресной строке http://localhost и получаем в ответ
Этап 3. Настройка nginx
Открываем файл конфига C:\nginx\conf\nginx.conf и заменяем его на
Code #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; } } }
Этап 4. Установка и настройка RPAF в Apache
Так как у нас обращение к Apache идет не напрямую, а через Nginx, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес сервера, на котором расположен Nginx. Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует в Apache из него REMOTE_ADDR. Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP.
Скачиваем mod_rpaf mod_rpaf.rar (2.15 Кб)
и распаковываем в папку модулей Apache (C:\AppServ\Apache2.2\modules). После этого открываем C:\AppServ\Apache2.2\conf\httpd.conf и добавляем в конец файла
Код: 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
вместо 192.168.1.26 укажите IP адрес сервера, на котором расположен Nginx. Теперь сохраняем изменения и перезапускаем Apache.
Так же желательно перенести папку C:\AppServ\Apache2.2\icons в папку C:\AppServ\www. Без этого при просмотре содержимого каталогов (опция Indexes в Apache) nginx будет пытаться загрузить несуществующие иконки для файлов.
Вот собственно и все - мы получили рабочий NginX сервер
Теперь про защиту ссылок - В конфиг nginx в блок server для нашего домена добавляем: Code location / { rewrite ^/video/(w+)/(.+)$ /get.php?hash=&filename= last; ... } location /video { internal; flv; }
А вот с самим отработчиком get.php пока касяк где то Code $hash =$_GET['hash']; $filename = $_GET['filename']; $ip = md5(getenv(”REMOTE_ADDR”).”key”); if ($hash == $ip){ $url=$_SERVER['REQUEST_URI']; $url=explode(’?',$url); $url=$url[1]; if (isset($url)){$filename .=’?’.$url;} header(”Content-Type: video/x-flv”); header(”X-Accel-Redirect:/video/”.$filename); die(); } echo “нех воровать=)”;
|
| |
| |