proxy_fcgi:error The timeout specified has expired

Lord_Icon

Blog Benutzer
Bearbeitet habe ich das das in:
/etc/apache2/mods-available/fcgid.conf

Code:
<IfModule mod_fcgid.c>
  FcgidIdleTimeout 9999999
  FcgidProcessLifeTime 9999999
  FcgidConnectTimeout 9999999
  FcgidIOTimeout 9999999

  <IfModule mod_mime.c>
    AddHandler fcgid-script .fcgi
  </IfModule>
</IfModule>
MaxRequestLen 15728640
Aus frust schon utoptisch hoch eingestellt und den Apache2 neugestartet.
Leider bricht mein Script immer noch ab.

Gibt es eine PHP Anweisung, wo ich mir die Script Laufzeit ausgeben kann?
So dass ich kontrollieren kann, ob ich überhaupt die korrekte Datei bearbeite ?

Danke für Tipps
 

Joe User

Blog Benutzer
mod_fcgid != mod_proxy_fcgi

Welche PHP-Version ist denn wie genau in welche Apache-Version eingebunden?
Wie sehen die beiden Konfigurationen diesbezüglich aus?
 

Lord_Icon

Blog Benutzer
In der Log steht folgendes:
Code:
[Wed Jan 16 13:03:32.959912 2019] [proxy_fcgi:error] [pid 2548] (70007)The timeout specified has expired: [client 192.168.0.50:49765] AH01075: Error dispatching request to : (polling)
Läuft unter PHP-fpm
Aktuell 5.6 da ich das Script auf 7.2 anpassen will.

@Joe User
"mod_fcgid != mod_proxy_fcgi"
Stimmt. Aber darüber finde ich gleich garkeine config die passen könnte.
Code:
[B]ls -lach | grep proxy[/B]
-rw-r--r-- 1 root root   87 Dez 26 11:08 proxy_ajp.load
-rw-r--r-- 1 root root  347 Dez 26 11:08 proxy_balancer.conf
-rw-r--r-- 1 root root  115 Dez 26 11:08 proxy_balancer.load
-rw-r--r-- 1 root root  822 Dez 26 11:08 proxy.conf
-rw-r--r-- 1 root root   95 Dez 26 11:08 proxy_connect.load
-rw-r--r-- 1 root root   95 Dez 26 11:08 proxy_express.load
-rw-r--r-- 1 root root   89 Dez 26 11:08 proxy_fcgi.load
-rw-r--r-- 1 root root   93 Dez 26 11:08 proxy_fdpass.load
-rw-r--r-- 1 root root  189 Dez 26 11:08 proxy_ftp.conf
-rw-r--r-- 1 root root   87 Dez 26 11:08 proxy_ftp.load
-rw-r--r-- 1 root root   93 Dez 26 11:08 proxy_hcheck.load
-rw-r--r-- 1 root root 2,5K Dez 26 11:08 proxy_html.conf
-rw-r--r-- 1 root root   97 Dez 26 11:08 proxy_html.load
-rw-r--r-- 1 root root   97 Dez 26 11:08 proxy_http2.load
-rw-r--r-- 1 root root   89 Dez 26 11:08 proxy_http.load
-rw-r--r-- 1 root root   62 Dez 26 11:08 proxy.load
-rw-r--r-- 1 root root   89 Dez 26 11:08 proxy_scgi.load
-rw-r--r-- 1 root root   97 Dez 26 11:08 proxy_wstunnel.load
 

Lord_Icon

Blog Benutzer
Anbei mal meine phpinfo. Die liegt im gleichen Pfad wie mein Script. Unterliegt also den gleichen Einstellungen.
Ich finde da keine config für ein proxy. Ich weiß nciht, warum das für mein Script greift. max_exection_time ist auf unbegrenzt. proxy module sind nicht geladen (werden zumindest nicht angezeigt)... somit weiß ich echt nicht mehr weiter :mad:

Sieht einer mehr oder gleich den Schuldigen ?
Habt Dank !!!!
 

Attachments

danton

Debian User
PHP-FPM wird über das proxy_fcgi_module angebunden. Du schreibst nicht, was für ein Linux du verwendest. Unter Debian (unter Ubuntu wahrscheinlich auch) erfolgt die Konfiguration nicht über eine proxy_fcgi.conf, sondern über eine phpX.X-fpm.conf in conf-(available|enabled) - alternativ kann man das ganze natürlich auch im jeweiligen vHost konfigurieren, wenn man pro vHost unterschiedliche Einstellungen braucht.
 

Lord_Icon

