Apache Webserver повторяет попытку оставшегося вызова API в течение тайм-аута (Angular - Django) - PullRequest
0 голосов
/ 15 апреля 2019

У нас есть угловое приложение, развернутое на Apache на 443 (SSL) и приложение Django, которое также развернуто на 443 (SSL) с различными настройками ServerName и ServerAlias. В конкретном вызове API (вызов API от angular до django) время ответа (время обработки) превышает 12 минут.

Таким образом, angular вызывает API, и после 3-4 минут ожидания Apache снова вызывает тот же API, а через 7-8 минут Apache возвращает ERR_EMPTY_RESPONSE клиенту (apache), но обработка бэкэнда (Django) все еще продолжается. на.

Этот сценарий происходит только для этого конкретного API.

Раньше, когда angular развертывался на самом узле (для локальной разработки), а на apache на порту 8081 развертывался только django, тогда этот конкретный API работает нормально.

Но когда мы развернули приложение (angular и django) на apache на порту 443 (поддержка SSL), этот конкретный API-интерфейс всегда продолжает возвращать ERR_EMPTY_RESPONSE в angular.

Итак, мой вопрос: почему apache повторяет вызов API через 4-5 минут, когда django не возвращает ответ, а через 7-8 минут он просто возвращает ERR_EMPTY_RESPONSE в угловое приложение. Мы также использовали настройку TimeOut на 1800 секунд.

Ниже приведены необходимые настройки, используемые в файле настроек https-vhosts для приложения django

TimeOut 1800
ServerName https://djangoapp.example.in
ServerAlias https://djangoapp.example.in

SSLEngine on
SSLCertificateFile "${SSLRoot}/encrypted.crt"
SSLCertificateKeyFile "${SSLRoot}/encrypted_pem.key"
SSLCACertificateFile "${SSLRoot}/encrypted_cabundle.pem"
DocumentRoot "D:/Bitbucket_Dev/example/Scripts/Python_Scripts/src/example/"
<Directory  "D:/Bitbucket_Dev/example/Scripts/Python_Scripts/src/example/">
    Options +Indexes -Includes -FollowSymLinks -MultiViews +ExecCGI
    AllowOverride All
    Require all granted
</Directory>
Alias /templates/ "D:/Bitbucket_Dev/example/Scripts/Python_Scripts/src/example/templates/"
<Directory "D:/Bitbucket_Dev/example/Scripts/Python_Scripts/src/example/templates/">
<Files *.html>
        Require all granted
</Files>
</Directory>

<Directory "D:/Bitbucket_Dev/example/Scripts/Python_Scripts/src/example/example/">
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>
WSGIScriptAlias / "D:/Bitbucket_Dev/example/Scripts/Python_Scripts/src/example/example/wsgi.py"
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from *.*.*.*
</Location>

ErrorLog "logs/example/error_log"
CustomLog "logs/example/access_log" common

Также для углового приложения в файле настроек httpd-ssl используются следующие настройки.

Listen 443


<VirtualHost _default_:443>

#   General setup for the virtual host
#
ServerName https://angularapp.example.in
ServerAdmin admin@angularapp.example.in
ServerAlias https://angularapp.example.in

TimeOut 1800

DocumentRoot "D:/Bitbucket_Dev/example/Scripts/Front_end/src/dist/main/"
<Directory  "D:/Bitbucket_Dev/example/Scripts/Front_end/src/dist/main/">
    <Files *.html>
            Require all granted
    </Files>
        Options +FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

ErrorLog "${SRVROOT}/logs/example/error.log"
TransferLog "${SRVROOT}/logs/example/access.log"

SSLEngine on
SSLCertificateFile "${SSLRoot}/encrypted.crt"
SSLCertificateKeyFile "${SSLRoot}/encrypted_pem.key"

SSLCACertificatePath "${SSLRoot}/"
SSLCACertificateFile "${SSLRoot}/encrypted_cabundle.pem"
<FilesMatch "\.(cgi|shtml|phtml|php|js|html|css|csv)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "${SRVROOT}/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "${SRVROOT}/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


</VirtualHost>                                  

Как видите, мы используем разные имена ServerName и ServerAlias ​​для обоих приложений, а также используем TimeOut 1800 на обоих виртуальных хостах.

Может кто-нибудь, пожалуйста, помогите мне, где я делаю неправильно, чтобы apache не вызывал API снова через 3-4 минуты и не возвращал ERR_EMPTY_RESPONSE.

В этом случае apache вызывает один и тот же api дважды, он вызывает api впервые, когда angular вызывает api, и снова через 4-5 минут, когда через 4-5 минут django не возвращает ответ. Также через 7-8 минут apache возвращает ERR_EMPTY_RESPONSE в угловое положение, но обработка все еще продолжается в django.

...