Nginx redirect (на https, с www на без www, 301 редирект)

В Nginx версий до 0.9.1 переадресация (301 редирект) может задаваться следующим образом:

 

server {
listen 80;
server_name example.com;

rewrite ^ http://example-site.com$request_uri?;
}

 

В современных версиях веб-сервера, согласно официальной документации в Nginx redirect нужно настраивать используя return с указанием кода HTTP ответа (301 или 302)

 

server {
listen 80;
server_name example.com;
return 301 http://$host$request_uri;
}

 

В примере приведен пример настройки переадресации все запросов к страницам одного сайта на страницы другого сайта.

 

 

Nginx редирект с www на без www

server {
listen 80;
server_name www.example.com;
return 301 http://example.com$request_uri;
}

 

 

Nginx редирект на https

server {
listen 80;
server_name www.example.com;
return 301 https://example.com$request_uri;
}

или

server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}

В последнем случае редирект будет отрабатывать для www.example.com и example.com, все запросы будут направляться на имя без www, доступную по https.

 

Если переадресация нужна только для example.com без www, то www.example.com можно указать в качестве server_name в отдельной специально созданной секции конфигурационного файла

 

server {
listen 80;
server_name www.example.com;

}

 

Также часто возникает необходимость переадресовывать запросы ко всем доменам в конфигах на один, сделать это можно задав две секции server и директиву default_server, под которую будут попадать все имена сайтов кроме заданных непосредственно (example.com и www.example.com в примере).

 

server {
listen 80;
server_name example.com www.example.com;

}

 

server {
listen 80 default_server;
server_name _;
return 301 http://example.com$request_uri;
}

 

Если на сервере используется конфигурация Nginx + Apache, Nginx + Unicorn или подобная редирект всегда настраивается для того пакета, который первым обрабатывает запрос принимая его непосредственно от пользователя

 

netstat -nltp | grep 80

 

Для большинства конфигураций в выводе будет именно рассматриваемый веб-сервер — если это так, переадресацию нужно настраивать для него.