Używam aplikacji Sinatra za pasażerem / nginx. Próbuję sprawić, by odpowiadał zarówno na połączenia http, jak i https. Problem polega na tym, że gdy oba są zdefiniowane w bloku serwera, na wywołania https odpowiadają normalnie, ale http daje błąd 400 „Zwykłe żądanie HTTP zostało wysłane do portu HTTPS”. To jest dla statycznej strony, więc zgaduję, że Sinatra nie ma z tym nic wspólnego. Jakieś pomysły, jak to naprawić?
Oto blok serwera:
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;
}
ssl on;
mówi do serwera nginx JAKICHKOLWIEK treści poprzez SSL. Użyj flagi "ssl" na końcu twojego, listen 443;
np. listen 443 ssl;
Jeśli twój serwer dostarcza zarówno ruch http, jak i https, i usuń ssl on;
dyrektywę.
my.example.com:443
nie działał. Zmiana tego zamiasthttps://my.example.com
działać. Dziwne, nigdy nie miałem tego problemu z apache.