I've a web application with this structure:
|
|__ static
|__style.less
|__images
|__ myapp.py
|__ wsgi.py
I've managed to run the web application using nginx and wsgi, but the problem is that the static files are not served, i mean, the server can't find them when i go to their URL. It gives me 404.
Here's my nginx configuration file part:
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;
}
Is there something missing?
Add this to your nginx configuration
location ^~ /static/ {
include /etc/nginx/mime.types;
root /project_path/;
}
replace /project_path/
with your app's absolute path, you should note that it doesn't include static directory and all the contents inside /project_path/static/
will be serverd in url /static/
.
From How to Configure NGINX for a Flask Web Application
I found this solution to be better:
location /static {
alias /<path to project>/static;
}
Replace <path to project>
with your project's directory, of course.
Note in this solution that static
is included in the path! This is really good for security! The risk of accidentally serving application source files is reduced. By default flask puts the source files in the <path to project>
and a small mistake in configurations could make these source files visible to attackers.