我剛剛安裝了VPS(Centos 6.3)並使用capistrano部署我的應用程序。 VPS運行nginx &獨角獸。訪問服務器時,我得到一個403 Forbidden錯誤:這條線出現在 /var/log/nginx/error.log:使用nginx和獨角獸的rails部署:403禁止的錯誤
*5 directory index of "/var/www/current/public/" is forbidden, client: xxxxx, server: xxx, request: "GET/HTTP/1.1", host: "xxxx"
但是,如果我中的index.html添加到我的Rails應用程序在./public中,一切都沒有問題。這使我認爲路線不起作用。
我還使用chmod -R 755 *設置了/ var/www的所有文件夾的權限(可能不是長期運行的最佳主意,但希望將其排除爲錯誤來源)。有沒有其他方法可以更詳細地調試它(error.log文件不告訴我其他任何內容)?
任何幫助,非常感謝。
這是我的routes.rb文件(一切都在發展本地工作)
MyTest::Application.routes.draw do
root :to => 'welcome#index'
end
以下是我的nginx.conf文件:
upstream unicorn {
server unix:/tmp/unicorn.blog.sock fail_timeout=0;
}
server {
listen 80 default deferred;
# server_name example.com;
root /var/www/current/public;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 5;
}
這是unicorn_init.sh:
#!/bin/sh
set -e
# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/var/www/current
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"
AS_USER=##########
set -u
OLD_PIN="$PID.oldbin"
sig() {
test -s "$PID" && kill -$1 `cat $PID`
}
oldsig() {
test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
}
run() {
if [ "$(id -un)" = "$AS_USER" ]; then
eval $1
else
su -c "$1" - $AS_USER
fi
}
case "$1" in
start)
sig 0 && echo >&2 "Already running" && exit 0
run "$CMD"
;;
stop)
sig QUIT && exit 0
echo >&2 "Not running"
;;
force-stop)
sig TERM && exit 0
echo >&2 "Not running"
;;
restart|reload)
sig HUP && echo reloaded OK && exit 0
echo >&2 "Couldn't reload, starting '$CMD' instead"
run "$CMD"
;;
upgrade)
if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
then
n=$TIMEOUT
while test -s $OLD_PIN && test $n -ge 0
do
printf '.' && sleep 1 && n=$(($n - 1))
done
echo
if test $n -lt 0 && test -s $OLD_PIN
then
echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds"
exit 1
fi
exit 0
fi
echo >&2 "Couldn't upgrade, starting '$CMD' instead"
run "$CMD"
;;
reopen-logs)
sig USR1
;;
*)
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
exit 1
;;
esac
最後,我的Gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.12'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'pg'
gem 'execjs', '~> 1.4.0'
gem 'therubyracer'
gem "less-rails"
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
# To use Jbuilder templates for JSON
# gem 'jbuilder'
# Use unicorn as the app server
gem 'unicorn'
# Deploy with Capistrano
gem 'capistrano'
# To use debugger
# gem 'debugger'
gem "haml", "~> 4.0.0"
gem 'twitter-bootstrap-rails', '~> 2.2.6'
gem "simple_form", "~> 2.1.0"
這是我unicorn.rb:
root = "/var/www/current"
working_directory root
pid "#{root}/tmp/pids/unicorn.pid"
stderr_path "#{root}/log/unicorn.log"
stdout_path "#{root}/log/unicorn.log"
listen "/tmp/unicorn.blog.sock"
worker_processes 4
timeout 30
什麼是您的獨角獸配置('unicorn.rb')? – dimuch 2013-03-17 10:15:20
我已經包含了unicorn.rb文件的內容。 – apotry 2013-03-17 10:54:50
你是否通過本指南工作? http://nginxlibrary.com/403-forbidden-error/ – phoet 2013-03-17 12:03:50