2014-06-08 51 views
1

好的,所以這個問題肯定已經被問了幾十次了,但是我真的經歷了所有類似的問題,而且沒有一個問題與我的問題有關。Nginx - 「/ var/fruby/current/public /」的目錄索引被禁止

所以,歷史和配置 的Rails 3應用程序,乘客+ Nginx的3一點點作爲生產服務器

我目前部署我生產的Rails通過bash腳本3的應用程序,每一次基本上克隆混帳回購協議並執行一些魔術,它有問題,所以我們決定遷移到Capistrano。

寫了deploy.rb腳本,指定的共享文件夾,首先在測試服務器上啓動它,並設法讓它完成並順利運行。

現在我也同樣爲生產服務器,部署它通過Capistrano的,使他們以任何方式慣於衝突從我的手工bash腳本文件夾分開,改變nginx的根從

root /var/www/public; 

root /var/fruby/current/public; 

重新啓動nginx,我得到一個403錯誤和日誌中的以下記錄。

2014/06/08 18:28:32 [error] 5239#0: *1 directory index of "/var/fruby/current/public/" is forbidden, client: 109.187.177.116, server: example.com, request: "GET/HTTP/1.1", host: "example.com", referrer: "" 

由於乘客的配置沒有改變,其安全的假設,這個問題是某處文件夾的權限,但老實說,我似乎無法找出什麼問題是英寸的權限,這樣就業主似乎真的一樣對我來說,也許你可以指出我正確的方向?

它必須與乘客有關,因爲如果我手動啓動應用程序與軌道s,它啓動精美。

/opt/nginx/conf/nginx.conf

內部HTTP塊:

passenger_root /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.18; 
passenger_ruby /usr/local/bin/ruby; 
proxy_read_timeout 640; 

服務器塊:

server { 
    listen 443; 
    server_name example.com; 

    ssl on; 
    ssl_certificate /opt/nginx/conf/certs/example.com.crt; 
    ssl_certificate_key /opt/nginx/conf/certs/example.com.key.nopass; 

    charset utf-8; 
    #root /var/www/public; # Old directory my bash script deployed to 
    root /var/fruby/current/public; # New directory, capistrano deploys to 
    passenger_enabled on; 
    rails_env production; 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root html; 
    } 
} 

現在fruby文件夾具有以下權限:

drwxr-xr-x 5 root root 4096 Jun 8 18:56 fruby/ 

裏面fruby文件夾

drwxr-xr-x 5 root root 4096 Jun 8 18:56 ./ 
drwxr-xr-x 17 root root 4096 Jun 8 17:31 ../ 
lrwxrwxrwx 1 root root 34 Jun 8 18:56 current -> /var/fruby/releases/20140608145412/ 
drwxr-xr-x 4 root root 4096 Jun 8 18:54 releases/ 
drwxr-xr-x 7 root root 4096 Jun 8 17:46 repo/ 
-rw-r--r-- 1 root root 170 Jun 8 18:56 revisions.log 
drwxr-xr-x 7 root root 4096 Jun 8 17:47 shared/ 

共享文件夾

drwxr-xr-x 7 root root 4096 Jun 8 17:47 ./ 
drwxr-xr-x 5 root root 4096 Jun 8 18:56 ../ 
drwxr-xr-x 2 root root 4096 Jun 8 17:49 bin/ 
drwxr-xr-x 3 root root 4096 Jun 8 17:47 bundle/ 
drwxr-xr-x 2 root root 4096 Jun 8 17:51 log/ 
drwxr-xr-x 10 root root 4096 Jun 8 17:24 public/ 
drwxr-xr-x 6 nobody nogroup 4096 Jun 8 18:56 tmp/ 

裏面的一切似乎是罰款和幾乎相同的權限,也有生產服務器上。

讓我知道你是否需要更多的輸出。

任何幫助非常感謝!

回答

0

通過將Passenger更新爲4.0.44並重新編譯nginx(再次運行passenger-install-nginx-module)來解決此問題,顯然這是與我最初測試的測試服務器的唯一區別。

命令我跑來解決此問題:

[email protected]$: chmod 777 -R /tmp 
[email protected]$: chmod o+t -R /tmp 
[email protected]$: gem install passenger 
[email protected]$: passenger-install-nginx-module 

第一2個命令是這個答案的corteusy(Getting remove_entry_secure error while using ruby application

+0

使用chmod命令等同於'CHMOD -R 1777/tmp',但是這會改變/ tmp和其中的所有內容的權限。/tmp本身應該是模式1777,但其中的內容通常不應該是。 – Wodin

+0

更好的解決方案是不使用root用戶進行部署:)改變這一點,自動解決了這類問題。 – Screatch