Как исправить сбой Node.js после любого запроса через Apache ProxyPass - PullRequest
0 голосов
/ 31 мая 2019

Всякий раз, когда я делаю какой-либо запрос ... Web-сокет или обычный запрос на выборку, в конце запроса (закрытие или завершение выборки Web-сокета) сервер js узла падает с

{ Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' }

Это происходит только в Windows, но отлично работает на Centos VPS

Используемые технологии:

Windows 10 with xampp v3.2.2 and Apache/2.4.29 (Win32)
Node v10.15.0
Express 4.16.3
ws 3.3.3 from npm

Я попытался просмотреть экспресс и ws, чтобы увидеть, есть ли какой-нибудь обработчик ошибок, который я мог бы пропустить, но я не мог понять, так ли это на самом деле.

Я также пытался добавить retry=0 timeout=60 keepalive=On за линией ProxyPass, как я видел в чьей-то конфигурации, но это тоже не имело значения.

Это моя текущая конфигурация виртуального хоста Apache в Windows

<VirtualHost *:80>
    DocumentRoot C:\Users\username\Desktop\Developement\app\public_html
    ServerName app.localhost
    ErrorLog "C:\Users\username\Desktop\Developement\logs\error.log"
    CustomLog "C:\Users\username\Desktop\Developement\logs\access.log" common

    <Directory "C:\Users\username\Desktop\Developement\app\public_html">
         DirectoryIndex index.php
         AllowOverride All
         Order allow,deny
         Allow from all
         php_value auto_prepend_file C:\Users\username\Desktop\Developement\app\prepend.php
    </Directory>

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyRequests Off
    RewriteEngine On

    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]

    ProxyPass /ws http://127.0.0.1:8080 retry=0 timeout=60 keepalive=On
    ProxyPassReverse /ws http://127.0.0.1:8080

    ProxyPass /login http://127.0.0.1:8080/login retry=0 timeout=60 keepalive=On
    ProxyPassReverse /login http://127.0.0.1:8080/login

</VirtualHost>
<VirtualHost *:443>
    DocumentRoot C:\Users\username\Desktop\Developement\app\public_html
    ServerName app.localhost
    ErrorLog "C:\Users\username\Desktop\Developement\logs\error.log"
    CustomLog "C:\Users\username\Desktop\Developement\logs\access.log" common

    <Directory "C:\Users\username\Desktop\Developement\app\public_html">
         DirectoryIndex index.php
         AllowOverride All
         Order allow,deny
         Allow from all
         php_value auto_prepend_file C:\Users\username\Desktop\Developement\app\prepend.php
    </Directory>


    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    SSLProxyEngine On
    SSLEngine on
    SSLCertificateFile "C:\xampp\apache\cert\app.localhost\server.crt"
    SSLCertificateKeyFile "C:\xampp\apache\cert\app.localhost\server.key"
    ProxyRequests Off

    RewriteEngine On

    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]

    ProxyPass /ws http://127.0.0.1:8080 retry=0 timeout=60 keepalive=On
    ProxyPassReverse /ws http://127.0.0.1:8080

    ProxyPass /login http://127.0.0.1:8080/login retry=0 timeout=60 keepalive=On
    ProxyPassReverse /login http://127.0.0.1:8080/login

 </VirtualHost>

Я в основном скопировал этот конфиг с сервера centos, так что между 2. есть только незначительные различия, а именно: каталоги и тег <Directory>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...