Дополнительно
Как заставить или редирект на SSL в nginx?
У меня есть страница регистрации на поддомене вроде: https://signup.example.com
Это должны быть доступны только через HTTPS, но я'м боишься, что люди будут как-то наткнуться на него через HTTP и получите 404.
В HTML/блок Server в nginx выглядит так:
html {
server {
listen 443;
server_name signup.example.com;
ssl on;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
ssl_session_timeout 30m;
location / {
root /path/to/my/rails/app/public;
index index.html;
passenger_enabled on;
}
}
}
Что я могу добавить так, что люди, которые ходят на http://signup.example.com
возвращается https://signup.example.com
? (FYI, я знаю, что есть рельсы плагинов, которые могут заставить протокол SSL
, но надеялся избежать этого)
221
8
Лучшим способом, как это описано в официальной инструкции с помощью "возвращение" директива:
По данным nginx и подводных камней, Это'ы немного лучше опустить ненужные захвата, а не с помощью
$request_uri
. В этом случае, добавьте знак вопроса, чтобы предотвратить nginx и от удвоения любые аргументы запроса.Это правильный и самый эффективный способ, если вы хотите сохранить все это в один блок Server:
Все остальное выше, используя, что "переписать" или "если ssl_protocol" и т. д. происходит медленнее и хуже.
Вот то же самое, но еще более эффективным, только выполнив переписать по протоколу HTTP, он избегает того, чтобы проверить $схема переменной при каждом запросе. А если серьезно, это's, такие незначительные вещи, которые вы Don'т необходимость их выделения.
Если вы используете новый двойной HTTP и HTTPS определение сервера, вы можете использовать следующее:
Это, кажется, работает для меня и это'т вызвать бесконечный цикл перенаправления.
Редактировать:
Заменены:
с Пратик'ы переписать строку.
Еще один вариант, который сохраняет заголовок Host: запрос и образом в "хорошие" и пример в nginx и подводных камней:
Вот результаты. Следует отметить, что использование
$имя_сервера
вместо$хост всегда будет редирект на
https://site1`.Убедитесь, что вы установили 'безопасной' на какие-либо cookies, либо они'll быть отправлены по HTTP-запросу и могут быть захвачены инструментом, как Firesheep.
Это работает лучше, я думаю. х.х.х.X относится к вашему серверу'ы и IP. Если вы работаете с Plesk 12, вы можете сделать это путем изменения "и с nginx.конф" и файл в папке " в файле/var/www и/виртуальных доменов/системы/домена.дву/конф" и на какой домен вы хотите. Не забудьте перезапустить служба nginx после сохранения конфигурации.
Я думаю, что это самое простое решение. Сил не https, а не www-трафик на HTTPS и только на www.
Редактирование - апреля 2018: Решение б/н, Если's можно найти в моем посте здесь: https://stackoverflow.com/a/36777526/6076984