Blog Benutzer
hi danton,
da schau ich morgen nochmal ne halbe Minute drüber.
Aber mitunter bin ich soweit, dass ich das System neu aufsetze.
Da stimmt irgendwas nicht.

ICh habe mein Script gestern 3 mal aufgerufen und 3 verschiedene Zeitspannen zurückbekommen:
1: 25 Minuten und 45 Sekunden
2: 20 Minuten und 59 Sekunden
3: 17 Minuten und 0 Sekunden

Der Fehler hingegen ist immer der gleiche geblieben.
Und nein. zwischen den 3 Läufen habe ich nichts geändert.
Irgendwas stimmt da nicht.
Asoo.. Debian 9 mit ISP Config und PHP-FPM 5.6/7.0/7.1/7.2

alternativ kann man das ganze natürlich auch im jeweiligen vHost konfigurieren, wenn man pro vHost unterschiedliche Einstellungen braucht.
So sieht die von ispconfig aktuell aus.
Muß doch bestimmt wieder in ein bestimmten Bereichen ?
Vermutlich in den mod_proxy_fcgi.c


Code:
root@debian:~# cat /etc/apache2/sites-enabled/100-wawi.local.vhost

<Directory /var/www/wawi.local>
                AllowOverride None
                                Require all denied
                </Directory>

<VirtualHost *:80>

                                        DocumentRoot /var/www/clients/client0/web1/web

                ServerName wawi.local
                ServerAlias www.wawi.local
                ServerAdmin webmaster@wawi.local


                ErrorLog /var/log/ispconfig/httpd/wawi.local/error.log


                <IfModule mod_ssl.c>
                </IfModule>

                <Directory /var/www/wawi.local/web>
                                # Clear PHP settings of this website
                                <FilesMatch ".+\.ph(p[345]?|t|tml)$">
                                                SetHandler None
                                </FilesMatch>
                                Options +FollowSymLinks
                                AllowOverride All
                                                                Require all granted
                                                </Directory>
                <Directory /var/www/clients/client0/web1/web>
                                # Clear PHP settings of this website
                                <FilesMatch ".+\.ph(p[345]?|t|tml)$">
                                                SetHandler None
                                </FilesMatch>
                                Options +FollowSymLinks
                                AllowOverride All
                                                                Require all granted
                                                </Directory>




                <IfModule mod_fastcgi.c>
                                <Directory /var/www/clients/client0/web1/cgi-bin>
                                                                                Require all granted
                                                                    </Directory>
                                <Directory /var/www/wawi.local/web>
                                        <FilesMatch "\.php[345]?$">
                                                SetHandler php-fcgi
                                        </FilesMatch>
                                </Directory>
                                <Directory /var/www/clients/client0/web1/web>
                                        <FilesMatch "\.php[345]?$">
                                                SetHandler php-fcgi
                                        </FilesMatch>
                                </Directory>
                Action php-fcgi /php-fcgi virtual
                                Alias /php-fcgi /var/www/clients/client0/web1/cgi-bin/php-fcgi-*-80-wawi.local
                FastCgiExternalServer /var/www/clients/client0/web1/cgi-bin/php-fcgi-*-80-wawi.local -idle-timeout 300 -socket /var/lib/php7.0-fpm/web1.sock -pass-header Authorization  -pass-header Content-Type
                </IfModule>
                <IfModule mod_proxy_fcgi.c>
                        #ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ unix:///var/lib/php7.0-fpm/web1.sock|fcgi://localhost//var/www/clients/client0/web1/web/$1
                        <Directory /var/www/clients/client0/web1/web>
                                <FilesMatch "\.php[345]?$">
                                                SetHandler "proxy:unix:/var/lib/php7.0-fpm/web1.sock|fcgi://localhost"
                                </FilesMatch>
                        </Directory>
                        </IfModule>



                # add support for apache mpm_itk
                <IfModule mpm_itk_module>
                        AssignUserId web1 client0
                </IfModule>

                <IfModule mod_dav_fs.c>
                # Do not execute PHP files in webdav directory
                        <Directory /var/www/clients/client0/web1/webdav>
                                <ifModule mod_security2.c>
                                        SecRuleRemoveById 960015
                                        SecRuleRemoveById 960032
                                </ifModule>
                                <FilesMatch "\.ph(p3?|tml)$">
                                        SetHandler None
                                </FilesMatch>
                        </Directory>
                        DavLockDB /var/www/clients/client0/web1/tmp/DavLock
                        # DO NOT REMOVE THE COMMENTS!
                        # IF YOU REMOVE THEM, WEBDAV WILL NOT WORK ANYMORE!
      # WEBDAV BEGIN
                        # WEBDAV END
                </IfModule>



</VirtualHost>




