2016-01-11 8 views
0

Я настраиваю 301 сервер переадресации для сайтов, которые я размещаю. Когда я получаю нового клиента, я не хочу редактировать список доменов в блоке сервера ниже. Вместо жестко закодированного домена в конфигурации nginx я хочу перенаправить anydomain-here.com на 301 -> www.anydomain-here.comNginx 301 Перенаправление по переменной

Все домены, которые являются голыми (например, domain.com), будут перенаправлены на www.domain.com

server { 
    server_name domain-requested.com; 
    rewrite ^/(.*)$ http://www.domain-requested.com/$1 permanent; 
} 

В приведенном выше примере можно ли изменить запрос домена на переменную? Это позволит серверу перенаправлять любой сайт, на котором нет субдомена, например www.

ответ

2

Вы можете использовать карту, чтобы установить переменную, если был использован голый домен:

map $host $anydomain_here { 
    # capture bare domain & store in variable $anydomain_here 
    ~^(?<anydomain>[^\.]+)\.com$ $anydomain; 
} 

server { 
    listen 80 default_server; 
    server_name _; 

    if ($anydomain_here) { 
     # redirect if a bare domain was matched 
     return 301 $scheme://www.$anydomain_here.com$uri; 
    } 
} 
+0

Это работает отлично - я даже не думаю, что делать это таким образом! Спасибо, что помогли и дали мне кое-что, чтобы учиться! – dingalingchickenwiing

+0

Я рад, что вы сочли это полезным! Nginx - это весело. Существует так много разных способов сделать что-то. –

0

Вы можете избавиться, по крайней мере, одного закодированного доменного имени с Nginx 1.4.6:

rewrite ^/(.*)$ http://www.$server_name/$1 permanent; 

Вы могли бы абстрактным, что дальше, поместив его включаемый файл, который все блоки сервера включают в себя. Вы не можете сделать лучше, чем с помощью Nginx, потому что rewrite не разрешается объявлять в контексте http для применения к нескольким блокам server.

Некоторые другие идеи, рассмотреть следующие вопросы:

  • Используйте шаблонную систему для управления конфиги Nginx.
  • Многие службы DNS предоставляют услуги перенаправления HTTP, поэтому их веб-серверы будут получать запрос и получать перенаправления.

Я использовал оба подхода выше себя. Недостатком использования DNS-провайдеров для перенаправления HTTP является то, что они не обрабатывают входящие запросы SSL, но это только недостаток, если вы собираетесь покупать и устанавливать второй сертификат SSL только для того, чтобы самостоятельно обрабатывать переадресацию HTTPS во втором домене.

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