Восстановление доступа к веб интерфейсу

После некорректного подключения платы расширения вебинтерфейс зависает на словах “Восстанавливаем туннель через 10 секунд”
проблемное устройство было отключено физически, а потом и в конфиге /etc/wb-mqtt-serial.conf
systemctl status wb-homeui-backend говорит что сервис активен
так же как и wb-mqtt-serial

во время попыток починить данную проблему был переустановлен nginx и были попытки настроить его конфиг, что тоже может быть причиной отсутствия доступа к вебинтерфейсу
подскажите, что можно предпринять и что проверить?

Добрый день.
А что в логах контроллера?
Пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

Проверьте предварительно что nginx корректно отвечает на своем порту.

прикрепляю файл дигностики
diag_output_AMWEJ2N2_2025-11-13-12.39.15.zip (462,7 КБ)

nginx -t возвращает OK
curl по 127.0.0.1 на 80 порту говорит Connection refused, но на 8123 порту возвращает html страницу

Я вижу что

Nov 13 13:24:20 wirenboard-AMWEJ2N2 nginx[16773]: nginx: configuration file /etc/nginx/nginx.conf test failed

затем после перезапуска

Nov 13 14:22:48 wirenboard-AMWEJ2N2 systemd[1]: Starting A high performance web server and a reverse proxy server...

Успешно запускается. Надо заметить что для доступа через облако сервис должен слушать именно порт 80.
Проверьте что сейчас сконфигурировано? Конфиги сервиса nginx не предполагаются к изменению и в архив не включены.

конфиг /etc/nginx/nginx.conf

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

