Nginx +旅客服务资产在子Uri

我正在服务一个Rails应用程序在一个sub-uri像https://projects.mydomain.com/app1/

但我的资产没有加载。

这里是我的nginxconfiguration:

location ~ ^/app1(/.*|$) { root /srv/www/app1/current/public; passenger_base_uri /app1; passenger_app_root /srv/www/app1/current; passenger_document_root /srv/www/app1/current/public; passenger_enabled on; } location ~ ^/(assets)/ { root /srv/www/app1/current/public; gzip_static on; expires max; add_header Cache-Control public; } 

该应用程序已加载,所有URL / PATH前缀为/ app1 /,但资源未加载。

https://projects.mydomain.com/app1/assets/application-123456.css不起作用

当我尝试没有前缀的资产path时,我可以看到资产存在:

https://projects.mydomain.com/assets/application-123456.css工作

任何想法 ?

更新:

增加了error_log /var/log/nginx/error.logdebugging; 当然这是一个编辑的摘录:

 2015/12/18 11:15:44 [debug] 27187#0: *1 http process request line 2015/12/18 11:15:44 [debug] 27187#0: *1 http request line: "GET /app1/assets/application-123456.css HTTP/1.1" 2015/12/18 11:15:44 [debug] 27187#0: *1 http uri: "/app1/assets/application-123456789precompiledhash123456789.css" 2015/12/18 11:15:44 [debug] 27187#0: *1 http args: "" 2015/12/18 11:15:44 [debug] 27187#0: *1 http exten: "css" ... 2015/12/18 11:15:44 [debug] 27187#0: *1 test location: ~ "^/app1/assets" 2015/12/18 11:15:44 [debug] 27187#0: *1 using configuration "^/app1/assets" ... 2015/12/18 11:15:44 [debug] 27187#0: *1 http finalize request: -4, "/app1/assets/application-123456.css?" a:1, c:2 2015/12/18 11:15:44 [debug] 27187#0: *1 http request count:2 blk:0 2015/12/18 11:15:44 [debug] 27187#0: *1 http run request: "/app1/assets/application-123456.css?" 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream check client, write event:1, "/app1/assets/application-123456.css" 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream recv(): -1 (11: Resource temporarily unavailable) 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream request: "/app1/assets/application-123456.css?" 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream dummy handler 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream request: "/app1/assets/application-123456.css?" 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream dummy handler 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream request: "/app1/assets/application-123456.css?" 2015/12/18 11:15:44 [debug] 27187#0: *1 http upstream process header #... 2015/12/18 11:15:44 [debug] 27187#0: *1 recv: fd:26 1844 of 16384 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi status 404 "404 Not Found" 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header: "Status: 404 Not Found" ... 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header: "Content-Type: text/html; charset=utf-8" ... 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header: "Date: Fri, 18 Dec 2015 10:15:44 GMT" 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header: "Content-Length: 1564" 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header: "Connection: close" 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header: "X-Powered-By: Phusion Passenger" 2015/12/18 11:15:44 [debug] 27187#0: *1 http scgi header done 2015/12/18 11:15:44 [debug] 27187#0: *1 uploadprogress error-tracker error: 0 2015/12/18 11:15:44 [debug] 27187#0: *1 xslt filter header 2015/12/18 11:15:44 [debug] 27187#0: *1 HTTP/1.1 404 Not Found Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Status: 404 Not Found ... Date: Fri, 18 Dec 2015 10:15:44 GMT X-Powered-By: Phusion Passenger Server: nginx + Phusion Passenger Content-Encoding: gzip 

作为一个额外的信息,当在这个nginx位置指令中,我尝试用一​​个别名replace一个根指令,我得到一个403。

  location ~ ^/app1/assets { alias /srv/www/app1/current/public/assets; #root /srv/www/app1/current/public; gzip_static on; # to serve pre-gzipped version expires max; add_header Cache-Control public; passenger_enabled on; } 

我尝试像^ / app1 / assets /.*正则expression式,但仍然无法正常工作。 (403别名禁止)

UPDATE2:

 2015/12/18 15:38:49 [debug] 878#0: *1 test location: ~ "^/app1/assets/(.+)$" 2015/12/18 15:38:49 [debug] 878#0: *1 using configuration "^/app1/assets/(.+)$" 2015/12/18 15:38:49 [debug] 878#0: *1 http cl:-1 max:262144000 2015/12/18 15:38:49 [debug] 878#0: *1 rewrite phase: 3 ... 2015/12/18 15:38:49 [debug] 878#0: *1 content phase: 16 2015/12/18 15:38:49 [debug] 878#0: *1 http script copy: "/srv/www/app1/current/public/assets/" 2015/12/18 15:38:49 [debug] 878#0: *1 http script capture: "application-123456.css/" 2015/12/18 15:38:49 [debug] 878#0: *1 open index "/srv/www/app1/current/public/assets/application-123456.css/index.html" Tried to add an index directive, not working (404). Tried to add a try_files, still have a /index.html added at the end, therefore having same 404. 

得到了朋友的帮助。 这里是如何工作:

 server { listen *:80; listen [::]:80; server_name projects.mydomain.com; server_tokens off; return 301 https://$server_name$request_uri; } server{ listen 0.0.0.0:443 ssl; listen [::]:443; server_name projects.gdurelle.com; server_tokens off; location ~ ^/app1(/.*|$) { alias /srv/www/app1current/public$1; passenger_base_uri /app1; passenger_app_root /srv/www/app1/current; passenger_document_root /srv/www/app1/current/public; passenger_enabled on; } location ~ ^/app2(/.*|$) { alias /srv/www/app2/current/public$1; passenger_base_uri /app2; passenger_app_root /srv/www/app2/current; passenger_document_root /srv/www/app2/current/public; passenger_enabled on; } }