我目前基本陷入了困境。我有一个网站,在 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 证书。