веб-страница показывает мне ошибку тайм-аута шлюза FastCGI

. Я продолжаю объяснять проблему и сценарий, немного сложный для моих ограниченных знаний.

Первоначально я думал, что это какая-то проблема, связанная с производительностью моих сценариев и запросов, поэтому я создал этот пост на сайте на испанском языке:ССЫЛКА

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

Я работаю с сервером из 2 устройств:

  1. Локальный:

    • Windows 10
    • Сервер Laragon
  2. Разработка:

    • Ubuntu 20.04
    • XAMPP

в данном случае я сосредоточусь на local:
Я настроил стек laragon для поддержки виртуальных хостов и запуска 2 версий PHP (7.2/7.4)я следую этим 2 руководствам:Ссылка 1 И Ссылка 2

моя конфигурация apache:

Define SRVROOT "C:/laragon/bin/apache/httpd-2.4.47-win64-VS16"

ServerRoot "C:/laragon/bin/apache/httpd-2.4.47-win64-VS16"


Listen 80


LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule version_module modules/mod_version.so

<IfModule unixd_module>
    User daemon
    Group daemon
</IfModule>

ServerAdmin admin@example.com

ServerName Laragon

<Directory />
    AllowOverride none
    Require all denied
</Directory>


DocumentRoot "C:/laragon/www"
<Directory "C:/laragon/www">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error.log"

LogLevel error

<IfModule log_config_module>
    
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access.log" common

</IfModule>

<IfModule alias_module>
    
    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"

</IfModule>

<IfModule cgid_module>
    #
    # ScriptSock: On threaded servers, designate the path to the UNIX
    # socket used to communicate with the CGI daemon of mod_cgid.
    #
    #Scriptsock cgisock
</IfModule>


<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>

<IfModule mime_module>

    TypesConfig conf/mime.types


    AddType application/x-compress.Z
    AddType application/x-gzip.gz.tgz

</IfModule>



# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
    Include conf/extra/proxy-html.conf
</IfModule>


<IfModule ssl_module>
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
</IfModule>

AcceptFilter http none
AcceptFilter https none
EnableSendfile Off
EnableMMAP Off

IncludeOptional "C:/laragon/etc/apache2/alias/*.conf"
IncludeOptional "C:/laragon/etc/apache2/sites-enabled/*.conf"
Include "C:/laragon/etc/apache2/httpd-ssl.conf"
Include "C:/laragon/etc/apache2/mod_php.conf"

ScriptAlias /php72 "C:/laragon/bin/php/php72"
Action application/x-httpd-php72-cgi /php72/php-cgi.exe
<Directory "C:/laragon/bin/php/php72">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
        Require all granted
    </Files>
</Directory>

виртуальные хосты:

<VirtualHost *:80> 
    DocumentRoot "D:/webdev/Local/test1/"
    ServerName test1.me
    ServerAlias *.test1.me
    <Directory "D:/webdev/test1/">
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php72-cgi
    </FilesMatch>
</VirtualHost>

Псевдоним phpmyadmin

Alias /phpmyadmin "C:/laragon/etc/apps/phpMyAdmin/"
<Directory "C:/laragon/etc/apps/phpMyAdmin/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all  
    Require local
</Directory>

Конфигурация MySQL

[client]
#password=your_password
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=512M
max_allowed_packet=4096M
table_open_cache=256
sort_buffer_size=32M
read_buffer_size=32M
read_rnd_buffer_size=32M
myisam_sort_buffer_size=128M
thread_cache_size=16

secure-file-priv=""
explicit_defaults_for_timestamp=1
datadir= "C:/laragon/data/mysql"
lower_case_table_names=2
sql_mode=""
wait_timeout=28800
interactive_timeout=28800


[mysqldump]
quick
max_allowed_packet=4096M

Конфигурация PHP для обоих версия (7.2/7.4)

file_uploads = On
upload_max_filesize = 4096M
max_file_uploads = 100
allow_url_fopen = On
memory_limit = 3G
post_max_size = 600M
max_execution_time = 5000
max_input_time = 5000
max_input_vars = 5000
date.timezone= America/Panama
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
html_errors = On
session.gc_maxlifetime = 2592000
session.cache_expire = 2592000

Как видите, я использую php 7.4 по умолчанию, используя обработчик apache 2.0; Я работаю с php 7.2, используя псевдоним.

  • phpmyadmin => php 7.4 Apache Handler 2.0
  • test1.me => php 7.2 CGI/FastCGI

журналы ошибок MySQL:

2021-10-02T04:26:59.472441Z 35 [Note] Aborted connection 35 to db: avipac_dbproducts' user: 'root' host: 'localhost' (Got an error writing communication packets)

журналы ошибок Apache:

[Fri Oct 01 23:22:17.806390 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] Script timed out before returning headers: php-cgi.exe, referer: http://test1.me/
[Fri Oct 01 23:23:43.661155 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error:  Allowed memory size of 3221225472 bytes exhausted (tried to allocate 20480 bytes) in D:\\webdev\\Local\\test1\\control\\classgeneric\\class.managerdb.php on line 111: C:/laragon/bin/php/php72/php-cgi.exe, referer: http://test1.me/
[Fri Oct 01 23:23:43.676759 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error:  Allowed memory size of 3221225472 bytes exhausted (tried to allocate 65536 bytes) in Unknown on line 0: C:/laragon/bin/php/php72/php-cgi.exe, referer: http://test1.me/
[Fri Oct 01 23:23:43.676759 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error:  Allowed memory size of 3221225472 bytes exhausted (tried to allocate 24576 bytes) in Unknown on line 0: C:/laragon/bin/php/php72/php-cgi.exe, referer: http://test1.me/
[Fri Oct 01 23:24:59.451291 2021] [cgi:error] [pid 3808:tid 1104] [client 127.0.0.1:53918] Script timed out before returning headers: php-cgi.exe, referer: http://test1.me/

Я определенно согласен с тем, что запрос mysql относительно большой для локальной среды в Windows; но проблема в том, что один и тот же запрос выполняется обработчиком apache 2.0 и php 7.4 менее чем за 1 секунду... но в CGI/FastCGI он останавливается по достижении таймаута (180 секунд/3 минут).. Я имел деликатность установить одинаковые настройки для FastCGI и Apache Handler 2.0, но не соглашался, потому что один терпит неудачу, а другой нет.

Конечно, конечно, поэтому одно из моих сомнений в том, что они говорят мне в моей настройке, какая конфигурация мне нужна для улучшения FastCGI. Это то, что я в основном игнорирую. (где, как и что).

Возможно, кто-то скажет мне в моей настройке, какая конфигурация мне нужна для улучшения FastCGI. Это то, что я в основном игнорирую. (где, как и что)Я правда не понимаю, почему я не могу сделать Fast CGI хотя бы не ломаться и работать как Apache...

Я не знаю, что не так, что я нужно или как решить эти ошибки... Я знаю, что CGI / FastCGI занимает много времени и потребляет много памяти, но я не знаю, почему это не работает, а обработчик Apache работает правильно

Или существует какой-либо способ прокси-сервера Apache Handler 2.0 вместо использования php-cgi через псевдоним FastCGI?


Иллюстративные изображения Apache Handler 2.0:

enter image description here

CGI/FastCGI:

enter image description here

enter image description here


ОБНОВЛЕНИЕ #1

я нашел этот файл конфигурации: Примечание:Я предполагаю, что этот файл конфигурации важен; но я понятия не имею о его функциональности или о том, что я должен добавить, удалить или изменить, чтобы заставить FastCGI вести себя как Apache Handler 2.0.

    LoadModule fcgid_module "C:/laragon/etc/apache2/modules/mod_fcgid-2.3.10-win64-VS16.so"

<IfModule fcgid_module>
    FcgidInitialEnv PATH "C:/laragon/bin/php/php74;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;"
    FcgidInitialEnv SystemRoot "C:/Windows"
    FcgidInitialEnv SystemDrive "C:"
    FcgidInitialEnv TEMP "C:/Windows/Temp"
    FcgidInitialEnv TMP "C:/Windows/Temp"
    FcgidInitialEnv windir "C:/Windows"

    # 10 hrs: in case you have long running scripts, increase FcgidIOTimeout 
    
    FcgidIOTimeout 36000
    FcgidIdleTimeout 36000
    FcgidProcessLifeTime 36000
    FcgidBusyTimeout 36000
    FcgidConnectTimeout 3600
    FcgidMaxRequestsPerProcess 0
    FcgidMaxProcesses 50
    FcgidMaxRequestLen 81310720
    # Location php.ini:
    # FcgidInitialEnv PHPRC "C:/laragon/bin/php/php74"
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 0

    <Files ~ "\.php$>"
        AddHandler fcgid-script.php
        Options +ExecCGI
        FcgidWrapper "C:/laragon/bin/php/php74/php-cgi.exe".php
    </Files>
</IfModule>
1
задан 2 October 2021 в 05:13
1 ответ

Ошибки говорят вам, что это PHP(Версия 7.2, сейчас EoL , исправьте это! ), который пытается превысить лимит выделенной памяти.

Если сценарий был завершен во время общения с базой данных (журналы mysql заставляют меня так думать ), тогда, возможно, один из ваших запросов к базе данных (не обязательно последний! )возвращает неожиданно большой набор результатов, который не умещается в памяти, отведенной для php-скрипта?

Проверьте журнал запросов, выполните запросы вручную и см.

  • если они подходят :тогда вы хотите выделить больше ресурсов ИЛИ:
  • если один из них излишне велик :тогда вы хотите улучшите приложение, запрашивающее их, или очистите ненужные строки, чтобы уменьшить использование ресурсов.

Если первое, то имейте в виду, что большинство систем настроены на отдельные конфигурации php для отдельных вариантов развертывания. Это может включать различные ограничения памяти или доступные расширения. Поскольку у вас есть несколько разных развертываний, используемый файл php.ini может отличаться для каждого из модов cgi, cli, fpm, apache2 -,.. -, если есть сомнения, пусть ваш скрипт напечатает phpinfo ()для подтверждения. эффективная конфигурация .

0
ответ дан 2 October 2021 в 07:20

Теги

Похожие вопросы