После некорректного подключения платы расширения вебинтерфейс зависает на словах “Восстанавливаем туннель через 10 секунд”
проблемное устройство было отключено физически, а потом и в конфиге /etc/wb-mqtt-serial.conf
systemctl status wb-homeui-backend говорит что сервис активен
так же как и wb-mqtt-serial
во время попыток починить данную проблему был переустановлен nginx и были попытки настроить его конфиг, что тоже может быть причиной отсутствия доступа к вебинтерфейсу
подскажите, что можно предпринять и что проверить?
Добрый день.
А что в логах контроллера?
Пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации .
Alexander25:
во время попыток починить данную проблему был переустановлен 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">×</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;
}