我有一个我在Rails 3.1中开发的游戏,我想在不必升级它的情况下添加到现有的Rails 2.3.8中。是否可以将此3.1游戏应用程序存在于同一个域中,例如http://mydomain.com/game?所以任何带/游戏的网址都会指向Rails 3.1应用程序,而所有其他网址都指向常规的2.3应用程序?我如何使用nginx使用子目录(我宁愿不使用子域并丢失seo)来处理这个问题?
答案 0 :(得分:2)
你可以这样做,但它更容易使用像game.mydomain.com这样的子域,因为那时你可以使用nginx处理这个问题。对于不同的ruby和rails版本的分离,请使用rvm(https://rvm.io/)。
然后你可以像这样创建一个nginx配置:
upstream mydomain.com {
server unix:/var/run/thin/mydomain.0.sock;
server unix:/var/run/thin/mydomain.1.sock;
server unix:/var/run/thin/mydomain.2.sock;
server unix:/var/run/thin/mydomain.3.sock;
}
upstream game.mydomain.com {
server unix:/var/run/thin/game.mydomain.0.sock;
server unix:/var/run/thin/game.mydomain.1.sock;
server unix:/var/run/thin/game.mydomain.2.sock;
server unix:/var/run/thin/game.mydomain.3.sock;
}
server {
listen 80;
server_name mydomain.com;
access_log /path/to/rails/app/log/access.log;
error_log /path/to/rails/app/log/error.log;
root /path/to/rails/app/public;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://mydomain.com;
break;
}
}
}
server {
listen 80;
server_name game.mydomain.com;
access_log /path/to/rails/app/log/access.log;
error_log /path/to/rails/app/log/error.log;
root /path/to/rails/app/public;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://game.mydomain.com;
break;
}
}
}
如果可以使用子域而不是子文件夹,那么应该为你做。
如果您真的想使用子目录,可以使用nginx location
指令执行此操作:
答案 1 :(得分:0)
是
在您不希望导致现有应用程序出现问题的子域上运行它。