Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

четверг, 8 марта 2012 г.

Nginx. Проксирование запросов.

Потребовалось иметь хост, который проксирует запросы к разным версиям сайта.
Например, мы делаем запрос http://mysiteproxy/index/action1 и выдается страница с
http://site1/index/action1, а если делаем запрос http://mysiteproxy/index/action2 -
получаем http://site2/index/action2. Что-то вроде этого. Пример для ubuntu.

Настраиваем nginx и apache2.

Apache будет слушать порт 8080.
$ sudo nano /etc/apache2/ports.conf

...
NameVirtualHost *:8080
Listen 8080
...
Настриваем проксирование запросов к apache. Создаем файл
/etc/nginx/conf.d/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;
client_header_buffer_size 64k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size   16k;
proxy_buffers       32   16k;
proxy_busy_buffers_size 64k;
Редактируем настройки хоста по-умолчанию /etc/nginx/sites-available/default.
Все запросы шлем на localhost:8080, по-умолчанию nginx висит на порту 80. Не забываем потом поместить конфиг. файл в sites-enabled. Я обычно делаю ссылку.
server {
     #listen   80; ## listen for ipv4; this line is default and implied
     #listen   [::]:80 default ipv6only=on; ## listen for ipv6

     root /usr/share/nginx/www;
     index index.html index.htm;

     # Make site accessible from http://localhost/
     server_name localhost;

     location / {
         # First attempt to serve request as file, then
         # as directory, then fall back to index.html
         try_files $uri $uri/ /index.html;
  
         proxy_pass http://127.0.0.1:8080;
     }
}

Перезапускаем сервера
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart

Настраиваем хост-прокси

Создаем конфигурационный файл хоста
sudo nano /etc/nginx/sites-avaliable/mysiteproxy.conf

server {
        listen   80;
        server_name  mysiteproxy;

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

        location = / {
               include         /etc/nginx/site1.proxy.conf;
        }

        location / {
               include         /etc/nginx/site2.proxy.conf;
        }

        location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
               root /var/www/site1/;
        }
}
Тут директивы location указывают как будут проксироваться запросы (подробно в документации nginx).
В данном случае главная будет с site1, внутренние страницы - site2.
Создаем два файла конфигурации прокси
sudo nano /etc/nginx/site1.proxy.conf


proxy_pass       http://127.0.0.1:8080/;
proxy_set_header        Host            site1;

proxy_redirect          http://site1/  /;
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_buffers           32 4k;
Аналогично для второго хоста.
Перезапускаем nginx
sudo /etc/init.d/nginx restart
Если не настраиваем DNS, то прописываем хосты в /etc/hosts.

Комментариев нет:

Отправить комментарий