Apache und php-cgi

Hallo,

ich habe PHP jetzt doch noch einmal neugebaut und nun scheint es zu funktionieren. Er gibt die phpinfo aus. Allerdings schluckt er aber kein php.ini File.

Wenn ich die php.ini-production umbenenne in php.ini erscheint auf der Konsole wieder nur der Quelltext. Wenn man php.ini löscht geht es. Ich habe dann eine neue php.ini einmal angelegt, weil er in der info Date bemängelt, also ein nano /usr/local/etc/php.ini und in dieser eingetragen:

Code:
[PHP]
date.timezone = Europe/Berlin

Apache neugestartet, aber in der info findet man bei Loaded Configuration File nur (none). Auch die Direktive DirectoryIndex akzeptiert der Indianer nicht. Gibt es dort ein zweites Modul was aktiviert sein muss?

MFG
Silvio
 
/etc/php.ini?

Wo kommt die denn her?

Wenn du ein wenig Zeit hast, lies dir mal hier(7) durch. Zwischenzeitlich sei schon mal gesagt, dass die Datei da schlicht falsch liegt.
 
Wenn ich die php.ini-production umbenenne in php.ini erscheint auf der Konsole wieder nur der Quelltext.

Ich kann mich dunkel an etwas Ähnliches erinnern - check mal in der php.ini folgende Einstellung:

/usr/local/etc/php.ini
Code:
[php]
short_open_tag = On

oder teste in deiner php-Datei mal folgendes:
phpinfo.php
Code:
<?php phpinfo(); ?>

Glaube mich zu erinnern, dass der Default für die kurzen Tags ("<?") seit neuestem auf off steht...
 
Hallo,


Code:
/etc/php.ini?

Wie kommst du darauf? Ich habe doch /usr/local/etc geschrieben, dort liegen ja nach den Bau von PHP die ini Files.


Code:
short_open_tag = On

Das ist es, damit läuft es auch mit der kompletten php.ini.


Jetzt noch die Direktive DirectoryIndex ans laufen bekommen und ich bin sehr glücklich.


Aber auf jeden Fall möchte ich euch wirklich danken. Für eure Geduld, eure aktive Mithilfe, das Ihr nicht geschimpft habt, wie es so in manchen anderen Foren der Fall ist. Vielen, vielen Dank. Ich weiß das viele Fragen eventuell mal dumm sind, aber das Ihr trotzdem so aktiv geholfen habt finde ich wirklich schön. Es gibt mir persönlich das Gefühl, das die Wahl von FreeBSD als Betriebssystem die richtige ist. Vielen, vielen Dank. Ich hoffe in der Zukunft kann ich auch etwas zurück geben.

Danke reakktor für diese einfache und sehr gute Lösung PHP mit Apache zu nutzen. Ich kann nicht verstehen wieso das noch nicht die Runde gemacht hat und immer noch die komplizierten Konfigurationen gefahren werden. Aber vielleicht liegt es daran das mit den Shell Lösungen wohl unterschiedliche php.ini genutzt werden können.

Hat noch jemand Rat für den DirectoryIndex Part? Ich hatte gelesen das mod_dir und autoindex aktiv sein müssen, beide sind aktiv in der Konfiguration.

MFG
Silvio
 
Hmm, danke für die Blumen, schön dass es läuft - vielleicht setzt sich ja mal was Sinnvolles durch ;)

Thema DirectoryIndex - es bestimmt, was und in welcher Reihenfolge an eine URL angehängt wird, wenn ein Directory angesprochen wird wie http://seite/
Dafür ist nur mod_dir zuständig, evtl.mal http://httpd.apache.org/docs/2.2/mod/mod_dir.html durchlesen.

Das mod_autoindex sorgt nur für eine schöne Ausgabe vom Dateisystem, wenn man das per "Options Indexes" zulässt - was man aber auf einem normalen Webserver eigentlich verbieten sollte, schönes Sicherheitsloch :D, im Zweifelsfall gleich ganz abschalten...
 
Hallo,


Code:
Thema DirectoryIndex - es bestimmt, was und in welcher Reihenfolge an eine URL angehängt wird, wenn ein Directory angesprochen wird wie http://seite/
Dafür ist nur mod_dir zuständig, evtl.mal http://httpd.apache.org/docs/2.2/mod/mod_dir.html durchlesen.

