为nginx中的静态目录文件夹提供服务
我的应用程序中有以下文件夹结构 /应用程序/服务器-包含api的内容 /app/static-在相应的文件夹中有图像、js和css文件,如(/static/images、/static/js…等) 一切正常,但今天我意识到我们正在使用为nginx中的静态目录文件夹提供服务,nginx,Nginx,我的应用程序中有以下文件夹结构 /应用程序/服务器-包含api的内容 /app/static-在相应的文件夹中有图像、js和css文件,如(/static/images、/static/js…等) 一切正常,但今天我意识到我们正在使用 http://xyz.abc/images/abc.gif而不是 http://xyz.abc/static/images/abc.gif 由于URL中没有静态,我的/静态规则将不再受到尊重 我在网上读过关于不同方法的文章,但没有一篇文章中没有/static与UR
http://xyz.abc/images/abc.gif
而不是
http://xyz.abc/static/images/abc.gif
由于URL中没有静态,我的/静态规则将不再受到尊重
我在网上读过关于不同方法的文章,但没有一篇文章中没有/static与URL接近。以前有人遇到过这个问题,并且知道解决方案吗
新编辑:
如@shdaws所述,我已将内容更改为以下内容。我还必须在服务器级别更改根目录才能使其正常工作
server {
listen 80;
server_name www.example.com;
error_log /home/LogFiles/docker/error.log warn;
root /app/static;
index index.html index.htm;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1d;
}
location ^~ /(audio|build|images|style) {
autoindex on;
root /app/static;
}
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_pass http://pythonapp;
proxy_cache_bypass $http_upgrade;
}
}
现在它在/app/static/images
文件夹中为http://abc.xyz/images/test.jpg
url。但是http://abc.xyz/images/d1/test.jpg
不起作用
编辑:
-上面的配置工作正常,它也提供子文件夹内容。看起来我对.mp3文件有一些配置问题。将静态位置更改为图像,假设
abc.gif
位于/app/static/abc.gif
:
# Serve /images/file.ext from /app/static/file.ext
location ^~ /images {
autoindex on;
alias /app/static;
}
如果您试图从/app/static/images/abc.gif
使用root
而不是alias提供文件,则会将URL附加到根目录:
# Serve /images/file.ext from /app/static/images/file.ext
location ^~ /images {
autoindex on;
root /app/static;
}
您还可以在所需的所有目录的位置使用正则表达式:
location ^~ /(images|js|css) {
感谢@sjdaws帮助解决此问题。下面的配置非常适合我的场景
worker_processes auto;
pid /var/run/nginx.pid;
daemon off;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /home/LogFiles/docker/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
upstream pythonapp {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name www.example.com;
error_log /home/LogFiles/docker/error.log warn;
root /app/static;
index index.html index.htm;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|mp3|html)$ {
expires 1d;
}
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_pass http://pythonapp;
proxy_cache_bypass $http_upgrade;
}
}
}
您好@sjdaws,它现在提供/app/static文件夹内容,但其子文件夹不是working@prashanth你的错误日志是怎么写的?如果文件可以,子文件夹应该可以正常工作。我在最后做了一些调试。。它提供子文件夹中的文件。。但由于某些原因,.html/.mp3文件在任何文件夹中都不起作用。。看起来像个哑剧演员我把周末浪费在一个愚蠢的错误上。。我实际上有两条删除静态文件的规则,第二条解决了所有问题:(
worker_processes auto;
pid /var/run/nginx.pid;
daemon off;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /home/LogFiles/docker/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
upstream pythonapp {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name www.example.com;
error_log /home/LogFiles/docker/error.log warn;
root /app/static;
index index.html index.htm;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|mp3|html)$ {
expires 1d;
}
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_pass http://pythonapp;
proxy_cache_bypass $http_upgrade;
}
}
}