events {
    worker_connections 768;
    # multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;

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

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

    keepalive_timeout 65;
    gzip on;

    include /etc/nginx/sites-enabled/*;
}

конфиг сайтов /etc/nginx/sites-enabled/default.conf

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;

    server_name _;

    ssl_certificate /etc/ssl/certs/wirenboard.crt;
    ssl_certificate_key /etc/ssl/private/wirenboard.key;

    root /usr/share/wb-webui;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

можно ли где-то скопировать готовые конфиги?

Такого нет по-умолчанию.
Конфиг homeui/backend/configs/usr/share/wb-mqtt-homeui/nginx/listen.conf at master · wirenboard/homeui · GitHub
который инклюдится из конфига "/etc/nginx/includes/default.wb.d/listen.conf"с содержимым

# Default listen configuration for Wiren Board Homeui web interface.
# Replace it with your own if needed.

include /usr/share/wb-mqtt-homeui/nginx/listen.conf;

итого:
cat /etc/nginx/includes/default.wb.d/listen.conf

# Default listen configuration for Wiren Board Homeui web interface.
# Replace it with your own if needed.

include /usr/share/wb-mqtt-homeui/nginx/listen.conf;

cat /etc/nginx/nginx.conf

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

events {
    worker_connections 768;
    # multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;

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

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

    keepalive_timeout 65;
    gzip on;

    include /etc/nginx/sites-enabled/*;
}

cat /usr/share/wb-mqtt-homeui/nginx/listen.conf

listen   80;

все верно?.. но все равно не работает

Покажите пожалуйста то, что отдается на http запрос?

curl -v http://localhost/

*   Trying 127.0.0.1:80...
* connect to 127.0.0.1 port 80 failed: Connection refused
*   Trying ::1:80...
* connect to ::1 port 80 failed: Connection refused
* Failed to connect to localhost port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 80: Connection refused

nginx -t возвращает ОК
systemctl status nginx возвращает active

Проверяю:

curl http://localhost/
<!doctype html>
<html class="no-js">
  <head>
    <meta charset="utf-8">
    <title>Wiren Board Web UI</title>
    <meta name="description" content="">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <base href="/">
    
    

    <style>
        [ng\:cloak], [ng-cloak], [data-ng-cloak],  .ng-cloak, .x-ng-cloak, .ng-hide:not(.ng-hide-animate) {
            display: none !important;
        }
    </style>
  <link href="/css/381.f8403ef50145a6c813a4.css" rel="stylesheet"><link href="/css/main.d65479f5a4bb3578ce2f.css" rel="stylesheet"></head>

  <body ng-app="realHomeuiApp" class="{{theme}}" ng-class="{ 'fullscreen': checkFullscreen(), 'hmi': isHMI }">
  <toast></toast>

  <double-bounce-spinner></double-bounce-spinner>
  <span id="https-setup-label" translate ng-cloak>{{'app.labels.setting-up-https'}}</span>

  <div id="overlay"></div>
  <div id="wrapper" class="fade" ng-class="{ 'wrapper-content-consoleRight': consoleView == 'right' }">
      <div class="wrapper-content">
          <navigation></navigation>

          <div id="page-wrapper">
              <exp-check-widget></exp-check-widget>

              <div class="alert alert-danger" role="alert" ng-cloak ng-controller="AlertCtrl" ng-show="visible">
                  <button type="button" class="close" ng-click="visible = false;"
                          aria-label="Close"><span aria-hidden="true">&times;</span></button>
                  <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
                  <span ng-bind-html="messageHtml"></span>
              </div>
              
              <!-- viewport for child view -->
              <div ng-show='stateIsLoading' ng-cloak>
                  <strong translate>{{'heading.loading'}}</strong>
              </div>
              <ui-view ng-hide='stateIsLoading'></ui-view>
          </div>
      <!-- /#page-wrapper -->
      </div>
      <rules-console></rules-console>
  </div>
  <script defer src="/react.b414548a124e2c3e5c92.js"></script><script defer src="/381.a78202c13f01d123a613.js"></script><script defer src="/main.3dec185475f1f56878a2.js"></script></body>
</html>

Убедитесь пожалуйста что listen.conf читается и обрабатывается.

не совсем понял как это сделать
вы не могли бы подсказать что именно нужно сделать

ls -l /etc/nginx/sites-enabled/

total 0
lrwxrwxrwx 1 root root 34 Nov 13 13:26 wb.conf → /etc/nginx/sites-available/wb.conf
lrwxrwxrwx 1 root root 46 Nov 6 17:58 wb-mqtt-alice-proxy → /etc/nginx/sites-available/wb-mqtt-alice-proxy

здесь отсутствует ссылка на listen.conf, или её здесь и не должно быть?

Я, например, проверяю так:

nginx -T

Ну и как минимум ожидаю в выводе содержимое /usr/share/wb-mqtt-homeui/nginx/listen.conf и /usr/share/wb-mqtt-homeui/nginx/default.conf
Мой файл, для примера:
ng.txt (16,1 КБ)

Собственно я готов помочь, но приводить контроллер из неизвестного состояния - непродуктивно.
То есть ожидаю от вас список всех измененных (отличающихся от умолчального, заводского) состояния конфигов.
То есть все внесенные изменения для того чтобы оценить их влияние.

nginx -T

> nginx: [warn] duplicate extension "xml", content type: "application/xml", previous content type: "text/xml" in /etc/nginx/mime.types:54
> nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
> nginx: configuration file /etc/nginx/nginx.conf test is successful
> # configuration file /etc/nginx/nginx.conf:
> ssl_engine ateccx08;
> user www-data;
> worker_processes auto;
> pid /run/nginx.pid;
> include /etc/nginx/modules-enabled/*.conf;
> 
> events {
>     worker_connections 768;
>     # multi_accept on;
> }
> 
> http {
>     sendfile on;
>     tcp_nopush on;
>     types_hash_max_size 2048;
> 
>     include /etc/nginx/mime.types;
>     default_type application/octet-stream;
> 
>     access_log /var/log/nginx/access.log;
>     error_log /var/log/nginx/error.log;
> 
>     keepalive_timeout 65;
>     gzip on;
> 
>     include /etc/nginx/sites-enabled/*;
> }
> 
> # configuration file /etc/nginx/mime.types:
> types {
>     text/html  html htm shtml;
>     text/css   css;
>     text/xml   xml;
>     image/gif  gif;
>     image/jpeg jpg jpeg;
>     application/javascript js;
>     application/atom+xml  atom;
>     application/rss+xml   rss;
>     text/mathml  mml;
>     text/plain   txt;
>     text/vnd.sun.j2me.app-descriptor  jad;
>     text/vnd.wap.wml wml;
>     text/x-component htc;
>     image/png   png;
>     image/tiff  tif tiff;
>     image/vnd.wap.wbmp  wbmp;
>     image/x-icon ico;
>     image/x-jng  jng;
>     image/x-ms-bmp bmp;
>     image/svg+xml svg svgz;
>     image/webp webp;
>     application/font-woff  woff;
>     application/java-archive  jar war ear;
>     application/json  json;
>     application/mac-binhex40  hqx;
>     application/msword  doc;
>     application/pdf  pdf;
>     application/postscript  ps eps ai;
>     application/rtf  rtf;
>     application/vnd.apple.mpegurl  m3u8;
>     application/vnd.ms-excel  xls;
>     application/vnd.ms-fontobject  eot;
>     application/vnd.ms-powerpoint  ppt;
>     application/vnd.wap.wmlc  wmlc;
>     application/vnd.google-earth.kml+xml  kml;
>     application/vnd.google-earth.kmz  kmz;
>     application/x-7z-compressed  7z;
>     application/x-cocoa  cco;
>     application/x-java-archive-diff  jardiff;
>     application/x-java-jnlp-file  jnlp;
>     application/x-makeself  run;
>     application/x-perl  pl pm;
>     application/x-pilot  prc pdb;
>     application/x-rar-compressed  rar;
>     application/x-redhat-package-manager  rpm;
>     application/x-sea  sea;
>     application/x-shockwave-flash  swf;
>     application/x-stuffit  sit;
>     application/x-tcl  tcl tk;
>     application/x-x509-ca-cert  der pem crt;
>     application/x-xpinstall  xpi;
>     application/xhtml+xml  xhtml;
>     application/xml  xml;
>     application/zip  zip;
>     application/octet-stream  bin exe dll;
>     application/octet-stream  deb;
> }
> 
> # configuration file /etc/nginx/sites-enabled/wb-mqtt-alice-proxy:
> server {
>     listen 8042;
>     server_name localhost;
>     access_log /var/log/nginx/wb-mqtt-alice_access.log;
>     error_log /var/log/nginx/wb-mqtt-alice_error.log debug;
> 
>     location / {
>         # Use external DNS to be independent of system settings
>         # and prevent problems when there is no internet connection
>         resolver 77.88.8.8;
> 
>         # Use a variable to prevent NGINX from checking DNS on startup
>         set $alice_host "alice.wirenboard.com";
>         
>         # Required settings - basic proxy configuration
>         proxy_pass https://$alice_host:8042;
>         proxy_ssl_name $alice_host;
>         proxy_ssl_certificate /var/lib/wb-mqtt-alice/device_bundle.crt.pem;
>         proxy_ssl_certificate_key engine:ateccx08:ATECCx08:00:02:C0:00;
>         proxy_ssl_server_name on;
> 
>         # Specific settings required for WebSocket connections
>         proxy_http_version 1.1;
>         proxy_set_header Upgrade $http_upgrade;
>         proxy_set_header Connection "upgrade";
> 
>         # Optional settings - security and performance tuning
>         proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
>         proxy_ssl_protocols TLSv1.3;
>         proxy_ssl_verify on;
>         proxy_ssl_session_reuse off;
>     }
> }
> 
> # configuration file /etc/nginx/sites-enabled/wb.conf:
> auth_basic "Wiren Board UI";
> auth_basic_user_file /etc/nginx/passwd;

cat /usr/share/wb-mqtt-homeui/nginx/listen.conf

# Listen configuration for Wiren Board Homeui web interface
#
# DO NOT EDIT THIS FILE DIRECTLY! It will be overwritten by the deb package upgrade

listen   80;
#listen   [::]:80 default_server ipv6only=on; ## listen for ipv

cat /usr/share/wb-mqtt-homeui/nginx/default.conf

# Configuration for Wiren Board Homeui web interface
#
# DO NOT EDIT THIS FILE DIRECTLY! It will be overwritten by the deb package upgrade
#
# Add your custom configuration to /etc/nginx/includes/default.wb.d/*.conf
# Change listen settings in /etc/nginx/includes/default.wb.d/listen.conf


upload_progress fwupdate 1M;

upstream wb-homeui-back {
        server unix:/tmp/wb-homeui.socket;
}

upstream mosquitto-user {
        server 127.0.0.1:18884;
}

upstream mosquitto-operator {
        server 127.0.0.1:18885;
}

upstream mosquitto-admin {
        server 127.0.0.1:18886;
}

upstream mosquitto-legacy {
        server 127.0.0.1:18883;
}

map $wb_user_type $mosquitto_upstream {
        "admin" "mosquitto-admin";
        "operator" "mosquitto-operator";
        "user" "mosquitto-user";
        default "mosquitto-legacy";
}

server {
        include /etc/nginx/includes/default.wb.d/*.conf;
        include /var/lib/wb-homeui/nginx/*.conf;
        include /usr/share/wb-mqtt-homeui/nginx/includes/*.conf;

        root /var/www;

        gzip on;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_min_length 1200;
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/font-woff image/svg+xml;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                index index.html;
                try_files $uri $uri/ /index.html;
                add_header Cache-Control "no-store, no-cache, must-revalidate";
        }

        location ~* \.(js|jpg|jpeg|gif|png|svg|css|json)$ {
                add_header Cache-Control "max-age=31536000";
        }

        location /api/check {

                limit_except GET {
                        deny all;
                }

                set $required_user_type "user";
                auth_request /auth/check;

                fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/check.sh;
                fastcgi_param HTTP_SCHEME $scheme;
                fastcgi_param SCRIPT_NAME check.sh;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REQUEST_URI $request_uri;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;

        }

        location /fwupdate/download/rootfs {

                limit_except GET {
                        deny all;
                }

                auth_request /auth/check;

                fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/download_rootfs.sh;
                fastcgi_param SCRIPT_NAME download_rootfs.sh;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REQUEST_URI $request_uri;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_request_buffering off;  # to allow stream-downloading via backend

        }

        location /fwupdate/download/configs {

                limit_except GET {
                        deny all;
                }

                auth_request /auth/check;

                fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/download_configs.sh;
                fastcgi_param SCRIPT_NAME download_configs.sh;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REQUEST_URI $request_uri;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_request_buffering off;  # to allow stream-downloading via backend

        }

        location /fwupdate/download/everything {

                limit_except GET {
                        deny all;
                }

                auth_request /auth/check;

                fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/download_everything.sh;
                fastcgi_param SCRIPT_NAME download_everything.sh;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REQUEST_URI $request_uri;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_request_buffering off;  # to allow stream-downloading via backend

        }

        location /fwupdate/upload {
                limit_except POST {
                        deny all;
                }
                client_body_buffer_size 128K;
                client_max_body_size 1000M;

                gzip off;

                auth_request /auth/check;

                fastcgi_param UPLOADS_DIR /var/www/uploads;
                fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/fwupdate_upload.py;
                fastcgi_param SCRIPT_NAME fwupdate_upload.py;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REQUEST_URI $request_uri;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_request_buffering off;  # to allow stream-downloading via backend

                track_uploads fwupdate 5s;
        }

        location /fwupdate/factoryreset {
                limit_except POST {
                        deny all;
                }
                gzip off;

                auth_request /auth/check;

                fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/factory_reset.py;
                fastcgi_param SCRIPT_NAME factory_reset.py;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REQUEST_URI $request_uri;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }

        location /fwupdate/progress {
                auth_request /auth/check;

                report_uploads fwupdate;
        }

        location /mqtt {
                set $required_user_type "user";
                auth_request /auth/check;
                auth_request_set $wb_user_type $sent_http_wb_user_type;

                proxy_pass http://$mosquitto_upstream;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection upgrade;
        }

        location /auth/check {
                internal;
                client_max_body_size 1000M;
                proxy_pass_request_body off;
                proxy_set_header Content-Length "";
                proxy_set_header Required-User-Type $required_user_type;
                proxy_set_header Allow-Unauthorized-Get $allow_unauthorized_get;
                proxy_set_header X-Original-Method $request_method;
                proxy_pass http://wb-homeui-back/auth/check;
        }

        location /auth/users {
                set $required_user_type "admin";
                auth_request /auth/check;

                proxy_pass http://wb-homeui-back/users;
        }

        location /auth/login {
                limit_except POST {
                        deny all;
                }
                proxy_pass http://wb-homeui-back/auth/login;
        }

        location /auth/logout {
                limit_except POST {
                        deny all;
                }
                proxy_pass http://wb-homeui-back/auth/logout;
        }

        location /auth/who_am_i {
                limit_except GET {
                        deny all;
                }
                proxy_pass http://wb-homeui-back/auth/who_am_i;
        }

        location /device/info {
                limit_except GET {
                        deny all;
                }
                proxy_set_header X-Forwarded-Host-Ip $server_addr;
                proxy_pass http://wb-homeui-back/device/info;
        }

        location /api/https/request_cert {
                limit_except POST {
                        deny all;
                }
                proxy_pass http://wb-homeui-back/api/https/request_cert;
        }

        location /api/https {
                set $allow_unauthorized_get "true";
                auth_request /auth/check;

                proxy_pass http://wb-homeui-back/api/https;
        }
}

Я собственно готов сообщить все, что нужно.

действия, произведенные перед падением:
установлен Duck DNS - уже удален
установлен Let’s Encrypt - уже удален
далее неправильное подключение платы расширения
далее переустановка nginx с, скорее всего, неправильной настройкой конфигов

Проблему решить так и не получается. Помогите пожалуйста

В конфигах nginx у меня есть

listen   80;
listen 443 ssl;

Ну и конфиг интерфейса:

include /usr/share/wb-mqtt-homeui/nginx/default.conf;
#...
# Change listen settings in /etc/nginx/includes/default.wb.d/listen.conf


upload_progress fwupdate 1M;

upstream wb-homeui-back {
	server unix:/tmp/wb-homeui.socket;
}