Назад | Перейти на главную страницу

Nginx перезаписывает URL-адреса без перенаправления

Я использовал приведенные ниже директивы перезаписи в 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.