Застосовуйте HTTPS з mod_rewrite, включаючи проксі-SSL


9

У мене є сервер, який отримує деякий трафік від балансиру навантажувача, що закінчує SSL, і в цьому випадку він надходить як HTTP через порт 80 з a 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: обмежувачі поганого прапора

помилка.

Що потрібно для виправлення, і це найкращий підхід?

Відповіді:


16

Проблемою була пробіл після "! =":

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

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

хитро ...


Я не впевнений, що якщо SSL вивантажений, то змінна HTTPS коли-небудь буде встановлена. У будь-якому випадку в моїй ситуації це спрацювало нормально без першого тесту.
wurtel

1

Якщо у вас балансир завантаження завжди використовуйте 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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.