nginx错误日志说:failed (2: No such file or directory)
我在浏览器中看到404错误。访问我的应用程序主页(www.myapp.com
)时,我正在"欢迎访问nginx" 页面。
我尝试了很多配置变体。这是当前的一个:
配置文件
user mo;
worker_processes 4;
error_log /opt/nginx/logs/error.log;
pid /opt/nginx/logs/nginx.pid;
events {
worker_connections 1024;
}
http {
passenger_root /home/mo/gemshome/gems/passenger-4.0.2;
passenger_ruby /usr/local/bin/ruby193;
rails_env production;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.myapp.com;
root /home/mo/myapp/public;
passenger_enabled on;
location / {
root html;
index index.html index.htm;
}
# redirect server error pages to the static page /50x.html
然而,我不确定是否正确设置了rails生产环境(nginx配置文件对应的行)。
我关注了所有或大部分phusion
HOWTO。
运行webrick
服务器时,应用程序正常运行。所以我假设我的应用程序正常运行,但这是在端口3000
上运行所以我需要知道如何一起运行nginx
和passenger
。
答案 0 :(得分:2)
我们正在使用thin网络服务器。 nginx
配置为将所有请求重定向到正在运行的thin
实例,这是秘密。
这个想法是:
3000
nginx
直接处理应用程序'目录中的所有静态nginx
将所有请求(不是静态的)重定向到localhost:3000
这是nginx
配置文件:
server {
listen 80;
server_name myapp.com;
client_max_body_size 800M;
client_header_timeout 23m;
client_body_timeout 23m;
send_timeout 23m;
root /home/user/myapp/public/;
error_log /home/user/myapp/log/nginx_errors.log;
access_log /home/user/myapp/log/nginx_access.log;
# One more statics route
# location /assets/(.+-[a-z0-9]+\.\w+) {
# root /home/user/myapp/public/assets/$1;
# internal;
# }
location /images/(.+)(\?.*)? {
root /home/user/myapp/public/images/$1;
internal;
}
location / {
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Sendfile-Type X-Accell-Redirect;
if (-f $request_filename) {
expires max;
break;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:3000;
break;
}
}
}
这是thin
配置文件:
chdir: /home/user/myapp/
environment: production
address: 0.0.0.0
port: 3000
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
servers: 1
daemonize: true
threaded: true
因此,要运行您的应用程序,其中nginx
处理所有静态并很好地将您从myapp.com
重定向到您的Rails应用程序'实例,请执行以下操作:
thin
gem依赖项添加到Gemfile
:gem 'thin'
bundle install
nginx
配置文件编辑为/etc/nginx/sites-available/myapp.conf
nginx
:ln -s /etc/nginx/sites-enabled/myapp.conf /etc/nginx/sites-available/myapp.conf
thin
处创建/etc/thin
配置文件,复制并粘贴此帖子中的内容,然后进行更正:mkdir /etc/thin && touch /etc/thin/myapp.yml
thin
:thin install
(然后按照说明操作)thin
,然后运行nginx
:/etc/init.d/thin start && /etc/init.d/nginx restart
注意:如果您在本地运行服务器并希望在/etc/hosts
域上测试您的应用程序,请不要忘记添加到myapp.com
的路由:
127.0.0.1 myapp.com
nginx
主要用作代理服务器或静态处理服务器。这是因为它的极简和速度。 nginx
非常擅长这些任务。
然而,Phusion Passenger
真的非常慢。我在工作中发现了自己。这就是为什么我们切换到thin
。
所以我的回答是基于我自己的经验,仅此而已。
但是,您可以使用passenger
代替thin
- nginx
仍会将您重定向到您的应用。但处理您的请求可能需要更多时间。
希望有一天这会有所帮助。谢谢你的问题和快乐的编码!
答案 1 :(得分:0)
在* passenger_enabled on * write * rails_env开发之后的服务器块中; *到下一行并删除rails_env生产;从http块然后重新加载服务器。