如何使用 Nginx 提供 Flask 静态文件?
Posted
技术标签:
【中文标题】如何使用 Nginx 提供 Flask 静态文件?【英文标题】:How to serve Flask static files using Nginx? 【发布时间】:2015-10-19 08:32:01 【问题描述】:我有一个具有这种结构的网络应用程序:
|
|__ static
|__style.less
|__images
|__ myapp.py
|__ wsgi.py
我已经设法使用 nginx 和 wsgi 运行 Web 应用程序,但问题是没有提供静态文件,我的意思是,当我转到它们的 URL 时,服务器找不到它们。它给了我 404。
这是我的 nginx 配置文件部分:
server
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/public_html;
index index.php index.html index.htm;
server_name xxxxxxx.com;
location /
try_files $uri $uri/ =404;
location /myapp
include uwsgi_params;
uwsgi_pass unix:/var/www/public_html/myapp/myapp.sock;
有什么遗漏吗?
【问题讨论】:
【参考方案1】:来自How to Configure NGINX for a Flask Web Application
我发现这个解决方案更好:
location /static
alias /<path to project>/static;
当然,将<path to project>
替换为您的项目目录。
请注意,在此解决方案中,static
包含在路径中!这对安全性非常有好处!降低了意外提供应用程序源文件的风险。默认情况下,flask 将源文件放在<path to project>
中,配置中的一个小错误可能会使这些源文件对攻击者可见。
【讨论】:
Jason,这不太安全,容易受到别名遍历攻击。见github.com/yandex/gixy/blob/master/docs/en/plugins/…【参考方案2】:将此添加到您的 nginx 配置中
location ^~ /static/
include /etc/nginx/mime.types;
root /project_path/;
将/project_path/
替换为您的应用的绝对路径,您应该注意它不包含静态目录,并且/project_path/static/
中的所有内容都将在网址/static/
.
【讨论】:
谢谢您,您的代码有效,但现在我看到模板在网站上不起作用(它只是向我展示了我一直创建的 404.html 模板,并且没有'不要使用templates
目录中的其他模板。
只要确定模板是否在静态文件夹中
nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/…
@JohnMagistr 不建议在每个位置块中添加根,但您可以使用根在位置内覆盖服务器根,这没关系。
^~ 有什么作用?以上是关于如何使用 Nginx 提供 Flask 静态文件?的主要内容,如果未能解决你的问题,请参考以下文章
网站后端_Python+Flask.0009.FLASK静态资源之默认及自定义资源目录?