Puncte:0

HTTPS întrerupe conexiunea Socket.io

drapel ch

Descrierea defecțiunii
Am în mediul meu de testare chatbot-uri Rasa care rulează în containere docker.Frontedul Chatbot este un widget de chat web Botfront într-un site web deservit de Apache2 pe același server. De asemenea, am instalat Nginx ca proxy invers, care servește apoi domenii virtuale Apache. Chatbot funcționează direct din Apache http://testiotti2.omnia.fi:444/ și, de asemenea, prin proxy invers http://testiotti2.omnia.fi/ dar când se folosește https, eșuează, adică widgetul chatbot nu este afișat https://testibot1.omnia.fi/

Mediul meu

Versiunea serverului: Apache/2.4.41 (Ubuntu)  
Versiunea nginx: nginx/1.18.0 (Ubuntu  
Ubuntu 18.04  
Docker versiunea 20.10.9, build c2ea9bc  
docker-compose versiunea 1.29.2, build 5becea4c  

Fișiere de configurare

Proxy invers Nginx (am comentat partea testibotti2 SSL în scopuri de testare)

Server {

   #root /var/www/html/;
   #index index.html index.htm;

   nume_server testibot1.omnia.fi;
   #server_name 127.0.0.1
   index index.php index.html index.htm index.nginx-debian.html;
   root /var/www/public_html/testibot1;

   Locație \ {

   proxy_pass http://testibot1.omnia.fi:444;
   proxy_set_header X-Real-IP $adresă_la distanță;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Gazdă $gazdă;  
   # Am încercat acești parametri de mai jos, dar fără succes
   #proxy_redirect off;
   #proxy_set_header X-Forwarded-Proto https;
   #proxy_set_header X-Forwarded-Proto $schema;  
   # și acești parametri i-am adăugat după instalarea SSL, fără succes
   proxy_http_versiunea 1.1;
   proxy_set_header Actualizare $http_upgrade;
   proxy_set_header Conexiune „upgrade”;

   }

   access_log /var/log/nginx/testibot1.fi_access.log;
   error_log /var/log/nginx/testibot1.fi_error.log;


   asculta 443 ssl; # gestionat de Certbot
   ssl_certificate /etc/letsencrypt/live/testibot1.omnia.fi/fullchain.pem; # gestionat de Certbot
   ssl_certificate_key /etc/letsencrypt/live/testibot1.omnia.fi/privkey.pem; # gestionat de Certbot
   includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
   ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot

}

Server {

   #root /var/www/html/;
   #index index.html index.htm;

   nume_server testibotti2.omnia.fi;
   #server_name 127.0.0.1
   index index.php index.html index.htm index.nginx-debian.html;
   root /var/www/public_html/testiotti2;

   Locație \ {

   proxy_set_header X-Real-IP $adresă_la distanță;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Gazdă $gazdă;
   proxy_pass http://testiotti2.omnia.fi:444;
   }

   access_log /var/log/nginx/testiotti2.fi_access.log;
   error_log /var/log/nginx/testiotti2.fi_error.log;


# asculta 443 ssl; # gestionat de Certbot
# ssl_certificate /etc/letsencrypt/live/testibot1.omnia.fi/fullchain.pem; # gestionat de Certbot
# ssl_certificate_key /etc/letsencrypt/live/testibot1.omnia.fi/privkey.pem; # gestionat de Certbot
# include /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot

}

Server {
    if ($gazdă = testibot1.omnia.fi) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot


   asculta 80;

   nume_server testibot1.omnia.fi;
    întoarce 404; # gestionat de Certbot


}

#Server {
# if ($gazdă = testibotti2.omnia.fi) {
# return 301 https://$host$request_uri;
# } # gestionat de Certbot


# asculta 80;

# server_name testibotti2.omnia.fi;
# return 404; # gestionat de Certbot


#}

Configurarea widgetului de chat web Botfront

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/index.min.js"></script>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
Testisaitti 1
<div id="webchat"></div>
<script>
  WebChat.default.init({
    showFullScreenButton: true,
    selector: "#webchat",
    initPayload: "/tervetuloa",
    customData: {"language": "fi"}, // arbitrary custom data. Stay minimal as this will be added to the socket
    socketUrl: "http://testibot1.omnia.fi:5006",
    socketPath: "/socket.io/",
    embedded: false,
    title: "AsPa botti",
    subtitle: "Testibotti 1",
    inputTextFieldHint: "Vastaa kysymyksiin",
    profileAvatar:"robot_icon.png",
    params: {"storage": "session"} // can be set to "local"  or "session". details in storage section.
  })
</script>

</body>
</html>  


Această eroare o văd în fereastra de depanare a browserului

Conținut mixt: pagina de la „<URL>” a fost încărcată prin HTTPS, dar a solicitat un punct final nesecurizat XMLHttpRequest „<URL>”. Această solicitare a fost blocată; conținutul trebuie să fie difuzat prin HTTPS.

Jurnalul de erori Nginx

paulii@vetbot7:/var/www/public_html/testibot1$ sudo tail -f /var/log/nginx/testibot1.fi_error.log
[sudo] parola pentru paulii:
2021/10/18 10:04:50 [eroare] 3469367#3469367: *60 open() „/var/www/public_html/testibot1/omnia.fi.db” a eșuat (2: Nu există un astfel de fișier sau director), client : 89.248.173.145, server: testibot1.omnia.fi, cerere: „GET /omnia.fi.db HTTP/1.1”, gazdă: „testibot1.omnia.fi”
2021/10/18 10:04:50 [eroare] 3469367#3469367: *60 open() „/var/www/public_html/testibot1/omnia.fi.sqlite” a eșuat (2: Nu există un astfel de fișier sau director), client : 89.248.173.145, server: testibot1.omnia.fi, cerere: „GET /omnia.fi.sqlite HTTP/1.1”, gazdă: „testibot1.omnia.fi”
2021/10/18 10:05:26 [eroare] 3469367#3469367: *66 open() „/var/www/public_html/testibot1/favicon.ico” a eșuat (2: Nu există un astfel de fișier sau director), client: 91.153 .58.139, server: testibot1.omnia.fi, cerere: „GET /favicon.ico HTTP/1.1”, gazdă: „testibot1.omnia.fi”, referitor: „https://testibot1.omnia.fi/”
2021/10/18 10:05:52 [crit] 3469367#3469367: *81 SSL_do_handshake() a eșuat (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share), în timp ce client:03.4251 server SSL, handshake. : 0.0.0.0:443
2021/10/18 10:05:54 [crit] 3469367#3469367: *90 SSL_do_handshake() a eșuat (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share), în timp ce client: 0.7.1020 server SSL handshake. : 0.0.0.0:443
2021/10/18 10:07:15 [crit] 3469367#3469367: *103 SSL_do_handshake() a eșuat (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share), în timp ce client S.2.81027: server SSL, handshake). : 0.0.0.0:443
2021/10/18 11:31:10 [eroare] 3470484#3470484: *2 open() „/var/www/public_html/testibot1/5007” a eșuat (2: Nu există un astfel de fișier sau director), client: 91.153.58.139 , server: testibot1.omnia.fi, cerere: „GET /5007 HTTP/1.1”, gazdă: „testiotti2.omnia.fi”
2021/10/18 11:31:12 [eroare] 3470484#3470484: *2 open() „/var/www/public_html/testibot1/5007” a eșuat (2: Nu există un astfel de fișier sau director), client: 91.153.58.139 , server: testibot1.omnia.fi, cerere: „GET /5007 HTTP/1.1”, gazdă: „testiotti2.omnia.fi”
2021/10/18 11:31:21 [eroare] 3470484#3470484: *2 open() „/var/www/public_html/testibot1/5007” a eșuat (2: Nu există un astfel de fișier sau director), client: 91.153.58.139 , server: testibot1.omnia.fi, cerere: „GET /5007 HTTP/1.1”, gazdă: „testiotti2.omnia.fi”
2021/10/18 11:32:21 [eroare] 3470484#3470484: *3 open() „/var/www/public_html/testibot1/favicon.ico” a eșuat (2: Nu există un astfel de fișier sau director), client: 91.153 .58.139, server: testibot1.omnia.fi, cerere: „GET /favicon.ico HTTP/1.1”, gazdă: „testibotti2.omnia.fi”, referitor: „https://testibotti2.omnia.fi/”

Puncte:0
drapel de

Cauza problemei este tipărită literalmente în consola pentru dezvoltatori a browserului:

mesaj de eroare detaliat

Prin urmare, trebuie să faceți cereri XHR prin conexiunea HTTPS.

Probabil doriți să adăugați o altă locație la configurația nginx:

locație /socket.io {
   proxy_pass http://localhost:5006;
}

schimbând și adresa URL în configurația frontend:

    socketUrl: "https://testibot1.omnia.fi",
drapel ch
Mulțumesc, am adăugat asta la configurația Nginx, cred că acest „/” ar trebui să fie acest „\” Server { locație \socket.io { proxy_pass http://localhost:5006; } } iar aceasta la index.html //socketUrl: „http://testibot1.omnia.fi:5006”, socketUrl: "https://testibot1.omnia.fi", Dar încă nu funcționează, acest mesaj de eroare acum GET https://testibot1.omnia.fi/socket.io/?EIO=3&transport=polling&t=NoJZNCe 404 (Negăsit)
drapel de
Ai reîncărcat nginx? De asemenea, de obicei are sens să faceți o verificare a sanității prin `nginx -t`
drapel de
Totuși, nu sunt sigur că ar trebui să utilizați backslash (\). Pentru delimitatorii de căi, ar trebui să utilizați bare oblice înainte (http://nginx.org/en/docs/beginners_guide.html), iar bara oblică inversă este de obicei folosită pentru a scăpa de caractere speciale.
drapel ch
paulii@vetbot7:/etc/nginx/sites-available$ sudo nginx -t nginx: sintaxa fișierului de configurare /etc/nginx/nginx.conf este ok nginx: fișierul de configurare /etc/nginx/nginx.conf testul a reușit paulii@vetbot7:/etc/nginx/sites-available$ sudo systemctl reload nginx paulii@vetbot7:/etc/nginx/sites-available$ sudo systemctl restart nginx paulii@vetbot7:/etc/nginx/sites-available$
drapel ch
Am incercat cu "/" si nu merge. Aceasta este eroarea acum „Nu s-a încărcat resursa: serverul a răspuns cu starea 404 (Negăsit)”
djdomi avatar
drapel za
nu spune că nu funcționează, actualizează întrebarea și arată-ne noua configurație ;)
drapel ch
Ce vrei să spui? Nu merge!
Puncte:0
drapel ch

L-am pus să funcționeze

acest lucru este necesar în fișierul de configurare al proxy invers Ngingx

Server {


   nume_server testibot1.omnia.fi;
   index index.php index.html index.htm index.nginx-debian.html;
   root /var/www/public_html/testibot1;

   Locație / {

   proxy_pass http://testibot1.omnia.fi:444;
   proxy_set_header X-Real-IP $adresă_la distanță;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Gazdă $gazdă;

   }

   locație /socket.io/ {
   proxy_pass http://testibot1.omnia.fi:5006/socket.io/;
   proxy_http_versiunea 1.1;
   proxy_set_header Actualizare $http_upgrade;
   proxy_set_header Conexiune „upgrade”;
   proxy_set_header Gazdă $gazdă;
   proxy_cache_bypass $http_upgrade;
   }  

și acest lucru este necesar în pagina web

socketUrl: "https://testibot1.omnia.fi",

Multe multumiri Alexandru Tarasov! Ideea ta m-a condus pe calea cea bună și după zeci de încercări am găsit combinația potrivită

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.