【问题标题】:How to replace Nginx default error 400 "The plain HTTP request was sent to HTTPS port" page with Play! Framework backend.如何用 Play 替换 Nginx 默认错误 400“普通 HTTP 请求已发送到 HTTPS 端口”页面!框架后端。
【发布时间】: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


【解决方案1】:

我在这里https://stackoverflow.com/a/12610382/4023897找到了答案。

在我的特殊情况下,我想在这些情况下提供静态错误页面,我的配置如下

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 = /error.html {
    root /usr/share/nginx/html;
    autoindex off;
  }

  location / {
    proxy_pass              http://my-backend;
  }

  # If they come here using HTTP, bounce them to the correct scheme
  error_page 497 https://$host:$server_port/error.html;


}

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多