Die Seite hatte ich schon gelesen, steht ja nicht weltbewegendes.

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

Wenn ich mit den Firefox aufrufe kommt nur No input file specified. In der Log steht 404.

Code:
188.101.250.58 - - [04/Feb/2011:13:52:57 +0100] "GET / HTTP/1.1" 404 25 "-" "Mozilla/5.0 
(Windows; U; Windows NT 5.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET 
CLR 3.5.30729; .NET4.0C)"

Ich habe es mit index.html und index.php probiert.


Silvio
 
Hallo,


Code:
Ah tut mir leid, in dem einen Posting wird bei mir direkt hinter
 /usr/local die Zeile Umgebrochen.

Kein Problem, ich bekam nur leicht Panik, weil ich noch an einen anderen Server am werken war,.deshalb hätte eine Verwechslung sein können.

Zum DirectoryIndex:

Ich habe jetzt einmal fastcgi in der Konfiguration deaktiviert, dann geht mod_dir ohne Probleme. Mit aktivierten FastCGI nicht.

Reakktor hast du dieses Verhalten auch? Hast du das so gelöst bekommen, oder löst man das gleich mit RewriteRules?


Silvio
 
Stimmt, da muss sich irgendwas gedreht haben mit PHP 5.3. Unter 5.2 musste man da ein Flag "REDIRECT=on "beim compilieren setzen, dann lief das instant. Das Flag gibts bei 5.3 nicht mehr.

Kann das nun auf dem Testrechner nachvollziehen, das mit dem DirectoryIndex greift nicht.

Konnte es über eine .htaccess+RewriteRule wieder um Laufen bekommen
Code:
RewriteEngine On
RewriteCond %{REQUEST_URI} \/$
RewriteRule ^(.*)$ index.php [L,QSA]

Ist nur ein Schnellsschuss, ist sicher verbesserungswürdig, aber tut was es soll - ein installiertes Drupal läuft damit zumindest wieder.

Wie ich anfange dieses PHP 5.3 richtig zu hassen :mad:
 
Denke ich hab jetzt die Lösung gefunden, wie das unter Apache 2.2 und PHP 5.3 geht, machte mich rallig ;)

httpd.conf:
Code:
AddHandler php5-fastcgi .php
Action php5-fastcgi /fake-handler
FastCgiExternalServer /usr/local/www/silviosiefke/fake-handler -host 127.0.0.1:9000
Alias /fake-handler /usr/local/www/silviosiefke

Dann klappt's auch mit dem DirectoryIndex. Jedoch Vorsicht mit weiteren Redirects/Rewrites innerhalb vom Webroot, wenn dort wieder index.php umgeschrieben wird, dann gibts Endlos-Rekursionen (=503 internal server error). Also das Zeug oben mit dem Rewrite in der .htaccess wieder raus :)
 
Hallo,


wow danke das du das durch testest. Denkst du das würde mit einen CMS was rewrite Rules setzt funktionieren?

Mit meiner Website setze ich Contrexx ein, das Rewrite nutzt um Links zu umschreiben, ist ja freundlicher in der Anwendung und es nutzt Rewrite um die virtuellen Sprachverzeichnisse zu setzen?

Code:
Beispiele für Link:
RewriteRule ^home$    /index.php?section=home [L,NC,QSA]
RewriteRule ^ich$    /index.php?page=279 [L,NC,QSA]

Beispiel für Sprachverzeichnisse:
#<cookie>
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_COOKIE} langId=([a-z]{2})
RewriteRule ^.*$ /%1%{QUERY_STRING} [L,NC,R=301]
#</cookie>
#<trailing_slash>
RewriteCond %{REQUEST_URI} ^/(de|en|fr)$
RewriteRule ^.*$ /%1/ [L,NC,R=301]
#</trailing_slash>
#<language>
#<de>
RewriteCond %{REQUEST_URI} ^/de/index.php|^/de(/)?$
RewriteCond %{QUERY_STRING} !langId [OR]
RewriteCond %{QUERY_STRING} langId=1
RewriteRule ^de/?.*$ /index.php?%{QUERY_STRING}&langId=1 [L,NC,E=CONTREXX_LANG_PREFIX:de]
#</de>

Danke für dein Testen.

Gruß
Silvio
 
