NginX 在充当 sinatra 应用程序的 SSL 反向代理时丢弃会话数据

NginX 在充当 sinatra 应用程序的 SSL 反向代理时丢弃会话数据

我目前基本陷入了困境。我有一个网站,在 Mizuno(我认为是 Jetty 的一个变种)上使用 Padrino(sinatra 的一个变种)在端口 8080 上提供服务,Nginx 在 80/443 上监听,以允许 SSL 代理。

该网站有一个登录墙,用户登录后会接受挑战,然后才被允许访问该网站。每当我直接通过端口 8080 访问它时,一切都按预期工作,但是,当我通过 Nginx 时,我只能到达挑战页面。每当我尝试发布对挑战的回应时,它都会将我踢回登录页面。

编辑:此外,当我登录时,应用程序确实正确地登录了我。如果我尝试通过端口 8080 直接访问下一页,在通过 nginx 踢出后,它会允许访问。

我的 nginx 配置如下

server {
    listen 443;
    server_name secure.website.io;
    ssl_certificate ssl-bundle.crt;
    ssl_certificate_key website.key;
    ssl on;
    ssl_session_timeout 5m;
    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
    ssl_prefer_server_ciphers on;
    location / {
            proxy_redirect  off;
            proxy_set_header Host $http_host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy  true;
            client_max_body_size   10m;
            client_body_buffer_size        128k;
            proxy_connect_timeout  90;
            proxy_send_timeout     90;
            proxy_read_timeout     90;
            proxy_buffer_size      4k;
            proxy_buffers  4 32k;
            proxy_busy_buffers_size        64k;
            proxy_temp_file_write_size     64k;
            proxy_pass      http://127.0.0.1:8080;
    }
}
server {
    listen  80;
    server_name     secure.website.io;
    rewrite ^       https://$server_name$request_uri? permanent;
}

我这里遗漏了什么吗?

答案1

我找到了一个解决方法。通过将 Mizuno 换成 Phusion Passenger,我能够完全从组合中删除 nginx,并使用 Passenger 的配置选项提供 SSL 证书。

相关内容