Как прокси Frontend изображения в Backend изображения - PullRequest
1 голос
/ 01 апреля 2019

У меня небольшая проблема с изображениями. У меня есть сервер Front (site.com) и сервер Back (api.site.com), оба связаны хранилищем NFS для изображений. Исходные изображения хранятся на Back сервере. Фронт-сервер получил только Nginx & NodeJs Бэк-офис получил только Nginx & PHP

Когда я хочу отобразить изображение: site.com/img/path-to-img-s250x250.jpg, оно будет искать его в NFS, если оно существует, оно будет отображаться, если нет, затем получить исходное изображение, изменить его размер и сохранить его в NFS через наш PHP-скрипт на сервере API.

Правила переписывания, которые вы мне порекомендовали, будут работать, только если я хочу отображать изображения через API (api.site.com/img/path-to-img-s250x250.jpg), но мне нужно будет отображать изображения через Front (site.com/img/path-to-img-s250x250.jpg), есть ли у вас какие-либо идеи? как мне этого добиться?

# site.com/img/prods/10002/filename-w200h200-bgF00.12345.jpg
location ~ "^/img/(.*)/([a-z0-9-]+)-w([0-9]+)h([0-9]+)(-bg([0-9A-Fa-f]{3,6}))?\.[0-9]{5}\.(jpg|jpeg|png|gif|ico|webp)$" {
    try_files $uri /img/$1/$2-w$3h$4$5.$7 @redirect;
}

location @redirect {
    proxy_pass http://api.site.com;
    proxy_set_header X-ORIGIN http://api.site.com;
    proxy_set_header X-Requested-With XMLHttpRequest;
}

1 Ответ

0 голосов
/ 01 апреля 2019

Ссылаясь на ваш предыдущий вопрос ( Как проверить, существует ли файл в nginx? В противном случае запустите правило перезаписи ), вам нужно, чтобы окончательное перенаправление было внешним, а не внутренним.

Выможно достичь внешнего перенаправления, указав именованный location в качестве последнего параметра оператора try_files.

Например:

location ~ "^/img/(.*/[a-z0-9]+-[0-9]+x[0-9]+)\.[0-9]{5}\.(jpg|jpeg|png|gif|ico)$" {
    try_files $uri /img/$1.$2 @resize;
}
location @resize {
    rewrite "^/img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+)\.[0-9]{5}\.(jpg|jpeg|png|gif|ico)$" https://api.example.com/image?path=$1&file=$2&ext=$5&w=$3&h=$4 redirect;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...