Page 1 of 1

Web-темплейты для nginx + php-fpm с 301 редиректом на https без www и DNS-темплейт для Yandex.ПДД

Posted: Sat Feb 11, 2017 11:28 pm
by denisemenov
Всем привет.
Третьи сутки бился над задачей. В итоге, пока писал этот пост с мольбой о помощи, всё настроил и почти всё работает. :)
Оставляю инфу на случай, если кому-то понадобится.

На всякий случай:
Все действия вы делаете на свой страх и риск. Автор не несет ответственности за возможные последствия.

CentOS 7 + nginx + php-fpm (php7.1)
Настроил свой неймсервер. Если надо, могу рассказать как, но вроде в инете всё есть.
Поправил dns-темплейт child-ns для pdd на yandex.
/usr/local/vesta/data/templates/dns/yandex-child-ns.tplShow

Code: Select all

ID='1' RECORD='@' TYPE='NS' PRIORITY='' VALUE='ns1.%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='2' RECORD='@' TYPE='NS' PRIORITY='' VALUE='ns2.%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='3' RECORD='@' TYPE='A' PRIORITY='' VALUE='%ip%'  SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='4' RECORD='*' TYPE='A' PRIORITY='' VALUE='%ip%'  SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='5' RECORD='ns1' TYPE='A' PRIORITY='' VALUE='%ip%'  SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='6' RECORD='ns2' TYPE='A' PRIORITY='' VALUE='%ip%'  SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='7' RECORD='www' TYPE='CNAME' PRIORITY='' VALUE='%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='8' RECORD='mail' TYPE='CNAME' PRIORITY='' VALUE='domain.mail.yandex.net.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='9' RECORD='@' TYPE='MX' PRIORITY='10' VALUE='mx.yandex.net.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='10' RECORD='@' TYPE='TXT' PRIORITY='' VALUE='"v=spf1 a mx ip4:%ip% include:_spf.yandex.net ?all"' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='11' RECORD='_dmarc' TYPE='TXT' PRIORITY='' VALUE='"v=DMARC1; p=none"' SUSPENDED='no' TIME='%time%' DATE='%date%'
Сделал и для остальных доменов dns-темплейт, который на две A-записи для ns1/ns2 отличается от предыдущего.
/usr/local/vesta/data/templates/dns/yandex.tplShow

Code: Select all

ID='1' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns1%.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='2' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns2%.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='3' RECORD='@' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='4' RECORD='*' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='5' RECORD='www' TYPE='CNAME' PRIORITY='' VALUE='%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='6' RECORD='mail' TYPE='CNAME' PRIORITY='' VALUE='domain.mail.yandex.net.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='7' RECORD='@' TYPE='MX' PRIORITY='10' VALUE='mx.yandex.net.' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='8' RECORD='@' TYPE='TXT' PRIORITY='' VALUE='"v=spf1 a mx ip4:%ip% include:_spf.yandex.net ?all"' SUSPENDED='no' TIME='%time%' DATE='%date%'
ID='9' RECORD='_dmarc' TYPE='TXT' PRIORITY='' VALUE='"v=DMARC1; p=none"' SUSPENDED='no' TIME='%time%' DATE='%date%'
Правда тут ручками надо переносить DKIM из pdd.yandex.ru.
Если кто-то знает, как автоматизировать это - welcome в комментарии.

Дальше надо настроить Web Template для NGINX.
Нужно сделать так, чтобы была переадресация со всех адресов в поле alias при создании домена на httpS://%domain_idn%. Без www. Например, c https://www.denisemenov.com, http://denisemenov.ru и их вариации на https://denisemenov.com.
Лежать сайты будут в папке public_html.
И поддержка Lets Encrypt обязательна.
Так же удаляем все index, .html и закрывающие слэши из url.
/usr/local/vesta/data/templates/web/nginx/php-fpm/https-without-…Show

Code: Select all

server {
    listen      %ip%:%web_port%;
    server_name %domain_idn% %alias_idn%;
    return      301 https://%domain_idn%$request_uri;
    include     %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt;
}
/usr/local/vesta/data/templates/web/nginx/php-fpm/https-without-…Show

Code: Select all

server {
    listen      %ip%:%web_ssl_port% http2 ssl;
    server_name %alias_idn%;
    return 301  https://%domain_idn%$request_uri;
    
    ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
}

server {
    listen      %ip%:%web_ssl_port% http2 ssl;
    server_name %domain_idn%;
    root        %sdocroot%;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/%domain%.log combined;
    access_log  /var/log/nginx/domains/%domain%.bytes bytes;
    error_log   /var/log/nginx/domains/%domain%.error.log error;

    ssl                  on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;

    location / {
        try_files   $uri/index.html $uri.html $uri/ $uri =404;   
        
        rewrite     ^(/.*)\.html(\?.*)?$ $1$2 permanent;
        rewrite     ^(/.*)index(\?.*)?$ $1$2 permanent;
        rewrite     ^/(.*)/$ /$1 permanent;     

        location ~ \.php$ {
            try_files       $uri $uri/ =404;

            fastcgi_pass    %backend_lsnr%;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;

            include         /etc/nginx/fastcgi_params;
        }

        location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|bmp|ico|js|css|woff|ttf|otf|svg|woff2|eot|txt)$ {
            expires max;
        }
    }

    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd|ht|svn|git|hg|bzr)$" {
        deny    all;
        return  404;
    }

    location /vstats/ {
        alias   %home%/%user%/web/%domain%/stats/;
        include %home%/%user%/web/%domain%/stats/auth.conf*;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     %home%/%user%/conf/web/snginx.%domain_idn%.conf*;
    include     %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt;
}