Я запускаю приложение Sinatra за пассажиром / nginx. Я пытаюсь заставить его отвечать как на вызовы http, так и на https. Проблема в том, что когда оба они определены в блоке сервера, на https-вызовы отвечают нормально, но http выдает ошибку 400 «Простой HTTP-запрос был отправлен на HTTPS-порт». Это статическая страница, поэтому я предполагаю, что Синатра не имеет к этому никакого отношения. Есть какие нибудь идеи как это починить?
Вот блок сервера:
server {
listen 80;
listen 443 ssl;
server_name localhost;
root /home/myhome/app/public;
passenger_enabled on;
ssl on;
ssl_certificate /opt/nginx/ssl_keys/ssl.crt;
ssl_certificate_key /opt/nginx/ssl_keys/ssl.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
location /static {
root /home/myhome/app/public;
index index.html index.htm index.php;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 /500.html;
access_log /home/myhome/app/logs/access.log;
error_log /home/myhome/app/logs/error.log;
}
my.example.com:443
не работал. Измените это вместо того, чтобыhttps://my.example.com
работать. Странно, никогда не было такой проблемы с apache.ssl on;
сообщает NGINX серверу ЛЮБОГО контента через SSL. Используйте флаг «ssl» в конце вашего,listen 443;
например,listen 443 ssl;
если ваш сервер доставляет трафик как http, так и https, и удалитеssl on;
директиву.Ответы:
Я столкнулся с подобной проблемой. Он работает на одном сервере и не работает на другом сервере с той же конфигурацией Nginx. Нашел решение, на которое отвечает Игорь здесь http://forum.nginx.org/read.php?2,1612,1627#msg-1627
Да. Или вы можете объединить серверы SSL / без SSL на одном сервере:
источник
ssl off;
ssl on;
(нет необходимости добавлять ssl off). Кроме того , так как я не помню , какую версию Nginx, там больше нет необходимости в использованииdefault
наlisten 443
линии. Итак, конфигурация OP была в порядке, нужно только удалить,ssl on
и она должна работать.ssl on
. Ответ @ MichaelJ.Evans ниже - гораздо лучшее решение.Вышеупомянутые ответы неверны, поскольку большинство из них переопределяют тест «Это соединение HTTPS», чтобы разрешить обслуживание страниц через http независимо от безопасности соединения.
Безопасный ответ с использованием страницы ошибки в коде ошибки http 4xx, специфичном для NGINX, для перенаправления клиента на повторный запрос на https. (как указано здесь /server/338700/redirect-http-mydomain-com12345-to-https-mydomain-com12345-in-nginx )
OP должен использовать:
источник
nginx['custom_gitlab_server_config'] = "error_page 497 https://$host:$server_port$request_uri;"
сделал трюкОшибка говорит сама за себя. Ваша конфигурация указывает Nginx прослушивать порт 80 (HTTP) и использовать SSL. Когда вы указываете в браузере
http://localhost
, он пытается подключиться через HTTP. Поскольку Nginx ожидает SSL, он сообщает об ошибке.Решение очень простое. Вам понадобится два
server
раздела:источник
У меня была точно такая же проблема, у меня такая же конфигурация, как у вашего примера, и я получил ее, удалив строку:
ssl on;
Процитирую документ:
источник
Согласно статье в Википедии о кодах состояния . Nginx имеет собственный код ошибки при отправке HTTP-трафика на порт https (код ошибки 497)
И согласно документации nginx на error_page , вы можете определить URI, который будет отображаться для конкретной ошибки.
Таким образом, мы можем создать uri, на который будут отправляться клиенты при возникновении кода ошибки 497.
nginx.conf
Однако, если клиент делает запрос любым другим методом, кроме GET, этот запрос будет преобразован в GET. Таким образом, чтобы сохранить метод запроса, через который пришел клиент; мы используем перенаправления для обработки ошибок, как показано в документации nginx на error_page
И поэтому мы используем
301 =307
редирект.Используя показанный здесь файл nginx.conf, мы можем прослушивать http и https на одном и том же порту.
источник
Вот пример настройки HTTP и HTTPS в одном блоке конфигурации с поддержкой ipv6 . Конфигурация протестирована в Ubuntu Server и NGINX / 1.4.6, но она должна работать со всеми серверами.
Не включайте,
ssl on
что может вызвать400
ошибку. Конфигурация выше должна работать дляНадеюсь это поможет!
источник
при использовании phpmyadmin добавить: fastcgi_param HTTPS on;
источник
На самом деле это можно сделать с помощью:
Это решило мою проблему с использованием nginxvhosts; теперь я могу использовать как SSL, так и простой HTTP. Работает даже с комбинированными портами.
источник