'Flask SERVER_NAME setting best pratices
Since my app has background tasks, I use the Flask context. For the context to work, the Flask setting SERVER_NAME
should be set.
When the SERVER_NAME
is set the incoming requests are checked to match this value or the route isn't found. When placing an nginx (or other webserver in front), the SERVER_NAME
should also include the port and the reverse proxy should handle the rewrite stuff, hiding the port number from the outside world (which it does).
For session cookies to work in modern browsers, the URL name passed by the proxy should be the same as the SERVER_NAME
, otherwise the browser refuses to send the cookies. This can be solved by adding the official hostname
in the /etc/hosts
and setting it to 127.0.0.1
.
There is one thing that I haven't figured out yet and it is the URL in the background tasks. url_for()
is used with the _external
option to generate URLs in the mail it sends out. But that URL includes the port, which is different from the 443
port used by my nginx instance.
Removing the port from the SERVER_NAME
makes the stuff described in the first paragraph fail.
So what are my best options for handling the url_for
in the mail. Create a separate config setting? Create my own url_for
?
Solution 1:[1]
You should use url_for(location, _external=True)
or include proxy_params
if you use nginx.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Christopher Peisert |