我在一台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/myapp
和chown -R ubuntu:www-data /var/www/myapp
无效。
有没有人从这里有任何指示?
感谢。
答案 0 :(得分:1)
你的配置适合我:应用程序启动成功,至少,如果我以root身份启动Nginx(通常如何完成)。
请注意,配置中的user
指令告诉Nginx运行其worker的用户是什么,它没有指定运行Passenger核心的用户(继承自Nginx的启动)。 / p>
我的指示如下:
通常首先要检查日志。 您的配置声明了日志文件,但没有设置顶级错误日志,因此您错过了乘客日志输出。
要解决此问题,请将error_log /var/log/nginx/error.log;
移至http {
的{{1}}行之上。
如果需要,您还可以设置nginx.conf
(在passenger_log_level 7;
区块中)以获取非常详细的日志。
通过更改日志级别并观察结果,您还可以确保您正在使用的配置,实际上是您正在查询的URL上使用的配置(即您可以看到请求即将到来)在)。
乘客有一些故障排除工具,例如http
可用于检查它是否成功运行。请注意,您尚未申报passenger_pre_start个网址,因此您的应用不会被Passenger启动,直到第一个请求被发送到该网址。