nginx: [emerg] неизвестная переменная “name”, nginx: [emerg] неизвестная переменная “ssl_preread_server_name”

Вопрос или проблема

Я пытаюсь настроить свой собственный Stealth VPN сервер, используя NGINX 1.18 в Debian 11. Следую этому руководству, но многие директивы не работают. Проблема в том, что когда я выполняю команду тестирования nginx -t, вывод следующий:

 - nginx: [emerg] unknown "ssl_preread_server_name" variable

Я изменил эту переменную с $ssl_preread_server_name на $server_name, если проблема только с этой конкретной переменной, и чтобы увидеть, есть ли другие ошибки, тест прошел, но была найдена другая ошибка переменной:

 - nginx: [emerg] unknown "name" variable`

Это находится в моем последнем блоке сервера в файле nginx.conf, поэтому я не ожидал найти какие-либо другие ошибки. Я проверил оригинальную базу данных переменных Nginx, и переменные $name и $ssl_preread_server_name официальные и существуют. Руководство, которому я следовал, говорит, что их следует назначать таким образом, и других руководств в интернете нет, так что я немного застрял.

На данный момент у меня проблема только с этими двумя переменными. Они находятся в блоке map и последнем блоке server. Большое спасибо за вашу помощь

Это весь мой код:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

        ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
        ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

        ##
        # Servers
        ##
        
        server {
            # server_name 206.189.21.228;
              listen 127.0.0.1:8000;
        }

        ##
        # map
        ##

        map $ssl_preread_server_name $name {
            default https;
            206.189.21.228 vpn;
        }

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

stream { 
     ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
     ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    
     upstream https {
         server unix:/etc/nginx/nginx_writing;
         }
    
     upstream vpn {
         server unix:/etc/openvpn/openvpn_writing;
     }
    
     server {
         listen unix:/etc/nginx/nginx_writing ssl;
         # openvpn doesn't support unix-sockets
         proxy_pass 127.0.0.1:1194;
     }
    
     server {
         listen unix:/etc/nginx/nginx_writing2 ssl;
         # could also use a unix-socket here
         proxy_pass 127.0.0.1:8000;
     }
    
    server { 
        listen [::]:443 ipv6only=off;
        proxy_protocol on;
        proxy_pass $name;
    }

}

Проблема в том, что ваш nginx не имеет необходимого модуля ngx_stream_ssl_preread. Вам нужно найти сборку nginx, в которую включен этот модуль.

Ответ или решение

Похоже, вы столкнулись с проблемой при настройке вашего сервера Stealth VPN с использованием NGINX 1.18 на Debian 11. Ошибки, которые вы наблюдаете, такие как nginx: [emerg] unknown "ssl_preread_server_name" variable и nginx: [emerg] unknown "name" variable, указывают на отсутствие необходимых модулей или некорректную конфигурацию.

Диагностика проблемы

  1. Отсутствие модуля ngx_stream_ssl_preread:
    Ошибка с переменной $ssl_preread_server_name связана с тем, что ваш текущий билд NGINX не включает модуль ngx_stream_ssl_preread. Этот модуль необходим для предварительного чтения имени сервера SSL и использования переменных, связанных с ним.

  2. Некорректная переменная $name:
    Ошибка с переменной $name указывает на то, что такой переменной не существует в контексте вашей конфигурации. Обычно переменные создаются и назначаются в блоках map, но должны быть поддержаны самим NGINX, что в вашем случае не происходит.

Рекомендации по решению проблемы

Пошаговые действия:

  1. Установите или скомпилируйте NGINX с нужными модулями:

    • Проверьте, есть ли в вашем дистрибутиве Debian 11 возможность установить NGINX с необходимыми модулями. Иногда можно найти пакеты в репозиториях, которые уже включают поддержку нужных модулей.
    • Если таких пакетов нет, вам нужно будет скомпилировать NGINX вручную, добавив в него модуль ngx_stream_ssl_preread. Это можно сделать примерно следующим образом:

      sudo apt-get update
      sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
      wget http://nginx.org/download/nginx-1.18.0.tar.gz
      tar -zxvf nginx-1.18.0.tar.gz
      cd nginx-1.18.0
      ./configure --with-stream_ssl_preread_module
      make
      sudo make install
  2. Перепроверьте конфигурацию блока map:

    • Убедитесь, что структура блока map корректна и что переменная $ssl_preread_server_name будет корректно заполняться в процессе.
  3. Альтернативы и обходные пути:

    • Если вы не можете обновить или перекомпилировать NGINX, существует альтернативный способ изолировать передаваемый трафик без использования модуля ssl_preread. Однако это может потребовать изменения вашей архитектуры и выбора других инструментов или прокси-серверов.

Заключение

Ошибка, с которой вы столкнулись, является следствием отсутствия соответствующих модулей в вашем дискретном билде NGINX. Это обычная проблема при настройке сложных конфигураций, особенно если вы работаете с нестандартными решениями, такими как Stealth VPN. Рекомендую следовать инструкциям по сборке NGINX с необходимыми модулями, что позволит избежать многих подобных ошибок и обеспечит правильную обработку SSL-трафика в вашем сетевом окружении.

Оцените материал
Добавить комментарий

Капча загружается...