nginx的+ uwsgi +瓶 - 禁用自定义错误页(nginx + uwsgi + flask

2019-06-25 16:34发布

是否有可能禁用的nginx的自定义错误页 - 如果我可以称呼他们 - 以显示我的框架的异常页面?

我实在看不出我的WERKZEUG调试工具中的HTML渲染...

UPDATE

好吧,我必须做出一个非常非常简单的应用程序烧瓶的工作,我会后位:

/home/my_user/.virtualenvs/nginx-test/etc/nginx.conf

worker_processes 1;
events { worker_connections 1024; }
http {
        server {
                listen 5000;
                server_name localhost;
                access_log /home/my_user/.virtualenvs/nginx-test/lib/nginx/access.log;
                error_log /home/my_user/.virtualenvs/nginx-test/lib/nginx/error.log;

                location / {
                        include uwsgi_params;
                        uwsgi_pass unix:/tmp/uwsgi.sock;
                }
        }
}

/home/my_user/dev/nginx_test/___init___.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    raise Exception()

if __name__ == '__main__':
    app.run('0.0.0.0', debug=True)

PYTHONPATH环境变量:

$ echo $PYTHONPATH
/home/my_user/dev/

我如何运行uwsgi:

$ uwsgi -s /tmp/uwsgi.sock --module nginx_test --callable app

我如何运行nginx的:

$ nginx -c ~/.virtualenvs/nginx-test/etc/nginx.conf -p ~/.virtualenvs/nginx-test/lib/nginx/

如果我打根页面:

如果我运行nginx的手动喜欢:

python /home/my_user/dev/nginx_test/___init___.py

我会看到,而是和我想看看:

当然,我确信,当我没有引发异常,将工作,但返回的“Hello World”例如我的index()函数。

这被称为在.NET自定义错误页。 我想禁用此,让nginx的/ uwsgi通过调试器生成的HTML直接到浏览器,而不是内部服务器错误的事情。

更新2

现在,如果我改变我的瓶的应用程序,使通过调试模式:

/home/my_user/dev/nginx_test/___init___.py

from flask import Flask

app = Flask(__name__)
app.config.update(DEBUG=True)
@app.route('/')
def index():
    raise Exception()

if __name__ == '__main__':
    app.run('0.0.0.0', debug=True)

然后,我得到502错误。

但是,如果我不是引发异常:

/home/my_user/dev/nginx_test/___init___.py

from flask import Flask

app = Flask(__name__)
app.config.update(DEBUG=True)
@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    app.run('0.0.0.0', debug=True)

我得到的“Hello World”上我的浏览器时,我打的页面( HTTP://本地主机:5000 )。

Answer 1:

这种“内部服务器错误”页面不从nginx的,但是从烧瓶中。 它这样做时,调试模式是关闭的

uwsgi被导入您的代码作为一个模块,在一个脚本没有运行。 __name__ == '__main__'是假,不执行if语句。 尝试设置调试模式下,如果外部:

app = Flask(__name__)
app.debug = True

然而,强烈建议从不脱离公共互联网上的服务器上调试模式,因为用户可以在服务器上运行任何代码。 这是一个严重的安全问题。



Answer 2:

使用Flask#errorhandler在烧瓶注册自己的错误处理程序。 例如,以取代404,你会做这样的事情:

app = Flask()

@app.errorhandler(404)
def handel_404(error):
    return render_template('404.html')


Answer 3:

西蒙Sapin的真的给你正确的答案。 您需要启用调试在瓶中。 Nginx的不返回任何自定义错误页,除非你明确地配置它这样做。

如果您使用下面的代码,你会看到从烧瓶您的调试消息,通过Nginx的代理。

from flask import Flask

app = Flask(__name__)
app.debug = True

@app.route('/')
def index():
    raise Exception()

按照您的更新2.你看到一个502(坏网关),因为瓶根本就没有返回什么反应,或Nginx的不理解的响应。 A 502不与Nginx的问题。 这意味着,无论是Nginx的尝​​试交谈(你烧瓶应用在这种情况下)不正常的。

然而,在很多方面,你不应该这样做。 当你在你的本地开发计算机上运行调试烧瓶模式才会启用。 这是整点if __name__ == "__main__":行呢。



文章来源: nginx + uwsgi + flask - disabling custom error pages