Einfach probieren, aber ich fürchte schon mal, dass dann die Endlos-Rekursion einsetzt - in dem Fall in der .htaccess die vorher beschriebene RewriteRule mit dem "/"-Rewrite ganz oben einfügen.
Die macht nichts anderes, als bei einem Ende auf "/" ein index.php anzuhängen (also das mod_dir zu emulieren) und dann greifen die restlichen Regeln in der Contrexx-htaccess ganz normal.
 
Hallo,

hier noch einmal kurz die Erklärung wie ich das jetzt erledigt habe.

1.) PHP-FPM gebaut
cd /usr/ports/lang/php5
markiert cgi, fpm suhosin und IPV6

2.) Apache Worker installiert
cd /usr/ports/www/apache22-worker-mpm
cd /usr/ports/www/mod_fastcgi

3) /usr/local/etc/php-fpm.conf
Code:
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/apache/php-fpm.log

[cms_siefke] <-> Hier sollte eurer Vserver User stehen (Suexec)
listen = /tmp/cms_siefke.socket 
listen.owner = cms_siefke <-> Hier sollte eurer Vserver User stehen (Suexec)
listen.group = cms_siefke <-> Hier sollte eurer Vserver User stehen (Suexec)
listen.mode = 0666 
user = cms_siefke <-> Hier sollte eurer Vserver User stehen (Suexec)
group = cms_siefke <-> Hier sollte eurer Vserver User stehen (Suexec)
pm = dynamic
pm.max_children = 60
pm.start_servers = 1 <-> Hier erhöhen, wenn mehr Last vorhanden ist.
pm.min_spare_servers = 1
pm.max_spare_servers = 10
php_admin_value[error_log] =
php_admin_value[session.save_path] =
php_admin_value[upload_tmp_dir] =
php_admin_value[upload_max_filesize] = 

Hier kann man die ganze Konfiguration für den Virtuellen Server aktivieren.

Im Apache das FastCGI Modul nur noch aktivieren. Den virtuellen Server habe ich wie folgt konfiguriert.

Code:
<VirtualHost>
 SuexecUserGroup "cms_siefke" "cms_siefke"
 ServerName cms.silviosiefke.de
 DocumentRoot /usr/local/www/vserver/cms.silviosiefke.de/data
 ScriptAlias /cgi-bin/ "/usr/local/www/vserver/cms.silviosiefke.de/cgi-bin/"
 AddHandler php5-fastcgi .php
 FastCgiExternalServer /usr/local/www/vserver/cms.silviosiefke.de/data -socket /tmp/cms_siefke.socket

<Directory /usr/local/www/vserver/cms.silviosiefke.de/data>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} \/$
RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>
Options -All +FollowSymLinks +ExecCGI
AllowOverride Options FileInfo AuthConfig Limit
allow from all
AllowOverride All
</Directory>

ErrorLog /usr/local/www/vserver/cms.silviosiefke.de/log/error.log
CustomLog /usr/local/www/vserver/cms.silviosiefke.de/log/access.log combined
</VirtualHost>

Die RewriteRules müssen leider sein, weil Apache sonst keine Datei lädt. Warum das so ist verstehe ich nicht so ganz, der Marktführer der Webserver macht bei der ganzen Konfiguration echte Probleme im Gegenteil zum Lighttpd und Nginx. Lighttpd konnte ich ebenfalls testen, Nginx leider nicht, weil er sich irgendwie weigert die Vhost Config anzuwenden.

Ich hoffe das mag manchen einen Ansatz geben. Auch hoffe ich das Apache oder FastCGI es hinbekommen das man so eine Konfiguration ohne Rewrite fahren kann. Ist schon ärgerlich das man mit dem Apache so herum wildern muss, wo es die vermeidlichen kleinen out-of-box beherrschen.

Gruß
Silvio
 
Hallo,


ein Problem scheint es wohl noch zu geben. Wenn ich eine Website aufrufe, erhalte ich keine grafischen Elemente.

Wenn ich über Lighttpd die Website aufrufe erscheint alles korrekt, wenn ich über Apache aufrufe, werden wohl nicht alle Dateien geladen.

Siehe Screenshots, vielleicht hat einer eine Idee woran es liegt?


MFG
Silvio
 

Anhänge

  • fastcgi_apache.PNG
    fastcgi_apache.PNG
    60,8 KB · Aufrufe: 324
  • fastcgi_lighttpd.PNG
    fastcgi_lighttpd.PNG
    87,9 KB · Aufrufe: 312
