Подскажите по настройке редиректа в Nginx, с www на без www

Главные вкладки

Аватар пользователя Valeratal Valeratal 6 декабря 2015 в 18:51

Пытаюсь настроить редирект в нжинсе

Но чет не получается

Вот что сейчас

#user 'hrportal' virtual host 'hr-portal.ru' configuration file

server {
    listen       80;
    server_name  www.hr-portal.ru;
    return       301 http://hr-portal.ru.ru$request_uri;
}
server {
    server_name hr-portal.ru www.hr-portal.ru;
    charset off;
        disable_symlinks if_not_owner from=$root_path;
        index index.html index.php;
        root $root_path;
        set $root_path /var/www/hrportal/data/www/hr-portal.ru;
        ssi on;
        access_log /var/www/httpd-logs/hr-portal.ru.access.log ;
        error_log /var/www/httpd-logs/hr-portal.ru.error.log notice;
        include /etc/nginx/vhosts-includes/*.conf;
и тд

Если я убираю "www.hr-portal.ru" в

server_name hr-portal.ru www.hr-portal.ru;

То по урлу с www открывается другой сайт

Ничего не понимаю, куда копать

пробовал верхнюю секцию server писать так, но тоже не работает

server {
    listen       80;
    server_name  www.hr-portal.ru.ru;
    return       301 http://hr-portal.ru.ru$request_uri;
}

Комментарии

Аватар пользователя Valeratal Valeratal 6 декабря 2015 в 23:53

Да по всякому пробовал

вот так вписал

server {
  server_name www.hr-portal.ru;
  rewrite (.*) http://hr-portal.ru$1;
}
server {
    server_name hr-portal.ru;
    charset off;
        disable_symlinks if_not_owner from=$root_path;
        index index.html index.php;
        root $root_path;
        set $root_path /var/www/hrportal/data/www/hr-portal.ru;
        ssi on;
и тд

Теперь урл
www.hr-portal.ru
открывает другой сайт

Аватар пользователя tlito tlito 7 декабря 2015 в 9:24

у вас значит в определении хоста не указан www:
https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/ - тут нету а у меня есть
http://tlito.ru/node/278/ - вот тут обратите внимание на строки

server {
    server_name www.EXAMPLE.COM .EXAMPLE.COM;
    root /var/www/EXAMPLE.COM/www;

на строке server_name надо оба домена: www и без www
ну а редирект тут например https://www.digitalocean.com/community/tutorials/how-to-redirect-www-to-...
и тут https://easyengine.io/tutorials/nginx/www-non-www-redirection/

Аватар пользователя Valeratal Valeratal 7 декабря 2015 в 10:42

Ну правильно, я вписываю и домен с www

Прямо сейчас вот так, по www открывается мой сайт, но редиректа нет

server {
  server_name www.hr-portal.ru;
  rewrite (.*) http://hr-portal.ru$1;
}
server {
    server_name hr-portal.ru www.hr-portal.ru;
    charset off;
        disable_symlinks if_not_owner from=$root_path;
        index index.html index.php;
        root $root_path;
        set $root_path /var/www/hrportal/data/www/hr-portal.ru;
        ssi on;
и тд
Аватар пользователя tlito tlito 7 декабря 2015 в 12:47

вставьте так и рестарьте нгиникс

server {
  server_name www.hr-portal.ru *.hr-portal.ru;

  rewrite (.*) http://hr-portal.ru$1;

}

server {

    server_name hr-portal.ru www.hr-portal.ru;

    charset off;

        disable_symlinks if_not_owner from=$root_path;

        index index.html index.php;

        root $root_path;

        set $root_path /var/www/hrportal/data/www/hr-portal.ru;

        ssi on;

Аватар пользователя tlito tlito 7 декабря 2015 в 12:59

вот мой конфиг, в котором нормально работает редирект с ввв на без ввв. (домен - а ля экзампл)

/etc/nginx/sites-available$ cat tli.co
server {
    listen                  80;
    server_name             www.tli.co tli.co;
 
    set                     $main_host          'tli.co';
 
    if ($host != $main_host) {
        rewrite             ^(.*)$              http://$main_host$1     permanent;
        break;
    }
 
    access_log              /var/log/nginx/tli.co.access.log;
    error_log               /var/log/nginx/tli.co.error.log;
 
    root                    /var/www/$main_host/www;
    index                   index.php index.html index.htm;
 
    location ~ \.php$ {
        include             /etc/nginx/conf.d/fastcgi_params.conf;
 
        fastcgi_param       SCRIPT_FILENAME     /var/www/$main_host/www$fastcgi_script_name;
        fastcgi_param       DOCUMENT_ROOT       /var/www/$main_host/www;
 
        fastcgi_param       PHP_ADMIN_VALUE     upload_tmp_dir=/var/www/$main_host/tmp/upload;
        fastcgi_param       PHP_ADMIN_VALUE     session.save_path=/var/www/$main_host/tmp/sessions;
    }
 
    location ~ /\. {
        deny                all;
        access_log          off;
        log_not_found       off;
    }

    location / {
        try_files           $uri    @cache;
    }

    location @cache {
        if ($http_cookie ~ "DRUPAL_UID") { return 405; }
        if ($request_method !~ ^(GET|HEAD)$ ) { return 405; }
        error_page 405 = @drupal;
        gzip on;
        add_header Expires "Tue, 22 Sep 1974 08:00:00 GMT";
        add_header Cache-Control "must-revalidate, post-check=0, pre-check=0";
        try_files /cache/normal/$host/${uri}_.html /cache/perm/$host/${uri}_.css /cache/perm/$host/${uri}_.js /cache/$host/0$uri.html /cache/$host/0${uri}/index.html @drupal;
    }

    location @drupal {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    location ~ ^/images/styles/ {
        try_files $uri @rewrite;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

}

вам надо обратить внимание на директиву server_name в которой два параметра www.tli.co и *.tli.co
и эту секцию

if ($host != $main_host) {

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

        break;

    }

кстати использование переменной в нгиникс - очень удобно.

Аватар пользователя tlito tlito 8 декабря 2015 в 21:02

только сегодня обнаружил, что в этом конфиге была ошибка в секции location @cache {} - из-за чего буст показывал кеш первой страницы категории на всех остальных страницах пейджера (не учитывался параметр ?page=2 ...)
то есть надо исправить так:

try_files /cache/normal/$host/${uri}_${args}.html /cache/perm/$host/${uri}_.css /cache/perm/$host/${uri}_.js /cache/$host/0$uri.html /cache/$host/0${uri}/index.html @drupal;

добавил переменную ${args} так работает кэш буст