nginx + uwsgi + flask - disabling custom error pages
Question: Is it possible to disable nginx's custom error pages - if I may call them that
- to display my framework's exception pages?

I can't really see my werkzeug debugger tool rendered in html...

**UPDATE**

OK, I got to make a very very simple flask application to work and I'll post
the bits:

**/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 environment variable:

    
    
    $ echo $PYTHONPATH
    /home/my_user/dev/
    

How I run uwsgi:

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

How I run nginx:

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

If I hit the root page:

![server error](http://i.stack.imgur.com/fHGhc.png)

If I run nginx manually like:

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

I will see instead, and what I want to see:

![enter image description here](http://i.stack.imgur.com/ijkqD.png)

Of course I made sure it would work when I didn't raise the exception, but
returned 'Hello World' for example on my index() function.

This is referred to custom error pages in .NET. I want to disable this and let
nginx/uwsgi pass the html generated by the debugger directly to the browser
instead of the internal server error thing.

**UPDATE 2**

Now if I change my flask app to enable debugging mode by:

**/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)
    

Then I get 502 error.

But if I instead of raise Exception:

**/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)
    

I get 'Hello World' on my browser when I hit the page (http://localhost:5000).


Answer: This "Internal Server Error" page is not from nginx but from Flask. It does so
**when debug mode is off**.

uwsgi is importing your code as a module, not running at as a script.
`__name__ == '__main__'` is False and the if statement is not executed. Try
setting debug mode outside of the if:

    
    
    app = Flask(__name__)
    app.debug = True
    

However, it is strongly recommended to **never** leave the debug mode on a
server on the public internet, since the user can make the server run any
code. This is a serious security issue.

