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