Ошибка субдомена nginx с приложением Rails и пассажиром - PullRequest
0 голосов
/ 15 марта 2012

Я совершенно новичок в развертывании nginx, и у меня возникли проблемы с настройкой субдомена для приложения rails, которое запущено на пассажире. Моя структура приложения выглядит следующим образом

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

Для более ясной перспективы подумайте о структуре gmail

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

И помните, что sub.sss.com - это не просто каталог под sss, это совершенно другое приложение rails.

Чтобы настроить подобную структуру, я настроил nginx следующим образом

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;      
    }      

Когда я запускаю nginx, я получаю это предупреждение

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

И получил это сообщение при попытке получить доступ к URL-адресу www.sss.com

Chrome - Ошибка 310 (net :: ERR_TOO_MANY_REDIRECTS): было слишком много перенаправлений.

FF - Firefox обнаружил, что сервер перенаправляет запрос на этот адрес способом, который никогда не будет завершен.

Но когда я захожу на zzz.com, он успешно перенаправляет на sub.sss.com с той же ошибкой.

Кажется, это запутано в какой-то петле. Кто-нибудь есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 15 марта 2012

На вашем первом сервере вы также определяете sss.com как сервер на втором. Вам просто нужно сначала удалить. вот так:

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;      
}      
0 голосов
/ 15 марта 2012

У вас есть 3 домена / субдамана, и должно быть только 3 серверных блока вместо четырех у вас.

Попробуйте ...

server {
    # This server block serves sss.com
    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 {
    # This server block serves sub.sss.com
    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 {
    # This server block redirects zzz.com to sub.sss.com
    listen   80;
    server_name   zzz.com;
    rewrite ^ http://sub.sss.com$request_uri? permanent;      
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...