使用Rails应用程序和乘客的nginx子域故障 [英] nginx subdomain failure with Rails app and passenger

查看:276
本文介绍了使用Rails应用程序和乘客的nginx子域故障的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对nginx的部署是全新的,并且在乘客运行的rails应用程序的设置子域中出现问题。我的应用程序结构就像这样

   -  sss.com(父域)
- sub.sss.com (subdomain)
- zzz.com(将被重定向到sub.sss.com)

为了更清晰的观点,请考虑gmail结构

   -  google.com(父域)
- mail.google.com(subdomain)
- gmail.com(将被重定向到mail.google.com)

请记住,sub.sss.com不仅仅是sss下的一个目录,它完全是一个不同的rails应用程序。



要设置类似的结构我已经配置了这样的nginx

  server {
listen 80;
server_name sss.com * .sss.com;
重写^(。*)http://sss.com$1永久;
}

server {
listen 80;

server_name sss.com;

passenger_enabled on;

access_log logs / sss.log;
error_log logs / sss_error.log;

root / var / www / sss / public;
}
server {
listen 80;

server_name sub.sss.com;

passenger_enabled on;

access_log logs / sub.log;
error_log logs / sub_error.log;

root / var / www / sub / public;
}
server {
listen 80;
server_name zzz.com;
重写^(。*)http://sub.sss.com$1永久;
}

当我启动nginx我收到这条警告消息

  nginx:[warn]冲突的服务器名称sss.com在0.0.0.0:80,忽略
/ pre>

当尝试访问url www.sss.com时收到此消息


Chrome - 错误310(net :: ERR_TOO_MANY_REDIRECTS):重定向太多。



FF - Firefox已经检测到服务器正在以这种永远不会完成的方式重定向该地址的请求。


但是当我访问zzz.com,它成功地重定向到sub.sss.com与同样的错误。



看起来它在某种循环中混乱。任何人都有一个想法如何解决这个问题?

解决方案

在您的第一个服务器中,您还将第二个服务器定义为sss.com 。你只需要从第一个删除。像这样:

  server {
listen 80;
server_name * .sss.com;
重写^(。*)http://sss.com$1永久;
}

server {
listen 80;

server_name sss.com;

passenger_enabled;

access_log logs / sss.log;
error_log logs / sss_error.log;

root / var / www / sss / public;
}
server {
listen 80;

server_name sub.sss.com;

passenger_enabled on;

access_log logs / sub.log;
error_log logs / sub_error.log;

root / var / www / sub / public;
}
server {
listen 80;
server_name zzz.com;
重写^(。*)http://sub.sss.com$1永久;
}


I am totally new to nginx deployment and having problem setting up the subdomain for rails app which is running in passenger. My app structure is like this

    -- sss.com (parent domain)
        -- sub.sss.com (subdomain)
    -- zzz.com (which will be redirected to sub.sss.com)

For more clear perspective, think of the gmail structure

    -- google.com (parent domain)
          - mail.google.com (subdomain)
    -- gmail.com  (which will be redirected to mail.google.com)

And remember sub.sss.com is not just a directory under sss, its completely a different rails app.

To setup a similar structure i have configured nginx like this

server {
         listen   80;
         server_name   sss.com *.sss.com;
         rewrite ^(.*) http://sss.com$1 permanent;
    }   

    server {
        listen   80;

        server_name   sss.com;

        passenger_enabled   on;

        access_log   logs/sss.log;
        error_log    logs/sss_error.log; 

        root  /var/www/sss/public;        
    }    
    server {
        listen   80;

        server_name   sub.sss.com;

        passenger_enabled   on;

        access_log   logs/sub.log;
        error_log    logs/sub_error.log;

        root   /var/www/sub/public;        
    } 
    server {
        listen   80;
        server_name   zzz.com;
        rewrite ^(.*) http://sub.sss.com$1 permanent;      
    }      

When i start nginx i got this warning message

nginx: [warn] conflicting server name "sss.com" on 0.0.0.0:80, ignored

And got this message when tried to access the url www.sss.com

Chrome - Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.

FF - Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

But when i access zzz.com, it successfully redirects to sub.sss.com with a same error.

Seems its messed up in some kind of loop. anybody got a idea how to solve this?

解决方案

In your first server you define the sss.com like server in the second too. You just need delete from first. like that :

server {
     listen   80;
     server_name  *.sss.com;
     rewrite ^(.*) http://sss.com$1 permanent;
}   

server {
    listen   80;

    server_name   sss.com;

    passenger_enabled   on;

    access_log   logs/sss.log;
    error_log    logs/sss_error.log; 

    root  /var/www/sss/public;        
}    
server {
    listen   80;

    server_name   sub.sss.com;

    passenger_enabled   on;

    access_log   logs/sub.log;
    error_log    logs/sub_error.log;

    root   /var/www/sub/public;        
} 
server {
    listen   80;
    server_name   zzz.com;
    rewrite ^(.*) http://sub.sss.com$1 permanent;      
}      

这篇关于使用Rails应用程序和乘客的nginx子域故障的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