root@debian:~#
 
Last edited by a moderator:

Joe User

Blog Benutzer
Da Du ja bereits >12 Jahre SSF auf dem Buckel hast:
Welchen Teil der offiziellen Dokumentationen zu Apache und PHP hast Du nicht verstanden?
 

Lord_Icon

Blog Benutzer
Offiziell... ?? na DIE zeig mir mal, die auf PHP-fpm und proxy set eingeht.
ICH für MEINEN Fall finde da recht wenig

Aber gut. Lt. einer Doku (nix offiziell) timeout hinten dran hängen.
Damit ich nicht immer 15+in warten muß, mal 1 genommen, was ja THEORETISCH sofort ein logeintrag werfen müsste.
Script läuft aber munter weiter. Schon mehrere Minuten.
Scheint HIER also nicht korrekt zu sein
Code:
<IfModule mod_proxy_fcgi.c>
     #ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ unix:///var/lib/php7.0-fpm/web1.sock|fcgi://localhost//var/www/clients/client0/web1/web/$1
     <Directory /var/www/clients/client0/web1/web>
            <FilesMatch "\.php[345]?$">
                 SetHandler "proxy:unix:/var/lib/php7.0-fpm/web1.sock|fcgi://localhost [COLOR="Red"][B]timeout=1[/B][/COLOR]"
              </FilesMatch>
     </Directory>
 </IfModule>
 
Last edited by a moderator:

Joe User

Blog Benutzer
Offiziell... na dDIE zeig mir mal, die auf PHP-fpm und proxy set eingeht.
ICH für MEINEN Fall finde da recht wenig
https://httpd.apache.org/docs/2.4/en/mod/mod_proxy_fcgi.html
https://secure.php.net/manual/en/install.fpm.php

Aber gut. Lt. einer Doku (nix offiziell) timeout hinten dran hängen.
Und genau deswegen ist es auch keine offizielle Doku, denn diesen Parameter gibt es nämlich nicht:
https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/proxy/mod_proxy_fcgi.c?view=markup



Kurz: PHP ist verantwortlich und nicht Apache. Wenn PHP hierfür keine Konfiguration anbietet, dann musst Du halt Deine App so umbauen, dass das Problem nicht mehr auftritt...
Letzteres musst Du eh machen, also mache es besser jetzt...
 

Lord_Icon

Blog Benutzer
Kurz: PHP ist verantwortlich und nicht Apache. Wenn PHP hierfür keine Konfiguration anbietet, dann musst Du halt Deine App so umbauen, dass das Problem nicht mehr auftritt...
Letzteres musst Du eh machen, also mache es besser jetzt...
Der Umbau erfolgt auf mysql zu mysqli und anderen abfragen.
Nicht aber das Script selbst. Es werden unmal mehrere Millionen Datensätze durchsucht und ggf. geupdatet. Das dauert halt.
 

Joe User

Blog Benutzer
Dann nutzt Du schlicht die falsche PHP-Variante:
Für soetwas nutzt man PHP-CLI und keine andere Variante.
Oder eine geeignetere (Script-)Sprache...
 

danton

Debian User
Nicht aber das Script selbst. Es werden unmal mehrere Millionen Datensätze durchsucht und ggf. geupdatet. Das dauert halt.
Hört sich nach einem klassischen Fall für eine Aufgabe auf der Kommandozeile an (PHP-CLI), um diese Daten zu verarbeiten - evtl. sogar, falls das regelmäßig passiert, in Verbindung mit einem Cronjob. Dann können die Einschränkungen bez. Laufzeit im Webserver auch bleiben, hat ja schon seinen Grund, dass es diese gibt.
 

Lord_Icon

Blog Benutzer
Das Script läuft Nachts um 3 Uhr und wird über ein Cron angestoßen.
Läuft je nach Veränderungen 3-5h. Also ja. PHP-CLI

Da ich es aber umbauen möchte und mit flush und so echtzeit-Ausgaben programmiert habe, will ich es im Browser gern mitverfolgen.

Aber egal. System wird heute platt gemacht und auf Debian 8 rückgesetzt. Da hatte es wenigstens funktioniert.

Danke für die zahlreichen Hilfen
 

danton

Debian User
Das funktioniert dann aber auch nur, wenn du um 3 Uhr im Browser das Script aufrufst. Sinnvolle Lösung: Script per PHP-CLI laufen lassen, Statusmeldungen z.B. in eine Log-Datei schreiben und mit einem weiteren Script vom Browser aus diese Log-Datei pollen - dann kannst du dich zu einem beliebigen Zeitpunkt zwischendurch an die Ausgabe dranhängen.
 
Top