uwsgi+flask+nginx部署静态资源加载不出来

提出问题

在我部署flask项目至服务器中,准备用uwsgi+Nginx代理时发现一个现象很折磨人:你在服务器运行flask run或者是flask run --host 0.0.0.0时,项目里是已经没有有问题的了,但你在配置好uwsgi.ini与创建了uwsgi相关配置文件之后,使用了uwsgi --ini uwsgi.ini ,又在nginx配置代理文件中使用了
location / {
    include uwsgi_params;
    uwsgi_pass unix:项目/uwsgi/uwsgi.sock;
}
准备的万无一失之后,就会发现原本能成功运行的网站项目在经过代理之后其CSS、JS等静态文件没有对网站进行渲染,还有些图片也加载不出来(当时最折磨的就是,我放在同一路径下的图片,为啥有的能够加载出来有的却不行),我寻了整整一天,还是没能找到能够解决我的问题的方法。网上的解决办法五花八门,到现在我都还清晰的记得有这些(这些方法对我来说都没有用):

提出没有丝毫作用的解决办法

  1. 修改Nginx配置文件

在配置文件中添加下面这个:

location /static {
     alias /home/sydney/ecocathlon/static; # alias 后面指的是静态文件的绝对路径
}

或:

location /static {
     root /home/sydney/ecocathlon;# root 后面指的是静态文件的绝对路径的上一级
 }

这两种是一样的,运行之后效果相同。

  1. 或是在给flask应用命名时给定static的静态路径

app = Flask(__name__,static_url_path='路径',static_folder="路径")

具体是什么路径可以自己去搜

3、修改nginx.conf

在nginx.conf 文件http里面将配置#include /etc/nginx/mime.types;前的#去掉

首先如何找到nginx.conf 文件

find / -name nginx.conf

得到路径后直接cd过去

但我最后发现我的nginx.conf文件中的mine.types只有一行,而且没有#,所以说这个解决办法真的很鸡肋。

真正实用的解决办法——终极

我尝试过很多方法,妄图找到解决办法,网上也没有很彻底的解决办法,前一天晚上0点,我都还在比较能加载出来的图片与不能加载出来的路径,能加载出来就是能加载出来,不能加载出来就直接给你个404,那天晚上我找解决办法找到1点,没找到,痛苦入睡——为什么网上没有人彻底的说明这个问题啊,直到第二天早上我八点起来,我想着既然部署不出来,那就算了吧,把以前的项目布置回去,正当我布置回去,修改完项目目录之后,也就是下面这两个。
我就在那改目录改着玩,看看会发生什么,结果发现,在我修改的那几次中,也出现了没加载静态文件的情况,心想着不应该啊,明明之前都可以加载出来,后来我就突然悟了,这个网站目录是用来给访问路径权限的。我将网站目录设置成static的上一级目录后网站静态文件全部都能加载出来了。

总结

当你的static所属路径不在你的项目路径的子路径的时候(像我的一样):

你部署网站也会下意识的将网站目录设置成你的项目所在路径,这就会导致你代理之后的网站没有权限访问static文件夹,也就会发生部分静态文件加载不出来的情况(为什么部分能加载出来这个问题我也不清楚),反正把你的这个网站目录改成static的上一级目录就对了

上述3种方法未成功解决说明

1、2两种方法:在app应用出生的那个文件夹,就已经默认了templates与static路径,只要你老老实实把他们两个放在app.root_path同级目录中,flask静态文件就绝不会出问题,也就不需要修改任何参数了,而且都说了是flask部署时没有问题,nginx代理时出问题了,说明静态文件路径是不用特地注明了,关键点也不在这。

3我不想说,除了有人会在某些项目中将那行给注释掉,不然这文件里的那行本来就没有#,所以不要自己手贱去把默认文件给注释了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uWSGINginx是一种常见的Flask应用程序部署组合。uWSGI是一种Web服务器,它可以在后台运行Python应用程序,并提供了许多高级功能,如负均衡、缓存、网关接口等。Nginx是一种反向代理服务器,它可以将传入的请求转发给uWSGI服务器,并负责处理静态文件、SSL密等。 下面是一些简单的步骤,可以帮助你使用uWSGINginx部署Flask应用程序: 1. 安装uWSGINginx 在Linux系统上,你可以使用包管理器来安装uWSGINginx。例如,在Ubuntu上,你可以运行以下命令: ``` sudo apt-get update sudo apt-get install nginx uwsgi uwsgi-plugin-python3 ``` 2. 创建Flask应用程序 在你的项目目录中创建一个名为`app.py`的文件,并编写Flask应用程序代码。例如: ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, World!' ``` 3. 创建uWSGI配置文件 在你的项目目录中创建一个名为`uwsgi.ini`的文件,并编写uWSGI配置。例如: ```ini [uwsgi] module = app callable = app master = true processes = 4 socket = /tmp/uwsgi.sock chmod-socket = 666 vacuum = true die-on-term = true ``` 其中,`module`参数指定了Flask应用程序的Python模块名,`callable`参数指定了Flask应用程序的实例名。`socket`参数指定了uWSGI服务器监听的Unix套接字路径,`processes`参数指定了uWSGI服务器的工作进程数。 4. 测试uWSGI服务器 在命令行中,进入你的项目目录,并运行以下命令启动uWSGI服务器: ``` uwsgi --ini uwsgi.ini ``` 如果一切正常,你应该能够通过访问Unix套接字路径来测试uWSGI服务器: ``` curl http://localhost/tmp/uwsgi.sock ``` 你应该看到Flask应用程序的输出。 5. 创建Nginx配置文件 在Nginx配置文件中添以下内容: ``` server { listen 80; server_name yourdomain.com; location / { include uwsgi_params; uwsgi_pass unix:///tmp/uwsgi.sock; } } ``` 其中,`listen`参数指定了Nginx服务器监听的端口和IP地址,`server_name`参数指定了该虚拟主机的域名或IP地址。`location`块指定了请求转发规则,`uwsgi_pass`参数指定了uWSGI服务器监听的Unix套接字路径。 6. 启动Nginx服务器 在命令行中,运行以下命令启动Nginx服务器: ``` sudo service nginx start ``` 如果一切正常,你应该能够通过访问你的域名或IP地址来访问Flask应用程序。 注意:如果你使用的是Ubuntu 18.04或更高版本,你需要将Nginx配置文件中的`include uwsgi_params;`改为`include /etc/nginx/uwsgi_params;`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值