URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 8054
[ Назад ]

Исходное сообщение
"Редирект в nginx определенных файлов (js, jpg) с http на https "

Отправлено nicksonet , 07-Ноя-16 11:44 
Коллеги, добрый день!
Столкнулся с необходимостью отдавать файлы js и jpg по прямой ссылке не в зависимости от  протокола (https/https).
Редирект https -> http настроен следующим образом:
server {
# listen http and https
    listen              80;
    listen              443;

server_name  site.ru  www.site.ru;

...
if ($host != 'site.ru' ) {  rewrite ^(.*)$ http://site.ru$1 permanent; } # unknow hosts
    if ($server_port != 80 ) {  rewrite ^(.*)$ http://site.rum$1 permanent; } # https -> http
    rewrite ^/(.*)/$ /$1 permanent; # all

Коллеги, пожалуйста, как можно осуществить отдачу файлов js и jpg по прямой ссылке не в зависимости от  протокола.


Содержание

Сообщения в этом обсуждении
"Редирект в nginx определенных файлов (js, jpg) с http на https "
Отправлено PavelR , 07-Ноя-16 15:43 
как только у вас возникает желание написать в конфиге nginx условие if, знайте, вы делаете что-то неправильно.

Прочитайте документацию по директивам location и rewrite.


"Редирект в nginx определенных файлов (js, jpg) с http на https "
Отправлено nicksonet , 08-Ноя-16 13:19 
> как только у вас возникает желание написать в конфиге nginx условие if,
> знайте, вы делаете что-то неправильно.
> Прочитайте документацию по директивам location и rewrite.

Спасибо. Обязательно почитаю, но пока решил таким (multiple conditions https://gist.github.com/jrom/1760790)способом:

    # rewrites
    if ($host != 'site.ru' ) {  rewrite ^(.*)$ http://site.ru$1 permanent; } # unknow hosts

    # https -> http, but not js and images
    if ($server_port != 80) {
        set $redir Y;
    }
    if ($uri ~* \.(js|gif|png|jpg)$) {
        set $redir N;
    }
    if ($redir = Y) {
            rewrite ^(.*)$ http://site.ru$1 permanent;
    }

Все файлы с указанным расширением доступны по запрашиваемому протоколу. Может такой костыль кому-нбдь пригодится.