为nginx中的静态目录文件夹提供服务

为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

我的应用程序中有以下文件夹结构

/应用程序/服务器-包含api的内容

/app/static-在相应的文件夹中有图像、js和css文件,如(/static/images、/static/js…等)

一切正常,但今天我意识到我们正在使用
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;
        }

    }
}