Nginx как прокси на удаленный хост?

Стартовый конфиг:

server {

listen 80;

server_name 127.0.0.1;

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

error_log /var/log/nginx/transition.error.log;

root /var/www/transition;

location / {



proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $http_host;

proxy_set_header X-NginX-Proxy true;

proxy_passhttp://node;

proxy_redirect off;

port_in_redirect off;

}

}

upstream node {

server 192.168.21.158:8090;

}


Конечный

server {

listen 8090;

server_name ololo.ru

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

error_log /var/log/nginx/transition.error.log;

root /var/www/transition;



location / {

include mime.types;

try_files $uri $uri/ /index.html;

index index.php;

rewrite ^/login /login.php last;

rewrite ^/id /id/index.php last;

rewrite ^/uid/([a-z0-9]+)/([0-9]+)-([0-9]+)-([0-9]+)/?$ /enter.php?uid=$1&inn=$2&kpp=$3&finn=$4 last;

rewrite ^/docview/(.*)$ /docview.php?hash=$1 last;

rewrite ^/(.*)$ /index.php?url=$1&$args last;

}



location ~ \.php$ {

try_files $uri @cakephp;

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /var/www/transition$fastcgi_script_name;

fastcgi_pass unix:/var/run/php5-fpm.sock;

include /etc/nginx/fastcgi_params;

}

location ~* \.(js|jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|xml|docx|xlsx|txt)$ {

root /var/www/transition;

if ($request_uri ~ "^/ajaxtemp/(.*)$") {

rewrite ^/ajaxtemp/(.*)$ /ajaxtemp/rewriter.php?filename=$1;

}

if ($request_uri ~ "^/admin/(.+)$") {

rewrite ^/admin(.*)$ /admin/app/webroot$1;

break;

}

}



}




Если проксировать на этот же хост — работает. Если на указанный в конфиге — 502.

В access на удаленном пишется:

«GET / HTTP/1.0» 499 0 "
Все.

nginx/1.2.1 — на обоих хостах. Причем, если указать ya.ru для бэкенда — проксирует.

Ночь уже. Может, я чего-то не заметил?
  • Вопрос задан
  • 53406 просмотров
Пригласить эксперта
Ответы на вопрос 2
alekciy
@alekciy
Вёбных дел мастер
Если проксировать на этот же хост — работает. Если на указанный в конфиге — 502.

server_name 127.0.0.1;

Не нужно использовать IP адрес как имя сервера. Следует использовать имена, причем не обязательно существующие. Главное что бы они были в hosts файлах на обоих машинах.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
А второе:
«GET / HTTP/1.0» 499 0 "

явно указывает на причину проблемы. Стартовый nginx закрыл соединение не дождавшийсь ответа от конечного. Нужно просто поднимать таймауты соединений (таких как proxy_send_timeout, proxy_read_timeout и прочие).

Кстати, для дебага очень полезно использовать htop и strace (в htop-е выбрать рабочий процесс nginx-а и нажать S).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы