我在SO中尝试了其他答案,例如:
Return custom 403 error page with nginx
nginx + uwsgi + flask - disabling custom error pages
nginx not serving my error_page
和
参考:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors
http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page
但仍然无法返回自定义错误页面-nginx不断返回其自己的页面。
flask在本地环境中工作,返回自定义html页面。
在nginx中发布时,不再可用。
这就是我想要的:
如果用户点击/js/
,则路由将返回403
,同时允许访问内部文件/js/myJS.js
如果/js/myJS.js文件不存在,则返回404
如果出现问题,请在烧瓶中说出API破裂(不应:))>返回500
我的烧瓶配置如下:
@application.errorhandler(404)
def error_404(e):
application.logger.error('Page Not Found: %s', (request.path))
#return render_template('404.html'), 404
return render_template("404.html", error = str(e)), 404
// other errors are handled similarly
和404.html
模板位于var/www/mysite/templates
文件夹中。
错误页面是静态文件,烧瓶不是HTML模板提供的资产。
现在,在我的 nginx配置中,我正在处理以下错误:
root var/www/mysite;
# update: tried to handle custom errors with proxy_intercept_errors on;
# still no success
proxy_intercept_errors on;
# static is the directory that serve the subdirectory /js
# HOW COULD I RETURN 403 if /js is hit directly, but not /js/myfile.js ?
# I tried to add deny all and allow only my server up, but did not worked out
location /static {
expires 1M;
alias /var/www/mysite/static;
access_log off;
add_header Cache-Control "public";
allow #myserverip;
deny all;
}
error_page 403 /403.html;
location = /403.html {
root /var/www/mysite/templates/;
internal;
}
error_page 404 /404.html;
location = /404.html {
root /var/www/mysite/templates/;
# internal;
allow all;
}
# also with the following no success: nginx white internal page is still displayed
error_page 404 http://example.com/404.html;
我试图设置内部或注释掉;我尝试设置允许全部(如上述答案中的答案),无论如何,nginx都将返回其自定义页面404-而不是从我的模板文件夹中。
我还尝试设置一个备用文件夹,例如:
## Fallback Directory
location @error {
root /var/www/error;
}
但仍然没有成功-总是来自nginx的白色404页面。
我的配置有什么问题?
我想更好地了解flask和nginx如何对话以发现错误。
我了解到,一旦发布,nginx将处理该错误-但不了解在flask和nginx之间如何处理所引发的错误:当用户点击“错误”资源的路由时会发生什么?是Nginx拦截了它吗?是烧瓶吗?是uwsgi吗?他们如何传球?
此外,请分享一个提示: 我如何在Nginx中查询错误页面,例如用于测试错误请求403和500?