0

Im working on a project on my local machine Mac OSX 10.7.5 using :

  • Grails 2.2.2
  • Grails resources plugin 1.1.6
  • Nginx 1.4

//EDIT

There is a pretty much similar question asked here but unfortunately with no answer..

//END EDIT

I have 3 directories containing some images that are located outside the web-app dir. (as theses directories my contains a lot of images we don't want them to be into the '<project>.war' )

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

All other images/js/css are stored under the web-app directory in different 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/
...

I have set up the nginx.conf as follow:

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 /;
    }

}

The Grails resource plugin put the static file into a "temporary" directory called static so when the browser make a request to the server some js/css are located at

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

Some others that are coming from grails plugin set in BuildConfig.groovy eg: compile ":jquery-ui:1.8.24"

are locate

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

With the actual nginx config I get an nginx error

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

Of course if I call it directly with port 8081 it is working. Tomcat is serving it.

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

But If I call it with 8080

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

Any help would be very appreciated.

Thank you

Merlin
  • 4,907
  • 2
  • 33
  • 51
  • Were you able to resolve this issue? It appears the call to /static/ is being directed to port 8080 and not 8081. [This user](http://stackoverflow.com/questions/10631933/nginx-static-file-serving-confusion-with-root-alias?rq=1) had some issues with ROOT and ALIAS resolution that may be helpful. – Nathan Apr 22 '14 at 16:12

1 Answers1

0

You may need to create a location block for static resources explicitly in NGINX as an alias. This should match where grails houses the plugin static resources.
Under location add

location /static { alias /Users/lorenzo/grails/projects/STATIC/; }
to your nginx.conf file.

Nathan
  • 3,082
  • 1
  • 27
  • 42