Nginx nginx 403 Forbidden 的问题解决

pobing · 2011年12月13日 · 最后由 CNfreeee 回复于 2017年06月06日 · 34262 次阅读

大家好!我是新人, 在 apache+passenger ,nginx+passenger 部署 rails 项目也有 403 forbidden 的问题,但都解决了,现在 nginx+unicorn 部署,一直有 403 Forbidden,不知各位如何解决?

unicorn.rb ‘ rails_env = ENV['RAILS_ENV'] || 'production' worker_processes (rails_env == 'production' ? 10 : 2) APP_PATH = File.expand_path(File.dirname(File.dirname(FILE))) working_directory APP_PATH # available in 0.94.0+ listen APP_PATH+"/tmp/nginx/sockets/unicorn.sock", :backlog => 64 timeout 30 pid APP_PATH + "/tmp/pid/unicorn.pid" stderr_path APP_PATH + "/log/unicorn.stderr.log" stdout_path APP_PATH + "/log/unicorn.stdout.log" ’

nginx.conf

user root root; worker_processes 5; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid;

events { worker_connections 1024; }

http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;

sendfile on; #tcp_nopush on;

#keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream unicorn_server { # This is the socket we configured in unicorn.rb server unix:/home/dong/workspace/blog/tmp/nginx/sockets/unicorn.sock fail_timeout=0; } server { listen 80; server_name www.piaoit.com; #root /home/dong/workspace/blog/public;
#access_log logs/host.access.log main; location / { root /home/dong/workspace/blog/public;
index index.html index.htm; #autoindex on; } error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ .php$ { # proxy_pass http://127.0.0.1; #}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ .php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #}

# deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /.ht { # deny all; #} }

}

文件权限的问题

对,权限问题。最简单的 就是 把 unicorn 的权限改成 部署代码的用户的权限。

例如: 项目文件的权限是 app

lrwxrwxrwx  1 app app   42 Dec  8 15:31 current -> /home/app/apps/cms/releases/20111208072531

nginx+passenger 时修改 nginx.conf

user  app;
worker_processes  1;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

unicorn 也是一样 使用 app 用户执行 unicorn_rails -c /data/github/current/config/unicorn.rb -E production -D

给文件夹访问权限。如果还不行,配置文件第一行,user root root

谢谢以上楼主的回复,我给文件设置了 777 权限,也是不行,user root root 也不行,才把配置文件更新在帖子里,麻烦各位看一下是不是哪里配置有误,小弟,先谢谢各位了!

unicorn.rb 中这句先配置成固定的看看,看看文件路径获取的对不对。

APP_PATH = "/home/dong/workspace/blog/"

忘了告诉大家我的环境是:ubuntu 11.04 ruby 1.9.2. rails 3.0.3,到目前为止,还未解决。

谢谢大家的关注,现在问题解决了,原来是 nginx.conf 配了 upstream,但 没配置 proxy_pass !!

 upstream  unicorn_server  { 
  server unix:/home/dong/workspace/blog/tmp/nginx/sockets/unicorn.sock fail_timeout=0; 
 }
location / { 
proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Forwarded-Host $host; 
proxy_set_header X-Forwarded-Server $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_buffering on; 
  proxy_pass http://unicorn_server; 
} 

其实 Rails App 部署为了减少权限带来的问题,最好部署在 ~/ 目录下面

的确是,centos 放在根目录下,还是减少不少麻烦,谢谢 8 楼!

#9 楼 @pobing 我是passenger+nginx出现forbidden的问题,nginx 安装在~/dev/nginx下面,权限是 Username ,项目放在~/ror/depot下面,还是 forbidden,错误日志没有说permission denied,求解

怎么感觉你的配置很复杂

#10 楼 @jialezhang 一般都是文件权限的问题,但不能确定具体什么原因。 一段配置参考下 ` http {
...
passenger_root /home/dong/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.9;
passenger_ruby /home/dong/.rvm/wrappers/ruby-1.9.2-p290/ruby;
...
}

server {
listen 80;
server_name www.yourhost.com;
root /somewhere/public; # <--- be sure to point to 'public'!
passenger_enabled on;
#rails_env development; nginx 的 passenger 模块默认是生产模式,如果是在本机进行开发
} `

http://pobing.iteye.com/blog/1313883

#11 楼 @vwangzhen unicorn +nginx 的配置具体要用到的代码不多

#12 楼 @pobing 唔,前些天解决了,主要是自己的 passenger_enabled on;放到了 local 里面

没用 Passenger,自己安装的 nginx,其他都是 ok 的了,就是 403~

哥们!万分感谢!!!!今天我用 nginx_upload_module 模块来做文件上传,各种 403,折腾了我一下午,看到你说的 proxy_pass,我发现这个上传模块也需要配置 proxy_pass,果不其然,加了之后就好了!!

Crossle 使用 Nginx 搭建 Ruby On Rails 环境报错? 提及了此话题。 06月11日 00:12
需要 登录 后方可回复, 如果你还没有账号请 注册新账号