簡體   English   中英

Nginx Grails-提供存儲在多個目錄中的靜態文件

[英]Nginx Grails - serve static files stored in multiple directories

我使用以下命令在本地計算機Mac OSX 10.7.5上的項目上工作:

  • Grails 2.2.2
  • Grails資源插件1.1.6
  • Nginx 1.4

//編輯

這里有一個非常相似的問題但不幸的是沒有答案。

//結束編輯

我有3個目錄,其中包含一些位於web-app目錄之外的圖像。 (因為這些目錄中包含很多圖像,我們不希望它們進入'<project>.war'

/Users/lorenzo/grails/projects/avatars/
/Users/lorenzo/grails/projects/posters/
/Users/lorenzo/grails/projects/waveforms/

所有其他圖像/ js / css都存儲在web-app目錄下的不同sub-directories.

web-app/images/home/
web-app/images/icons/
web-app/images/skins/
...

web-app/audioplayer/images/
web-app/audiomenu/icons/
...

web-app/js/angular/
web-app/js/angular/controllers/
...

web-app/audioplayer/js/
web-app/audioplayer/css/
web-app/audiomenu/css/
...

我已經將nginx.conf設置如下:

server {
    server_name localhost;
    listen 8080;
    access_log /usr/local/logs/access.log;

    root /Users/lorenzo/grails/projects/soundshare/grails-app;
    index /home;

    location @tomcat {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://localhost:8081;
    }

    location / {
        try_files $uri $uri/ @tomcat;
    }

    location /avatars {  
        root /Users/lorenzo/grails/projects;
    }   
    location /waveforms {
        root /Users/lorenzo/grails/projects;
    }   

    location /posters {
        root /Users/lorenzo/grails/projects;
    }   


    # what should I do here ????
    location ~* ^.+\.(js|css)$ {
        root /;
    }

}

Grails資源插件將靜態文件放入稱為“ static ”的“臨時”目錄中,因此當瀏覽器向服務器發出請求時,某些js/css位於

http://localhost/static/bundle-bundle_project_head.css
http://localhost/static/bundle-bundle_application_js_defer.js

其他一些來自BuildConfig.groovy設置的grails插件,例如:編譯“:jquery-ui:1.8.24”

定位

http://localhost/static/plugins/jquery-1.8.3/js/jquery/jquery-1.8.3.min.js

使用實際的nginx配置,我得到一個nginx錯誤

/static/bundle-bundle_application_js_defer.js" failed (2: No such file or directory)

當然,如果我直接使用端口8081調用它,它將起作用。 Tomcat正在為其提供服務。

http://localhost:8081/static/bundle-bundle_application_js_defer.js

但是如果我用8080來稱呼它

我得到了錯誤。 static/bundle-bundle_application_js_defer.js" failed (2: No such file or directory)

任何幫助將不勝感激。

謝謝

您可能需要在NGINX中顯式地為靜態資源創建一個位置塊作為別名。 這應該與grails存放插件靜態資源的位置匹配。
在位置下添加

location /static { alias /Users/lorenzo/grails/projects/STATIC/; }
到您的nginx.conf文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM