简短的回答
我们正在使用瘦网络服务器。配置为将nginx
所有请求重定向到正在运行的thin
实例,这就是秘密。
这个想法是:
- Rails 在港口运行,比方说,
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 运行应用程序
因此,要运行nginx
处理所有静态的应用程序并很好地将您从 Rails 应用程序实例重定向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
仍会将您重定向到您的应用程序。但处理您的请求可能需要更多时间。
希望有一天这会对某人有所帮助。感谢您的提问和愉快的编码!