2013-11-19 6 views
0

У меня возникли проблемы с настройкой моей конфигурации nginx.Nginx config redirect www

Мой конфиг должен использовать https и www. Некоторые поддомены api.domain.com, api.staging.domain.com разрешено. Последнее упомянутое в настоящее время настроено в другом файле conf, а не здесь.

В настоящее время моя проблема заключается в том, что это, по-видимому, позволяет использовать www. Мне нужно, чтобы www 301 был перенаправлен на www. Субдомен www устанавливается как cname в конфигурации dns.

Может кто-нибудь помочь мне?

server { 
     listen   54.00.00.00; 
     server_name  54.00.00.00; 
     rewrite   .* https://domain.com$request_uri permanent; 
} 
server { 
     listen   80; 
     return   301 https://$host$request_uri; 
} 
server { 
     listen   443 default ssl; 
     server_name  domain.com api.domain.com; 
     root   /var/www/domain.com/current/web; 

     ## 
     # Certificate Settings 
     ## 

     ssl_certificate   /etc/nginx/ssl/domain.com.pem; 
     ssl_certificate_key  /etc/nginx/ssl/domain.com.key; 

ответ

0

Вы проблема заключается в том, что это server

server { 
    listen   80; 
    return   301 https://$host$request_uri; 
} 

Похожее все серверы, даже те, с www виду, что если вы запрашиваете http://www.example.com, $host будет www.example.com, так что вы в конечном итоге перенаправляется на https версия с www.

Если вы хотите сделать задвижку все и до сих пор полосы www от тех, у кого они есть, я предлагаю, было бы лучше использовать регулярное выражение в имени сервера

server { 
    server_name ~^(www\.)?(?<domain>.+)$; 
    return 301 https://$domain$request_uri; 
}