我有一个使用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;
}
}
在我玩游戏时可以使用!应用程序已关闭,但是在运行时,它将始终提供默认的nginx页面。
我尝试将错误页面配置添加到这样的另一个服务器块中
server {
listen 443;
ssl off;
server_name example.com;
error_page [..]
}
但是由于浏览器抱怨证书错误而失败。
我真的很希望最终能够捕获并处理Play无法解决的任何错误!具有一个或多个自定义页面的应用程序。如果用户在地址栏中而不是服务器名称中手动输入站点的IP,我也希望此解决方案能够起作用。
感谢您的帮助。
答案 0 :(得分: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;
}