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

Принудительно использовать HTTPS с помощью mod_rewrite, включая проксированный SSL

У меня есть сервер, получающий некоторый трафик от оконечного балансировщика нагрузки SSL - и в этом случае он поступает как HTTP через порт 80 с http_x_forwarded_proto = "https"

Мне нужно правило mod_rewrite, которое разрешает только прямой HTTPS-трафик или перенаправленный HTTPS-трафик.

У меня пока есть это:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:http_x_forwarded_proto} != https
RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

но я получаю

RewriteCond: плохие разделители флагов

ошибка.

Что мне нужно исправить, чтобы это работало, и это лучший подход?

Проблема заключалась в пробеле после символа "! =":

Рабочая версия:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

сложно ...

Если у вас есть балансировщик нагрузки, который всегда использует SSL при связи с сервером, вам нужно пропустить первую проверку, так как она всегда будет верной. (Если вы разгружаете SSL на балансировщике нагрузки, первая строка всегда истинна, если кому-то не удастся напрямую попасть на ваш сервер с помощью SSL, и в этом случае это будет ложно и не будет пытаться перенаправить, поскольку X-Forwarded-Proto будет отсутствовать.)

Код, который я использую, поскольку мы всегда обмениваемся данными по SSL между ELB и веб-сервером:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]