Nginx + Passenger 403错误

时间:2017-10-24 20:44:48

标签: php ruby-on-rails nginx passenger mediawiki

我在一台AWS ec2服务器上有一个混合的php / Rails应用程序。我正在托管Mediawiki安装并使用Rails作为它的前端。对于Rails应用程序,我使用Passenger作为服务器。我希望location /能够提供Rails应用程序,以及location /w或任何.php文件的任何内容,由Mediawiki(php5-fpm)提供。

我曾经有一个工作配置,但它被黑客攻击了,我想重构它。

当我尝试访问/上的Rails应用时,我当前的工作实现给了我403 Forbidden错误。

我收到的错误(来自rails_error.log):2017/10/24 20:08:31 [error] 14947#14947: *2 directory index of "/var/www/myapp/public/" is forbidden, client: xx.yy.zz.aa, server: myapp.amazonaws.com, request: "GET / HTTP/1.1", host: "myapp.amazonaws.com"

我希望现在能够在/访问 Rails应用程序;我还没有专注于php5-fpm配置。

以下是我的.conf文件:

位点可用/ myapp.conf:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=mw_cache:10m max_size=10g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
    listen 80;
    listen [::]:80 ipv6only=on default_server;

    server_name myapp.com;
    charset utf-8;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    root /var/www/myapp/public;
    passenger_enabled on; 

    location /w {
      alias /var/www/mediawiki-1.28.0;
      index index.php index.html index.htm;
      charset utf-8;

      try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
      fastcgi_cache mw_cache;
      fastcgi_cache_valid 200 60m;
      try_files $uri /index.php =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass 127.0.0.1:7777;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;

      error_log /var/log/nginx/mediawiki_error.log;
      access_log /var/log/nginx/mediawiki_access.log;
    }

    error_log /var/log/nginx/rails_error.log;
    access_log /var/log/nginx/rails_access.log;
}

nginx.conf:

user www-data;                                                                                                                                                                       
worker_processes 4;                                                                                                                                                                  
pid /run/nginx.pid;                                                                                                                                                                  

events {                                                                                                                                                                             
        worker_connections 768;                                                                                                                                                      
        # multi_accept on;                                                                                                                                                           
}                                                                                                                                                                                    

http {  
        sendfile on;                                                                                                                                                                 
        tcp_nopush on;                                                                                                                                                               
        tcp_nodelay on;                                                                                                                                                              
        keepalive_timeout 65;                                                                                                                                                        
        types_hash_max_size 2048;     

        include /etc/nginx/mime.types;                                                                                                                                               
        default_type application/octet-stream; 

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;        

        gzip on;
        gzip_disable "msie6";

        passenger_root /home/ubuntu/.rvm/gems/ruby-2.3.1@myapp/gems/passenger-5.1.1;
        passenger_ruby /home/ubuntu/.rvm/gems/ruby-2.3.1@myapp/wrappers/ruby;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

我怀疑它与Passenger的安装或运行方式有关,或者可能是我运行的乘客不是www-data而是ubuntu

/var/www/myapp/也归ubuntu所有,但我已尝试chown -R www-data /var/www/myappchown -R ubuntu:www-data /var/www/myapp无效。

有没有人从这里有任何指示?

感谢。

1 个答案:

答案 0 :(得分:1)

你的配置适合我:应用程序启动成功,至少,如果我以root身份启动Nginx(通常如何完成)。

请注意,配置中的user指令告诉Nginx运行其worker的用户是什么,它没有指定运行Passenger核心的用户(继承自Nginx的启动)。 / p>

我的指示如下:

  1. 通常首先要检查日志。 您的配置声明了日志文件,但没有设置顶级错误日志,因此您错过了乘客日志输出。

    要解决此问题,请将error_log /var/log/nginx/error.log;移至http {的{​​{1}}行之上。

    如果需要,您还可以设置nginx.conf(在passenger_log_level 7;区块中)以获取非常详细的日志。

  2. 通过更改日志级别并观察结果,您还可以确保您正在使用的配置,实际上是您正在查询的URL上使用的配置(即您可以看到请求即将到来)在)。

  3. 乘客有一些故障排除工具,例如http可用于检查它是否成功运行。请注意,您尚未申报passenger_pre_start个网址,因此您的应用不会被Passenger启动,直到第一个请求被发送到该网址。