В nginx я пытаюсь найти лучший способ обработать перенаправление, чтобы заставить весь трафик, не относящийся к https, к https тогда и только тогда, когда трафик не находится в пути/assets/*.Многофункциональность Nginx Redirect
USE CASE: Чтобы включить javascript и css в кеширование через AWS CloudFront без необходимости связывать сертификат SSL с сервера.
Вот что я пытаюсь:
server {
listen 80;
if ($http_x_forwarded_proto = "http") {
set $redir please_redir;
}
location ~ ^/assets/|favicon.ico {
set $redir dont_redir;
root /home/deploy/www/public;
gzip_static on;
expires max;
add_header Cache-Control public;
}
if ($redir = please_redir) {
return 301 https://$http_host$request_uri;
}
location/{
proxy_pass http://127.0.0.1:9292/;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Я попытался оберточной «please_redir» в кавычках, а также, не повезло. Есть идеи? Другие приемлемые решения приветствуются. Имейте в виду, что это должен быть запрос без https, а также НЕ в/assets/path. Благодаря!
Проблема здесь в том, что все запросы поступают на порт 80 (ssl разгружается на балансировщике нагрузки). Вы можете видеть в моем коде, что я полагаюсь на http_x_forwarded_proto – Du3
Затем попробуйте переместить условие внутри '/' location (и переписать сразу, без переменных) – Vasfed