Проксирование nginx

BasePelleta
На сайте с 29.05.2008
Offline
120
2560

Ув. форумчане!

Такой вопрос. Есть 2 впс, nginx+apache, nginx на франтєнде, 2 домена, 2 ip.

Структура сайтов на доменах одинаковая. Имиджи хранятся в domain1.com/files/small/

Хочу сделать так, чтобы все файлы для domain2.com/files/small/ брались nginxom в domain1.com/files/small/ , кэшировались на domain2.com и браузеру отдавались по пути domain2.com/files/small/

Конфиг nginxa такой

server {

listen ip2:80;
server_name domain2.com www.domain2.com;
rewrite ^(/manager/.*)$ https://$host$1 permanent;
rewrite ^(/manager/.*)$ https://$host$1 permanent;
error_page 404 = @fallback;

# Кешировать указанные коды ответов 5 минут
proxy_cache_valid 200 301 302 304 5m;
# Ключ по которому сохраняются и берутся данные из кеша
proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
# Защита от раздачи одинаковой куки в кешированном ответе
proxy_hide_header "Set-Cookie";
# Игнорировать параметры кеша заданные бекэндом
proxy_ignore_headers "Cache-Control" "Expires";

# Указывает в каких случаях клиенту можно отдать несвежий ответ из кеша
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;

# активировать зону кеширования pagecache
proxy_cache pagecache;

location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass http://ip2:8080;
proxy_redirect http://domain2.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

location / {
proxy_pass http://ip2:8080;
proxy_redirect http://domain2.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
root /var/www/rushosting/data/www/domain2.com;
access_log /var/www/httpd-logs/domain2.com.access.log ;
access_log /var/www/nginx-logs/rushosting isp;
}

location /files/small/ {
proxy_pass http://ip1:8080;
proxy_redirect http://domain1.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

location @fallback {
proxy_pass http://ip2:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}

Искомая секция

location /files/small/ {

proxy_pass http://ip1:8080;

proxy_redirect http://domain1.com:8080/ /;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

}

Рестартую нгинкс, ответ на запрос изображения пишет file not found!

Смотрю логи nginx

2011/01/07 19:19:26 [error] 26454#0: *8412 open() "/var/www/data/www/domain2.com/files/small/item_5562.jpg" failed (2: No such file or directory), client: 91.211.248.143, server: domain2.com, request: "GET /files/small/item_5562.jpg HTTP/1.1", host: "domain2.com"

2011/01/07 19:19:27 [error] 26454#0: *8378 open() "/var/www/data/www/domain2.com/files/small/item_3655.jpg" failed (2: No such file or directory), client: 91.211.248.143, server: domain2.com, request: "GET /files/small/item_3655.jpg HTTP/1.1", host: "domain2.com"

R
На сайте с 14.02.2010
Offline
77
#1

там какая-то статика как я понял, в этом /files/small ?

тогда так:

location бла-бла {

alias /нужный/путь/;

try_files $uri =404;

}

а то получается что вы отдаете тупо backend-у запрос, а он же ничего не знает о ваших надобностях..

-------

упс, не все прочел. впс-а же 2...

ну тогда попробуйте proxy_set_header Host domain1.com, а то у вас в хидерах же domain2 передается к backend-у domain1

BasePelleta
На сайте с 29.05.2008
Offline
120
#2

location /files/small/ {

proxy_set_header http://domain1.com $host;

alias /files/small/;

try_files $uri =404;

}

Не сработало!

BasePelleta добавил 07.01.2011 в 22:21

На domain1.com 8080 порт апачем занят!

R
На сайте с 14.02.2010
Offline
77
#3

вот так кажется -


location /files/small/ {
proxy_pass http://domain1.com;
proxy_redirect http://domain1.com/ /;
proxy_set_header Host domain1.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

ну и кэширование стандартно сюда...

BasePelleta
На сайте с 29.05.2008
Offline
120
#4

Не заработало!

[Fri Jan 07 22:27:47 2011] [error] [client 91.211.249.68] File does not exist: /var/www/data/www/domain2.com/files/small/item_634.jpg, referer: http://domain2.com/

[Fri Jan 07 22:27:47 2011] [error] [client 91.211.249.68] File does not exist: /var/www/data/www/domain2.com/files/small/item_3862.jpg, referer: http://domain2.com/

[Fri Jan 07 22:27:47 2011] [error] [client 91.211.249.68] File does not exist: /var/www/data/www/domain2.com/files/small/item_646.jpg, referer: http://domain2.com/

[Fri Jan 07 22:27:48 2011] [error] [client 91.211.249.68] File does not exist: /var/www/data/www/domain2.com/files/small/item_4694.gif, referer: http://domain2.com/

BasePelleta добавил 07.01.2011 в 23:51

Работающий вариант!

location ~ /files/small/ {

proxy_pass http://ip1;

proxy_redirect http://domain1.com/ /;

proxy_set_header Host domain1.com;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

}

И в конфиге выше секцией!

Спасибо r0mik !

D
На сайте с 11.05.2010
Offline
15
#5

И зачем проксировать статику то ? не проще ли директорию указать откуда ее брать? Например:

location ~ /files/small/ {
root /var/www/rushosting/data/www/domain1.com/files/small/;
}
С напильником и бубном (http://kaba.org.ua)
R
На сайте с 14.02.2010
Offline
77
#6

она на другом сервере

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий