【发布时间】:2019-03-05 11:51:53
【问题描述】:
我有一个使用 Play 的网站!具有多个域代理到后端的框架,example.com 和 example.ca。
我将端口 80 上的所有 http 请求重写为端口 443 上的 https。这一切都按预期工作。
但是当我在地址栏输入 http://example.com:443 时,我会看到 nginx 的默认错误页面,上面写着
400 Bad Request
The plain HTTP request was sent to HTTPS port
nginx
我想为此提供我自己的错误页面,但我似乎无法让它工作。这是我的配置片段。
upstream my-backend {
server 127.0.0.1:9000;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
keepalive_timeout 70;
server_name example.com;
add_header Strict-Transport-Security max-age=15768000; #six months
location / {
proxy_pass http://my-backend;
}
error_page 400 502 error.html;
location = /error.html {
root /usr/share/nginx/html;
}
}
当我的 Play!应用程序已关闭,但当它运行时,它总是提供默认的 nginx 页面。
我已经尝试像这样将错误页面配置添加到另一个服务器块
server {
listen 443;
ssl off;
server_name example.com;
error_page [..]
}
但是由于浏览器抱怨证书错误而失败。
我真的很想最终能够捕捉和处理我的 Play 无法处理的任何错误!具有自定义页面或页面的应用程序。如果用户在地址栏中手动输入站点的 IP 而不是服务器名称,我也希望此解决方案能够正常工作。
感谢任何帮助。
【问题讨论】:
-
可能重复:Nginx error pages not working:
"You may need to add proxy_intercept_errors on; alongside your proxy_pass.."。另见nginx: error_page directive is silently ignored -
我也看到了这些页面。不幸的是,proxy_intercept_errors 对我不起作用,第二个链接也不能解决我的特殊情况,因为我没有明确抛出错误 400 页面。它被 nginx 作为默认响应抛出某处。
标签: nginx playframework