2015-02-15 2 views
0

Я хотел бы запустить две версии моего сайта для рельсов, один для производства и один для разработки. Производство один прослушивает порт 80 и развитие будет слушать на порту 9033. Вот мой сервер блокирует конфигурации, которые находятся в одном файлеСайт Nginx Rails и пассажир с несколькими портами

server { 
    listen 80 default_server; 
    server_name mywebsite.com; 
    passenger_enabled on; 
    passenger_app_env production; 
    root /path/to/public/dir; 
} 

server { 
    listen 9033 default_server; 
    server_name mywebsite.com; 
    passenger_enabled on; 
    passenger_app_env development; 
    root path/to/public/dir; 
    passenger_friendly_error_pages on; 
} 

Проблема заключается в том, что, когда я пытаюсь подключиться к веб-сайт через мой браузер, независимо от того, какой порт я использую, я всегда получаю версию веб-сайта, соответствующую среде, указанной в блоке сервера сперва. Таким образом, в приведенном выше примере, он всегда будет служить производственной версии моего сайта.

Почему первый серверный блок переопределяет второй, и как я могу его сделать, чтобы я мог обращаться к любой из версий моего веб-сайта, не внося изменения в файлы конфигурации и перезагружая nginx?

UPDATE:

Ни одно из предложений не работали, даже после того, как очистить кэш браузера перед отправкой каждого запроса HTTP. Я изменил свои блоки сервера на следующее в надежде моего сервера возвращение другой версии сайта

server { 
    listen *:80; 
    server_name mywebsite.com; 
    passenger_enabled on; 
    passenger_app_env production; 
root /home/alex/code/m2m/public/; 
} 


server { 
    listen *:80; 
    server_name dev.mywebsite.com; 
    passenger_enabled on; 
    passenger_app_env development; 
    root /home/alex/code/m2m/public/; 
    passenger_friendly_error_pages on; 
} 

, а затем добавил следующую строку в моем/и т.д./файл хостов

my.ip.addr.ess dev.mywebsite.com 

Но запросы к оба домена приводят к возврату только производственной версии моего веб-сайта. Примечание. Я использую файл nginx.conf по умолчанию. Есть ли способ отлаживать мой браузер (Chrome v40.0.2214.111 (64-разрядный)), чтобы увидеть, изменились ли мои запросы? Я думаю, что проблема кроется в клиентах, поскольку совет, который дали мне комментарии, кажется, что он должен работать.

+0

Ваши конфигурации выглядят нормально, отправляйте журналы. Если вы прокомментируете, что первый серверный блок является вторым рабочим штрафом на порту 9033 в качестве версии разработки? Есть ли еще серверные блоки? –

+0

Когда я закомментировать первый блок сервера, только версию развития на порту 9033 возвращает правильный веб-страница, серийная версия получает 404. Вот Pastebin из моих журналов: http://pastebin.com/Bk7vFESX Там не являются другими серверными блоками. – almel

+0

Пожалуйста, проверьте, во-первых, удаление директив 'default_server', а во-вторых, удаление' server_name' из второго местоположения 'server'. –

ответ

0

И если вы попытаетесь это сделать:

listen *:80; 

и

listen *:9033; 

Это была моя рекомендация в отношении вопроса, который направлен Nginx конфигурации. Поместив эти инструкции для прослушивания, согласно nginx doc, nginx будет сначала соответствует ip: портовые серверные блоки, а затем посмотрите на директивы server_name в блоках сервера, которые соответствует IP: порт. Поэтому, если запрос, содержащий правильный «порт», заканчивается в неправильной среде, это имеет какое-то отношение к приложению или к пассажирским директивам.