我有一个在nginx 1.2.0和乘客3.0.7上运行的Rails应用程序。我想在应用程序中发生相应的http错误时显示rails应用程序中的自定义错误页面(例如/rail_app/public/500.html)。
这是我当前的nginx配置文件:
http {
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7;
passenger_ruby /usr/bin/ruby;
include mime.types;
default_type application/octet-stream;
#access_log /opt/nginx/logs/access.log main;
sendfile on;
#tcp_nopush on;
server {
listen 80;
server_name localhost;
root /var/www/dashboard/current/public;
passenger_enabled on;
passenger_min_instances 1;
# listen 443;
# ssl on;
# ssl_certificate /opt/nginx/conf/server.crt;
# ssl_certificate_key /opt/nginx/conf/server.key;
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/dashboard/current/public/;
}
}
}
此配置不显示rails app客户错误页面,而只是将http错误状态代码发送到客户端。
任何人都知道让nginx / passenger将rails应用程序自定义错误页面发送到客户端并使用http错误状态代码需要什么?
答案 0 :(得分:1)
请尝试以下方法:
# We use the x just because it is for all 5xx errors.
error_page 500 502 503 504 /5xx.html;
location = /5xx.html {
alias /var/www/dashboard/current/public/;
}
重新配置root
指令毫无意义,因为它已经设置为您之前指定的路径。 alias
确保特定位置在内部与文件系统上的其他位置匹配。所有传入的请求参数都应该传递,如果您的Rails应用程序正在处理事情,它应该回答。只需确保你的Rails应用程序没有再次回复500状态(我不知道会发生什么)。
相关链接
答案 1 :(得分:1)
您的nginx配置中可能缺少passenger_intercept_errors on;
有关此更多信息,请参阅passenger docs此指令
答案 2 :(得分:0)
我使用的配置:
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}