Показано с 1 по 1 из 1

Тема: Баг с кастомным шаблоном Nginx

  1. #1
    Member
    Регистрация
    11.12.2014
    Сообщений
    80

    По умолчанию Баг с кастомным шаблоном Nginx

    Здравствуйте, Планируется перевод всех сайтов на https и встала задача сделать принудительный редирект 301 с HTTP на HTTPS, и c HTTPS с WWW на HTTPS без WWW. Решил сделать все на уровне шаблонизатора. Скопировал из default в templates файлы: nginx-vhosts.template и nginx-vhosts-ssl.template (ниже привожу пример конфигурации). В общем проблема в том, что в основной server не добавляется server_name {% $NAME %}; и, видимо, по этой же причине, при редактировании WWW-домена происходит дублирование основного server в конец конфига. Заметил, что если убрать из nginx-vhosts.template всю внутреннюю часть конструкции {% else %}, то все работает правильно. Или я не правильно понял как работает шаблонизатор или тут какой-то баг.

    nginx-vhosts.template
    PHP код:
    {% if $SSL == on %}

    {% 
    import etc/templates/nginx-custom-ssl.template %}

    server {
        
    server_name {% $ALIASES %};
        
    listen {% $NGINX_SSL_LISTEN_ON %} ssl http2;
        
    ssl on;
        
    ssl_certificate [% $SSL_CRT_BUNDLE_PATH %];
        
    ssl_certificate_key [% $SSL_KEY_PATH %];
        
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4:!RSA+3DES;
        
    ssl_prefer_server_ciphers on;
        
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        return 
    301 https://{% $NAME %}$request_uri;
    }

    server {
        
    server_name {% $NAME %} [% $ALIASES %];
        
    listen {% $NGINX_LISTEN_ON %};
        return 
    301 https://{% $NAME %}$request_uri;
    }

    {% else %}

    {% 
    import etc/templates/nginx-custom.template %}

    server {
        
    server_name {% $ALIASES %};
        
    listen {% $NGINX_LISTEN_ON %};
        return 
    301 http://{% $NAME %}$request_uri;
    }

    server {
        
    server_name {% $NAME %} [% $ALIASES %];
        
    listen {% $NGINX_SSL_LISTEN_ON %} ssl http2;
        
    ssl on;
        
    ssl_certificate [% $SSL_CRT_BUNDLE_PATH %];
        
    ssl_certificate_key [% $SSL_KEY_PATH %];
        
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4:!RSA+3DES;
        
    ssl_prefer_server_ciphers on;
        
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        return 
    301 http://{% $NAME %}$request_uri;
    }

    {% endif %} 
    nginx-custom-ssl.template
    PHP код:
    server {
        
    server_name {% $NAME %};
        
    ssl on;
        
    ssl_certificate [% $SSL_CRT_BUNDLE_PATH %];
        
    ssl_certificate_key [% $SSL_KEY_PATH %];
        
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4:!RSA+3DES;
        
    ssl_prefer_server_ciphers on;
        
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    {% if 
    $HSTS == on %}
        
    add_header Strict-Transport-Security "max-age=31536000;";
    {% endif %}
    {% if 
    $SSL_DHPARAM == 2048 %}
        
    ssl_dhparam /etc/ssl/certs/dhparam2048.pem;
    {% 
    elif $SSL_DHPARAM == 4096 %}
        
    ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
    {% endif %}
        
    charset [% $CHARSET %];
    {% if 
    $DIRINDEX != "" %}
        
    index [% $DIRINDEX %];
    {% endif %}
        
    disable_symlinks if_not_owner from=$root_path;
        include {% 
    $NGINX_VHOST_INCLUDES %};
        include {% 
    $INCLUDE_RESOURCE_PATH %};
    {% if 
    $LOG_ACCESS == on %}
        
    access_log [% $ACCESS_LOG_PATH %];
    {% 
    elif $NO_TRAFF_COUNT == on %}
        
    access_log off;
    {% endif %}
    {% if 
    $LOG_ERROR == on %}
        
    error_log {% $ERROR_LOG_PATH %} notice;
    {% else %}
        
    error_log /dev/null crit;
    {% endif %}
    {% if 
    $SSI == on %}
        
    ssi on;
    {% endif %}
        
    set $root_path {% $VIRTUAL_DOCROOT %};
    {% if 
    $AUTOSUBDOMAIN != off and $AUTOSUBDOMAIN != "" %}
    {% if 
    $AUTOSUBDOMAIN == autosubdomain_subdir %}
        
    set $subdomain "";
    {% 
    elif $AUTOSUBDOMAIN == autosubdomain_dir %}
            
    set $subdomain {% $AUTOSUBDOMAIN_SUBDOMAIN_PART %};
    {% endif %}
        if (
    $host ~* ^((.*).{% $NAME %})$) {
    {% if 
    $AUTOSUBDOMAIN == autosubdomain_dir %}
            
    set $subdomain $1;
    {% 
    elif $AUTOSUBDOMAIN == autosubdomain_subdir %}
            
    set $subdomain $2;
    {% endif %}
        }
        
    root $root_path/$subdomain;
    {% else %}
        
    root $root_path;
    {% endif %}
    {% if 
    $FOREGROUND == on %}
        
    listen {% $NGINX_SSL_LISTEN_ON %} ssl http2 default_server;
    {% else %}
        
    listen {% $NGINX_SSL_LISTEN_ON %} ssl http2;
    {% endif %}
    {% if 
    $USER_RESOURCES %}
        include {% 
    $USER_NGINX_RESOURCES_PATH %};
    {% endif %}
    {% if 
    $SRV_GZIP == on %}
        
    gzip on;
        
    gzip_comp_level [% $GZIP_LEVEL %];
        
    gzip_disable "msie6";
        
    gzip_types [% $GZIP_TYPES %];
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE != on and $SRV_CACHE == on %}
        
    expires [% $EXPIRES_VALUE %];
    {% endif %}
        
    location / {
    {% if 
    $PHP == on %}
            
    location ~ [^/]\.ph(p\d*|tml)$ {
    {% if 
    $PHP_MODE == php_mode_fcgi_nginxfpm %}
                
    try_files /does_not_exists @php;
    {% else %}
                
    try_files /does_not_exists @fallback;
    {% endif %}
            }
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE == on %}
            
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    {% if 
    $SRV_CACHE == on %}
                
    expires [% $EXPIRES_VALUE %];
    {% endif %}
                
    try_files $uri $uri/ @fallback;
            }
            
    location / {
                
    try_files /does_not_exists @fallback;
            }
    {% endif %}
        }
    {% if 
    $ANALYZER != off and $ANALYZER != "" %}
        
    location {% $WEBSTAT_LOCATION %} {
            
    charset [% $WEBSTAT_ENCODING %];
            
    index index.html;
    {% if 
    $PHP == on %}
            
    location ~ [^/]\.ph(p\d*|tml)$ {
    {% if 
    $PHP_MODE == php_mode_fcgi_nginxfpm %}
                
    try_files /does_not_exists @php;
    {% else %}
                
    try_files /does_not_exists @fallback;
    {% endif %}
            }
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE == on %}
            
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    {% if 
    $SRV_CACHE == on %}
                
    expires [% $EXPIRES_VALUE %];
    {% endif %}
                
    try_files $uri $uri/ @fallback;
            }
            
    location {% $WEBSTAT_LOCATION %} {
                
    try_files /does_not_exists @fallback;
            }
    {% endif %}
        }
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE == on %}
        
    location @fallback {
            
    proxy_pass {% $BACKEND_BIND_URI %};
            
    proxy_redirect {% $BACKEND_BIND_URI %} /;
            
    proxy_set_header Host $host;
            
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
    proxy_set_header X-Forwarded-Proto $scheme;
            
    proxy_set_header X-Forwarded-Port $server_port;
    {% if 
    $NO_TRAFF_COUNT == on %}
            
    access_log off;
    {% endif %}
        }
    {% endif %}
    {% if 
    $REDIRECT_TO_PHPFPM == on %}
        
    location @php {
            
    fastcgi_index index.php;
            
    fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f {% $EMAIL %}";
            
    fastcgi_pass {% $PHPFPM_USER_SOCKET_PATH %};
            
    fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
            
    try_files $uri =404;
            include 
    fastcgi_params;
        }
    {% endif %}

    nginx-custom.template
    PHP код:
    server {
        
    server_name {% $NAME %};
        
    charset [% $CHARSET %];
    {% if 
    $DIRINDEX != "" %}
        
    index [% $DIRINDEX %];
    {% endif %}
        
    disable_symlinks if_not_owner from=$root_path;
        include {% 
    $NGINX_VHOST_INCLUDES %};
        include {% 
    $INCLUDE_RESOURCE_PATH %};
    {% if 
    $LOG_ACCESS == on %}
        
    access_log [% $ACCESS_LOG_PATH %];
    {% 
    elif $NO_TRAFF_COUNT == on %}
        
    access_log off;
    {% endif %}
    {% if 
    $LOG_ERROR == on %}
        
    error_log {% $ERROR_LOG_PATH %} notice;
    {% else %}
        
    error_log /dev/null crit;
    {% endif %}
    {% if 
    $SSI == on %}
        
    ssi on;
    {% endif %}
    {% if 
    $REDIRECT_HTTP == on %}
        return 
    301 https://$host:{% $SSL_PORT %}$request_uri;
    {% endif %}
        
    set $root_path {% $VIRTUAL_DOCROOT %};
    {% if 
    $AUTOSUBDOMAIN != off and $AUTOSUBDOMAIN != "" %}
    {% if 
    $AUTOSUBDOMAIN == autosubdomain_subdir %}
        
    set $subdomain "";
    {% 
    elif $AUTOSUBDOMAIN == autosubdomain_dir %}
            
    set $subdomain {% $AUTOSUBDOMAIN_SUBDOMAIN_PART %};
    {% endif %}
        if (
    $host ~* ^((.*).{% $NAME %})$) {
    {% if 
    $AUTOSUBDOMAIN == autosubdomain_dir %}
            
    set $subdomain $1;
    {% 
    elif $AUTOSUBDOMAIN == autosubdomain_subdir %}
            
    set $subdomain $2;
    {% endif %}
        }
        
    root $root_path/$subdomain;
    {% else %}
        
    root $root_path;
    {% endif %}
    {% if 
    $FOREGROUND == on %}
        
    listen {% $NGINX_LISTEN_ON %} default_server;
    {% else %}
        
    listen {% $NGINX_LISTEN_ON %};
    {% endif %}
    {% if 
    $USER_RESOURCES %}
        include {% 
    $USER_NGINX_RESOURCES_PATH %};
    {% endif %}
    {% if 
    $SRV_GZIP == on %}
        
    gzip on;
        
    gzip_comp_level [% $GZIP_LEVEL %];
        
    gzip_disable "msie6";
        
    gzip_types [% $GZIP_TYPES %];
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE != on and $SRV_CACHE == on %}
        
    expires [% $EXPIRES_VALUE %];
    {% endif %}
        
    location / {
    {% if 
    $PHP == on %}
            
    location ~ [^/]\.ph(p\d*|tml)$ {
    {% if 
    $PHP_MODE == php_mode_fcgi_nginxfpm %}
                
    try_files /does_not_exists @php;
    {% else %}
                
    try_files /does_not_exists @fallback;
    {% endif %}
            }
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE == on %}
            
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    {% if 
    $SRV_CACHE == on %}
                
    expires [% $EXPIRES_VALUE %];
    {% endif %}
                
    try_files $uri $uri/ @fallback;
            }
            
    location / {
                
    try_files /does_not_exists @fallback;
            }
    {% endif %}
        }
    {% if 
    $ANALYZER != off and $ANALYZER != "" %}
        
    location {% $WEBSTAT_LOCATION %} {
            
    charset [% $WEBSTAT_ENCODING %];
            
    index index.html;
    {% if 
    $PHP == on %}
            
    location ~ [^/]\.ph(p\d*|tml)$ {
    {% if 
    $PHP_MODE == php_mode_fcgi_nginxfpm %}
                
    try_files /does_not_exists @php;
    {% else %}
                
    try_files /does_not_exists @fallback;
    {% endif %}
            }
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE == on %}
            
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    {% if 
    $SRV_CACHE == on %}
                
    expires [% $EXPIRES_VALUE %];
    {% endif %}
                
    try_files $uri $uri/ @fallback;
            }
            
    location {% $WEBSTAT_LOCATION %} {
                
    try_files /does_not_exists @fallback;
            }
    {% endif %}
        }
    {% endif %}
    {% if 
    $REDIRECT_TO_APACHE == on %}
        
    location @fallback {
            
    proxy_pass {% $BACKEND_BIND_URI %};
            
    proxy_redirect {% $BACKEND_BIND_URI %} /;
            
    proxy_set_header Host $host;
            
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
    proxy_set_header X-Forwarded-Proto $scheme;
            
    proxy_set_header X-Forwarded-Port $server_port;
    {% if 
    $NO_TRAFF_COUNT == on %}
            
    access_log off;
    {% endif %}
        }
    {% endif %}
    {% if 
    $REDIRECT_TO_PHPFPM == on %}
        
    location @php {
            
    fastcgi_index index.php;
            
    fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f {% $EMAIL %}";
            
    fastcgi_pass {% $PHPFPM_USER_SOCKET_PATH %};
            
    fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
            
    try_files $uri =404;
            include 
    fastcgi_params;
        }
    {% endif %}

    Последний раз редактировалось Scumtron; 11.10.2017 в 07:24.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •