Puncte:1

pagina web îmi arată o eroare de gateway timeout FastCGI

drapel in

Am continuat să explic problema și scenariul puțin complex pentru cunoștințele mele limitate.

inițial am crezut că este o problemă asociată cu performanța scripturilor și a interogărilor mele, așa că am creat această postare pe site în spaniolă: LEGĂTURĂ

dar după ce am cercetat cea mai mare parte a după-amiezii; Sunt pe cale să atribui totul unei configurări greșite a mediilor mele de dezvoltare.

Lucrez cu 2 dispozitive server:

  1. Local:

    • Windows 10
    • Laragon Server
  2. Dezvoltare:

    • Ubuntu 20.04
    • XAMPP

în acest caz mă voi concentra asupra local:
Am configurat stiva laragon să accepte gazde virtuale și să rulez 2 versiuni de PHP (7.2 / 7.4) Am urmat aceste 2 ghiduri: Link 1 ȘI Link 2

configurația mea apache:

Definiți SRVROOT „C:/laragon/bin/apache/httpd-2.4.47-win64-VS16”

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


Ascultă 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>
    Daemonul utilizatorului
    Daemon de grup
</IfModule>

ServerAdmin [email protected]

ServerNume Laragon

<Director />
    AllowOverride nici unul
    Solicitați refuzul tuturor
</Director>


DocumentRoot „C:/laragon/www”
<Directorul „C:/laragon/www”>
    Opțiuni Indexuri FollowSymLinks Include ExecCGI
    AllowOverride Nici unul
    Solicitați toate acordate
</Director>

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

<Fișiere „.ht*”>
    Solicitați refuzul tuturor
</Fișiere>

ErrorLog „logs/error.log”

Eroare LogLevel

<IfModule log_config_module>
    
    LogFormat „%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinat
    LogFormat „%h %l %u %t \”%r\” %>s %b” comun

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

    CustomLog „logs/access.log” comun

</IfModule>

<IfModule alias_module>
    
    ScriptAlias ​​/cgi-bin/ „${SRVROOT}/cgi-bin/”

</IfModule>

<IfModule cgid_module>
    #
    # ScriptSock: pe serverele cu fire de execuție, desemnați calea către UNIX
    # socket folosit pentru a comunica cu demonul CGI al mod_cgid.
    #
    #Scriptsock cgisock
</IfModule>


<Directorul „${SRVROOT}/cgi-bin”>
    AllowOverride Nici unul
    Opțiuni Niciuna
    Solicitați toate acordate
</Director>

<IfModule headers_module>
    RequestHeader a dezactivat proxy-ul mai devreme
</IfModule>

<IfModule mime_module>

    TypesConfig conf/mime.types


    Aplicație AddType/x-compress .Z
    Aplicație AddType/x-gzip .gz .tgz

</IfModule>



# Configurați mod_proxy_html pentru a înțelege HTML4/XHTML1
<IfModule proxy_html_module>
    Includeți conf/extra/proxy-html.conf
</IfModule>


<IfModule ssl_module>
    Pornire încorporată SSLRandomSeed
    SSLRandomSeed conectați încorporat
</IfModule>

AcceptFilter http nici unul
AcceptFilter https niciunul
EnableSendfile Off
Activați MMAP dezactivat

IncludeOpțional „C:/laragon/etc/apache2/alias/*.conf”
IncludeOpțional „C:/laragon/etc/apache2/sites-enabled/*.conf”
Includeți „C:/laragon/etc/apache2/httpd-ssl.conf”
Includeți „C:/laragon/etc/apache2/mod_php.conf”

ScriptAlias ​​/php72 „C:/laragon/bin/php/php72”
Aplicație de acțiune/x-httpd-php72-cgi /php72/php-cgi.exe
<Directorul „C:/laragon/bin/php/php72”>
    AllowOverride Nici unul
    Opțiuni Niciuna
    Solicitați refuzul tuturor
    <Fișiere „php-cgi.exe”>
        Solicitați toate acordate
    </Fișiere>
</Director>

gazdele virtuale:

<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>

Alias ​​pentru phpmyadmin

Alias ​​/phpmyadmin „C:/laragon/etc/apps/phpMyAdmin/”
<Directorul „C:/laragon/etc/apps/phpMyAdmin/”>
    Opțiuni Indexuri FollowSymLinks MultiViews
    AllowOverride all  
    Necesită local
</Director>

Configurare MySQL

[client]
#parola=parola_dvs
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"
nume_tabele_minuscule=2
sql_mode=""
wait_timeout=28800
interactive_timeout=28800


[mysqldump]
rapid
max_allowed_packet=4096M

Configurație PHP pentru ambele versiuni (7.2/7.4)

file_uploads = Activat
upload_max_filesize = 4096M
max_file_uploads = 100
allow_url_fopen = Activat
limita_memorie = 3G
dimensiune_max_post = 600M
max_execution_time = 5000
max_input_time = 5000
max_input_vars = 5000
date.timezone= America/Panama
error_reporting = E_ALL
display_errors = pornit
display_startup_errors = activat
html_errors = Activat
session.gc_maxlifetime = 2592000
session.cache_expire = 2592000

După cum puteți vedea, servesc implicit php 7.4 folosind apache handler 2.0; Servim php 7.2 folosind un alias.

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

jurnalele de erori ale MySQL:

2021-10-02T04:26:59.472441Z 35 [Notă] Conexiune întreruptă 35 la db: avipac_dbproducts utilizator: gazdă „rădăcină”: „localhost” (A apărut o eroare la scrierea pachetelor de comunicare)

jurnalele de erori ale Apache:

[Vine Oct 01 23:22:17.806390 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] Scriptul a expirat înainte de returnarea antetelor: php-cgi.exe, referitor: http:// test1.me/
[Vine Oct 01 23:23:43.661155 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error: Dimensiunea memoriei permisă de 32721282 alocate de către 327212802 epuizate ) în D:\webdev\Local\test1\control\classgeneric\class.managerdb.php pe linia 111: C:/laragon/bin/php/php72/php-cgi.exe, referitor: http ://test1.me/
[Vine Oct 01 23:23:43.676759 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error: Dimensiunea memoriei permisă de 32472126 alocate25 epuizate25 ) în Necunoscut pe linia 0: C:/laragon/bin/php/php72/php-cgi.exe, referitor: http://test1.me/
[Vine Oct 01 23:23:43.676759 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error: Dimensiunea memoriei permisă de 3247212 alocate25 de către 3247212 alocate25 ) în Necunoscut pe linia 0: C:/laragon/bin/php/php72/php-cgi.exe, referitor: http://test1.me/
[Vine Oct 01 23:24:59.451291 2021] [cgi:error] [pid 3808:tid 1104] [client 127.0.0.1:53918] Scriptul a expirat înainte de returnarea antetelor: php-cgi.exe, referitor: http:// test1.me/

Accept cu siguranță că interogarea mysql este relativ mare pentru un mediu local pe Windows; dar problema este că aceeași interogare este executată de apache handler 2.0 și php 7.4 în mai puțin de 1 secundă ... dar în CGI / FastCGI se oprește când ajunge la timeout (180 secunde / 3 minute) ... am avut delicatețea de a seta aceleași setări pentru FastCGI și Apache Handler 2.0, dar nu conciv pentru că unul eșuează și celălalt nu.

Desigur, desigur, de aceea una dintre îndoielile mele este că îmi spun în configurația mea ce configurație am nevoie pentru a îmbunătăți FastCGI. Este ceea ce ignor în principal. (unde, cum și ce).

este posibil ca cineva să-mi spună în configurația mea ce configurație am nevoie pentru a îmbunătăți FastCGI. Este ceea ce ignor în principal. (unde, cum și ce) Chiar nu înțeleg de ce nu pot face Fast CGI, măcar să nu rupă și să funcționeze ca Apache...

Nu știu ce este în neregulă, ce am nevoie sau cum să rezolv aceste erori... Știu că CGI / FastCGI durează mult și consumă multă memorie, dar nu știu de ce nu funcționează și Apache Handler funcționează corect

Sau există vreo modalitate de a folosi proxy Apache Handler 2.0 în loc să utilizați php-cgi prin alias FastCGI?


Imagini ilustrative Apache Handler 2.0:

introduceți descrierea imaginii aici

CGI/FastCGI:

introduceți descrierea imaginii aici

introduceți descrierea imaginii aici


ACTUALIZARE #1

Găsesc acest fișier de configurare: Notă: presupun că acest fișier de configurare este important; dar nu am idee despre funcționalitatea sa sau despre ce lucruri ar trebui să adaug, să elimin sau să modific pentru ca FastCGI să se comporte ca 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 ore: în cazul în care aveți scripturi care rulează lung, creșteți FcgidIOTimeout 
    
    FcgidIOTimeout 36000
    FcgidIdleTimeout 36000
    FcgidProcessLifeTime 36000
    FcgidBusyTimeout 36000
    FcgidConnectTimeout 3600
    FcgidMaxRequestsPerProcess 0
    FcgidMaxProcesses 50
    FcgidMaxRequestLen 81310720
    # Locație php.ini:
    # FcgidInitialEnv PHPRC „C:/laragon/bin/php/php74”
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 0

    <Fișiere ~ "\.php$>"
        AddHandler fcgid-script .php
        Opțiuni +ExecCGI
        FcgidWrapper „C:/laragon/bin/php/php74/php-cgi.exe” .php
    </Fișiere>
</IfModule>
drapel us
Interogarea pe care o efectuați creează un tabel uriaș de rezultate și nu se încadrează în limita de memorie permisă a configurației dvs. Ar trebui să remediați interogarea astfel încât să genereze numai datele de care aveți nevoie.
ArcanisGK507 avatar
drapel in
L-am încercat și ar trebui să aibă 2000 de rânduri cu 120 de coloane, atât de greu? este ceea ce trebuie să obțin.
Puncte:1
drapel fr
anx

Erorile vă spun PHP-ul său (Versiunea 7.2, EoL acum, remediați asta!) care încearcă să depășească limita de memorie alocată.

Dacă scriptul a fost terminat in timp ce vorbind cu baza de date (jurnalele mysql mă fac să cred că da), atunci poate că una dintre interogările bazei de date (nu neapărat ultima!) returnează un set de rezultate neașteptat de mare care nu se potrivește cu memoria permisă pentru scriptul php?

Verificați jurnalul de interogări, executați interogările manual și vedeți

  • dacă sunt adecvate: atunci doriți să alocați mai multe resurse SAU:
  • dacă unul dintre ele este inutil de mare: atunci doriți să îmbunătățiți aplicația interogându-le sau să curățați rândurile inutile pentru a reduce utilizarea resurselor.

Dacă este primul, atunci rețineți că majoritatea sistemelor sunt configurate pentru a avea configurații php separate pentru opțiuni de implementare separate.Aceasta poate include limite de memorie diferite sau extensii disponibile. Deoarece aveți mai multe implementări diferite, fișierul php.ini utilizat poate fi diferit pentru fiecare dintre cgi, cli, fpm, apache2-mod, .. - dacă aveți îndoieli, lăsați scriptul să imprime phpinfo() pentru a confirma efectiv configurație.

ArcanisGK507 avatar
drapel in
Mi se pare că nu este calea cea bună; Accept cu siguranță că interogarea este relativ mare pentru un mediu local pe Windows; dar problema este că aceeași interogare este executată de apache handler 2.0 și php 7.4 în mai puțin de 1 secundă... dar în CGI / FastCGI se oprește când ajunge la timeout (180 secunde / 3 minute) îndoielile mele: unde modific de data aceasta a fost deja configurat php.ini și nu îl folosește; de ce CGI / FastCGI durează atât de mult și consumă atât de multă memorie, cum pot îmbunătăți acest lucru.
ArcanisGK507 avatar
drapel in
Desigur, desigur, de aceea una dintre îndoielile mele este că îmi spun în configurația mea ce configurație am nevoie pentru a îmbunătăți FastCGI. Este ceea ce ignor în principal. (unde, cum si ce)
ArcanisGK507 avatar
drapel in
Mi se pare că nu am găsit un ghid complet, despre configurația Fast CGI... care să menționeze punctele care mă afectează.
ArcanisGK507 avatar
drapel in
Hei, mulțumesc foarte mult pentru timpul acordat și răspunsul tău. Voi mai aștepta puțin să văd dacă găsesc ceva care îmi îmbunătățește configurația.
anx avatar
drapel fr
anx
Ar trebui să vă editați întrebarea pentru a clarifica...din comentariile dvs. se pare că încercați să identificați pașii de diagnosticare pentru a compara două fișiere de configurare diferite, în timp ce întrebarea dvs. arată mai mult ca și cum aveți nevoie de un memento sever că încercarea de a remedia problemele nu este mai ușoară dacă continuați să utilizați versiunea software neîntreținută cu o versiune mare. cantitatea de erori remediate de atunci.
ArcanisGK507 avatar
drapel in
O mie de scuze Mi-am actualizat postarea cu puțin mai mult context despre îndoielile mele și despre ceea ce caut cu adevărat.

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.