Nginx переписать URL-адреса без перенаправления
Я использовал директивы перезаписи ниже в nginx, чтобы переписать URL-адреса статических файлов на внешний сервер CDN.
rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ http://cdn.domain.com/$1_$2 last;
Это работает, но он автоматически перенаправляет URL в браузерах.
Как я могу сделать вышеупомянутое переписывание без перенаправлений?
3 ответа
Вам нужно изменить ссылки внутри приложения, чтобы они указывали на CDN для статических включений.
Когда вы переписываете в местоположение http, nginx ничего не может сделать, кроме как перенаправить браузер (поскольку CDN находится за пределами nginx, и браузер должен получать файлы из CDN). У вас будет такая же проблема с Apache или любым другим перезаписчиком URL, так как CDN не является "внутренним" местом для веб-сервера.
Одним из вариантов может быть модуль замены nginx, который может заменять контент по мере его доставки. Но это не обрабатывает регулярные выражения и замедляет каждый запрос. Лучше просто изменить HTML-код вашего приложения для прямой ссылки на URL-адреса CDN.
nginx чувствителен к регистру (функция или ошибка), используйте HTTP:// вместо http:// например:
rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ HTTP://cdn.domain.com/$1_$2 last;
но запрос будет отправлен на сервер proxy_pass, и он работает, только если сервер в proxy_pass также является веб-прокси-сервером, который понимает
GET HTTP://cdn.domain.com/ HTTP/1.0
Если вы хотите скрыть URL внешнего сервера CDN, вы должны найти CDN с поддержкой псевдонимов. Затем укажите свой поддомен (cdn.yourdomain.com) на CDN.