Wenn es so viel Stress macht, vielleicht doch einfach beim Apache das mod_php5 aktivieren, und *schwupps* mag der Ärger verschwunden sein.

Und wenn es nicht unbedingt dieser überfrachtete Indianer-Koloss sein muss, nginx und lighttp laufen mit fast-cgi ausgezeichnet!
Eine neue Alternative kommt sogar aus dem eigenen Lager - apache Cherokee. Selbst da kein Problem mit fast-cgi ;)
 
Hallo,


Das Lighttpd prima läuft weiß ich, den ich nutze den schon teilweise. Nur leider gibt es CMS/Blogger die nicht laufen mögen.

Nginx hatte ich mal probiert, aber irgendwie mag er meine Virtuelle Konfiguration nicht.

Cherokee kommt echt von Apache? Der Cherokee wo man alles über den Webinterface einstellen muss, kann? Verwunderlich warum Apache es dort dann gebacken bekommt eine vernünftige Schnittstelle zu bieten, aber bei den Marktführer nicht. Ist das nicht irgendwie schräg?

Apache läuft doch mit CGI einigermaßen vernünftig, wenn es auch, wie hast du es genannt, eine Krücke ist. Ich finde es schade das nirgends wirklich eine vernünftige Erklärung gibt, wie man das betreibt. Ich meine deine Idee mit spawn-cgi, im Prinzip ist FPM gleich, wirklich eine super Sache, einfach zu warten und zu installieren. Aber wenn du PHP CGI Apache bei Google eingibst landest du nur bei den Konfigurationen mit der Krücke.

Was mit Lighttpd so wird, ist doch auch offen. Wenn man sich im SVN so umsieht, scheint der Code kaum noch bearbeitet zu werden.

MFG
Silvio
 
Nginx hatte ich mal probiert, aber irgendwie mag er meine Virtuelle Konfiguration nicht.

Nginx ist auf den ersten Blick mal ein Biest - aber wenn man die Config-Syntax verstanden hat, dann ist das ein sehr einfaches und mächtiges Werkzeug.
Mag jetzt keine Schleichwerbung machen, aber einer meiner Babies rennt unter nginx/php so hervorragend, dass wir Anfragen bekommen, warum das so fix geht ;)

Cherokee kommt echt von Apache?

Definitiv ein Fehler von mir. Nach Recherche - das ist eine Konkurrenz-Entwicklung, die nix mit Apache zu tun hat. Trotzdem sehr vielversprechend.

Edit: Besonder Stolz bei (und nginx/php/mysql-Tech-Demo) liegt bei der Live-Suche über das Suchen-Feld - instant Live-Suche wie bei Google beim Tippen, nur gleich mit Bildern...

Edit 2: Wollte damit ausdrücken - der Apache Webserver ist ein gutes, aber altbackenes Ding, dessen Tage bereits gezählt sind. Es gibt wesentlich performantere Alternativen, die einen Blick wert sind....


//werbung geloescht
 
Zuletzt bearbeitet:
Morgen,


So habe ich mir deine Seite mal angeschaut. Ist interessant und hat mich gleich bewogen, nginx zu installieren und zu meiner Überraschung war die erste Howto im Netz auch gleich erfolgreich. Es läuft, sogar die Rewrite Rule für Contao. Vielen, vielen Dank. Ich bin immer wieder überrascht wie man durch Linux, jetzt FreeBSD und den Anwendern doch lernen kann. Bei den BSD "Fachleuten" wird man auch nicht arrogant behandelt, wie es oft in den Linuxforen doch ist. Ich hatte mal in einer Signatur den Vergleich mit Windows, Linux und BSD Anwendern gelesen, vielleicht stimmt das tatsächlich.

Mit den Cherokee ist ja nicht schlimm, es hätte mich nur gewundert das Apache es dort hinbekommen soll und im Apache nicht.

Übrigens hatte ich mich einmal an ein paar Mail Listen gewannt, speziell von Apache und von FastCGI aber anscheinend weiß keiner eine Lösung oder aber es geht nicht. Aber jetzt wo Nginx doch läuft, warum nicht den nehmen.


MFG
Silvio

PS: Vielen, vielen Dank.
 
Zurück
Oben