nginx: Исключить подпапки из SSL-шифрования

nginx: Исключить подпапки из SSL-шифрования

Я настроил свой сервер nginx следующим образом:

server {
   listen 443;
   ssl on;
   ssl_certificate /etc/ssl/certs/example.com.crt;
   ssl_certificate_key     /etc/ssl/private/example.com.key;
   server_name example.com;
   ... other things down here..
}

Как исключить каталоги из SSL? Например, в /static/tour у меня есть тур, объясняющий веб-приложение, и нет необходимости его шифровать.

ОС: Ubuntu 10.04

решение1

Думаю, вам нужно будет либо настроить другую конфигурацию сервера для прослушивания порта 80, направленного в тот же корневой каталог документов (и убедиться, что приложение принудительно использует SSL или не-SSL в зависимости от URL-адреса, к которому осуществляется доступ, чтобы пользователь не мог просто удалить «S» из HTTPS), либо использовать что-то вроде этого:http://ariejan.net/2011/10/22/автоматически-переключаться-между-ssl-и-не-ssl-с-nginx-unicorn-rails

решение2

Это невозможно. Запрос SSL зашифрован, что означает, что сервер не может даже сказать, как выглядит URI, пока не расшифрует запрос. Нет способа сообщить клиенту, что он должен отправлять запросы на определенный подкаталог, используя не-SSL протокол.

Как сказал Demelziraptor, вы можете настроить два виртуальных хоста: один с SSL на порту 443 и один без SSL на порту 80.

Вы можете легко настроить правила перезаписи таким образом, чтобы любой запрос /static/tourна виртуальном хосте SSL вызывал перенаправление на ту же страницу на виртуальном хосте без SSL и наоборот на виртуальном хосте без SSL для обратного перенаправления на виртуальный хост SSL.

Связанный контент