2011-01-31 24 views
1

好吧,所以我幾乎有標準的nginx配置服務於一個獨角獸導軌服務器(偵聽套接字文件,並從rails_app/public目錄中提供靜態文件)。如何在服務獨角獸導軌服務器時從nginx獲得來自兩個位置的靜態文件?

不過,我要做到以下幾點:

  1. 從 rails_app /公衆提供靜態文件(如目前 完成)
  2. 服務與不同的根URL /報告/靜態文件(喜歡的/ mnt /文件/)

我嘗試添加以下到我的nginx的配置:

location /reports/ { 
    root /mnt/matthew/web; 
} 

但它沒有工作。

任何想法如何讓這種情況發生?

(下面是我的整個nginx.conf文件:

worker_processes 1; 

pid /tmp/nginx.pid; 
error_log /tmp/nginx.error.log; 

events { 
    worker_connections 1024; # increase if you have lots of clients 
    accept_mutex off; # "on" if nginx worker_processes > 1 
    # use epoll; # enable for Linux 2.6+ 
    # use kqueue; # enable for FreeBSD, OSX 
} 

http { 
    # nginx will find this file in the config directory set at nginx build time 
    include mime.types; 

    # fallback in case we can't determine a type 
    default_type application/octet-stream; 

    # click tracking! 
    access_log /tmp/nginx.access.log combined; 
    sendfile on; 

    tcp_nopush on; # off may be better for *some* Comet/long-poll stuff 
    tcp_nodelay off; # on may be better for some Comet/long-poll stuff 
    gzip on; 
    gzip_http_version 1.0; 
    gzip_proxied any; 
    gzip_min_length 500; 
    gzip_disable "MSIE [1-6]\."; 
    gzip_types text/plain text/html text/xml text/css 
      text/comma-separated-values 
      text/javascript application/x-javascript 
      application/atom+xml; 

    # this can be any application server, not just Unicorn/Rainbows! 
    upstream app_server { 
    server unix:/home/matthew/server/tmp/unicorn.sock fail_timeout=0; 


    } 

    server { 
    # enable one of the following if you're on Linux or FreeBSD 
    listen 80 default deferred; # for Linux 
    # listen 80 default accept_filter=httpready; # for FreeBSD 


    client_max_body_size 4G; 
    server_name _; 

    keepalive_timeout 5; 

    location /reports/ { 
     root /mnt/matthew/web; 
    } 
    # path for static files 
    root /home/matthew/server/public; 



    try_files $uri/index.html $uri.txt $uri.html $uri @app; 

    location @app { 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 

     proxy_pass http://app_server; 
    } 

    # Rails error pages 
    error_page 500 502 503 504 /500.html; 
    location = /500.html { 
     root public; 
    } 
    } 
} 
+0

也許這是一個愚蠢的選擇,但是如何從/ home/matthew/server/public/otherstuff到軟鏈接/ mnt/files /以避免根變更問題? – 2014-06-04 03:38:31

回答

4

location @app是尋找/home/matthew/server/public文件,因爲這是指定的父根如果嘗試文件語句在location /reports/匹配的文件,有一個這些文件不會被找到你需要設置這樣的東西:

location /reports/ { 
    root /mnt/matthew/web; 
    try_files $uri/index.html $uri.txt $uri.html $uri @foo; 
} 
root /home/matthew/server/public; 
try_files $uri/index.html $uri.txt $uri.html $uri @app; 

location @foo { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 

    proxy_pass http://app_server; 

    root /mnt/matthew/web 
} 

location @app { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 

    proxy_pass http://app_server; 
} 
相關問題