2012-05-22 2 views
0

Предположим, у меня есть пара серверов, которые из-за способа развертывания должны использовать тот же самый nginx.conf. Один из серверов находится на staging.someserver.com, а другой - на www.someserver.com.Nginx: переписать все поддомены на www, кроме одного?

То, что я хочу, это одна переписывают линия или если условие, которое будет перенаправлять все на домене (в основном WWW и без WWW на HTTP и не-WWW по протоколу HTTPS) к https://www.someserver.com/, и http://staging.someserver.com/ для перенаправления https://staging.someserver.com/ , но не до https://www.someserver.com/. Как я могу это сделать?

+0

По существу, мне нужна правильная строка регулярных выражений, которая будет переписывать для www и не-www, но не для постановки. Однако я не могу понять, как nginx обрабатывает строку запроса. –

ответ

-2

Я не знаю, если это строго лучший способ сделать это, но я понял, что-то из:

server { 
    listen 443 default deferred; 

    # ... 

    if ($host !~ (staging)|(www).*) 
     rewrite ^(.*) https://www.someserver.com$1 permanent; 
    } 
} 

server { 
    listen 80; 

    # ... 

    if ($host !~ staging.*) {         
     rewrite ^(.*) https://www.someserver.com$1 permanent;  
    }               
    if ($host ~ staging.*) {          
     rewrite ^(.*) https://staging.someserver.com$1 permanent; 
    }               
} 
+1

Это не так, [если это зло] (http://wiki.nginx.org/IfIsEvil). И [здесь ваше дело] (http://wiki.nginx.org/Pitfalls#Server_Name). –

1

Это трюк от конфигурации Nginx: Первый блок сервер HTTP блока будет «настройка по умолчанию».

Таким образом, вы можете перенаправить в первый серверный блок все и создать еще один серверный блок с вашим www. конфигурации!

Это лучшее решение.

+0

спасибо за «Это трюк в конфигурации Nginx: первый серверный блок блока HTTP будет« по умолчанию ». «! – mkk

Смежные вопросы