2017-06-17 138 views
0

我有以下文件夹结构,我的应用程序提供静态目录文件夹中的nginx

/应用/服务器 - 有API内容

/应用/静态 - 有图像,js和css文件在各自的像(/静态/图像/静态/ JS ...等)的文件夹

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; 
    index index.html index.htm; 

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
     expires 1d; 
    } 

    location /static { 
     autoindex on; 
     alias /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; 
    } 

} 

一切工作的预期,但现在我意识到,我们正在使用 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; 
    } 

} 

现在,它服务于http://abc.xyz/images/test.jpg网址在/app/static/images文件夹的静态内容。但http://abc.xyz/images/d1/test.jpg不起作用。

编辑: - 上面的配置工程,它也提供子文件夹内容。看起来像我有.mp3文件的一些配置问题。

回答

0

感谢@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; 
     } 

    } 
} 
0

更改您的静态位置进行图像假设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,而不是别名提供服务的文件,这会将该网址添加到根:

# Serve /images/file.ext from /app/static/images/file.ext 
location ^~ /images { 
    autoindex on; 
    root /app/static; 
} 

您也可以在位置使用正则表达式的所有目录你想要的:

location ^~ /(images|js|css) { 
+0

@sjdaws嗨,现在服务/应用/静态文件夹的内容,但其子文件夹不工作 – prashanth

+0

@prashanth那么你的错误日志说?子文件夹应该工作正常,如果文件。 – sjdaws

+0

我做了一些更多的调试在我的结尾..它确实服务于子文件夹中的文件..但由于某种原因.html/.mp3文件不工作在任何文件夹..看起来是一些MIME类型问题 – prashanth

相关问题