승객 / nginx 뒤에서 Sinatra 앱을 실행하고 있습니다. http 및 https 호출에 모두 응답하도록 노력하고 있습니다. 문제는 둘 다 서버 블록에 정의되어있을 때 https 호출이 정상적으로 응답되지만 http가 400 "일반 HTTP 요청이 HTTPS 포트로 전송되었습니다"오류를 생성한다는 것입니다. 이것은 정적 페이지 용이므로 Sinatra가 이것과 아무 관련이 없다고 생각합니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
다음은 서버 블록입니다.
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;
NGINX에 SSL을 통해 모든 콘텐츠 를 서버에 알립니다 . listen 443;
예를 들어 listen 443 ssl;
서버가 http 및 https 트래픽을 모두 제공하는 경우 끝에 "ssl"플래그를 사용 하고 ssl on;
지시문을 제거하십시오 .
my.example.com:443
작동하지 않았습니다. 대신https://my.example.com
작동 하도록 변경하십시오 . 이상하게도 아파치에이 문제가 없었습니다.