Apache2 und PHP unter anderem User

Apache, Lighttpd, nginx, Cherokee
Post Reply
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Apache2 und PHP unter anderem User

Post by krispin »

Hallo!

Also, ich versuche das dann nochmal anders.

Wenn es also unmöglich ist, dem Apache2 unter dem mpm-mod worker beizu bringen, dass er wieder gefälligst für jeden VHost andere User acceptiert, ist denn möglich, dann nur php-scripte unter einem anderen User parsen zu lassen? - Bei dem punkt, dass php als apache-modul drin bleibt (also kein suEXEC etc...), besteht weiterhin.

MfG
Krispin
majortermi
Userprojekt
Userprojekt
Posts: 916
Joined: 2002-06-17 16:09
 

Re: Apache2 und PHP unter anderem User

Post by majortermi »

Nein, entweder du benutzt das "perchild" MPM, oder du musst PHP als CGI mit suExec laufen lassen (warum sollte dir eigentlich klar sein, wenn du das Konzept verstanden hast).
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
majortermi
Userprojekt
Userprojekt
Posts: 916
Joined: 2002-06-17 16:09
 

Re: Apache2 und PHP unter anderem User

Post by majortermi »

Was mir gerade noch eingefallen ist: Warum benutzt du das "worker" MPM statt des ausgereiften, stablien "perfork" MPM. Der Performance-Unterschied dürfte unter Linux doch erst beim neuen 2.6er Kernel spürbar werden.
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

Weil worker sehr viel besser skaliert und flexibler ist. Es ist einfach die bessere Architektur. Nicht nur auf SMP-Maschienen, wenn auch da besonders. Warum jemand perfork benutzen sollte bleibt unklar, entweder perchild wegen dem "besseren suexec" oder worker.
majortermi
Userprojekt
Userprojekt
Posts: 916
Joined: 2002-06-17 16:09
 

Re: Apache2 und PHP unter anderem User

Post by majortermi »

øxygen wrote:Weil worker sehr viel besser skaliert und flexibler ist. Es ist einfach die bessere Architektur. Nicht nur auf SMP-Maschienen, wenn auch da besonders.
Aber unter Linux vor Version 2.5 ist die Thread-Unterstützung doch eher schlecht, von der Seite her sehe ich nicht ganz, was der Vorteil von mutithreading gegenber multiprocessing ist.
Davon abgesehen, hat man beim prefork MPM keine Probleme mit Programmen, die nicht reentrant sind.
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

Dieses Multi-Processing-Modul (MPM) [...worker...] implementiert einen Hybrid-Server mit Multi-Thread und Multi-Prozess-Unterstützung. Durch die Verwendung von Threads für die Bedienung von Anfragen ist er in der Lage, eine große Anzahl von Anfragen mit weniger Systemressourcen als ein Prozess-basierter Server zu bedienen. Er behält jedoch viel von der Stabilität eines Prozess-basierten Servers bei, indem er mehrere Prozesse verfügbar hält, jeden mit etlichen Threads.
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

MajorTermi wrote:Nein, entweder du benutzt das "perchild" MPM, oder du musst PHP als CGI mit suExec laufen lassen (warum sollte dir eigentlich klar sein, wenn du das Konzept verstanden hast).
haste es schonmal geschaft, Perchild auf Linux zu Compilieren, und dass dann auch Lauffähig zu kriegen!?

Schreibt die voin Apache doch selber bei diesem Mod dabei, eingerahmt!

SuExec - NEIN, weil erstmal ist es nicht das ware von der Performince her, und zweitens gibbet dann keine $_env und $_server - vars...

MfG
Krispin
majortermi
Userprojekt
Userprojekt
Posts: 916
Joined: 2002-06-17 16:09
 

Re: Apache2 und PHP unter anderem User

Post by majortermi »

krispin wrote:haste es schonmal geschaft, Perchild auf Linux zu Compilieren, und dass dann auch Lauffähig zu kriegen!?
Nö, was meinst du, warum ich Apache 1.3.x benutze?
SuExec - NEIN, weil erstmal ist es nicht das ware von der Performince her, und zweitens gibbet dann keine $_env und $_server - vars...
Naja, in den meisten Fällen wirst du den Performance-Unterschied nicht wirklich merken.
Und $_ENV bzw. $_SERVER gibt es trotzdem.
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

"man wirt es zwar nicht merken" ,
aber das ist keine wirklich gute Argument ;)

Ich habe da nun auch ne lösung, für den Server, der ne Andere ID brauch, habe ich nun den Debian Apache-SSL installiert, und Prob gelöst :)

MfG
Krispin
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

Also ich habe gerade mal testweise apache2-prechild gebaut. Funktioniert. Hier so sieht das dann aus:

Code: Select all

#httpd -l
Compiled in modules:
  core.c
  perchild.c
  http_core.c
  mod_so.c

#httpd -V
Server version: Apache/2.0.47
Server built:   Aug 20 2003 16:29:15
Server's Module Magic Number: 20020903:4
Architecture:   32-bit
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/experimental/perchild"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/httpd/mime.types"
 -D SERVER_CONFIG_FILE="/etc/httpd/httpd.conf"

#ps aux | grep httpd
root     13482  0.6  0.8  4308 2112 ?        S    00:33   0:00 /usr/sbin/httpd2-perchild -f /etc/apache2/httpd.conf
wwwrun   13483  0.0  0.8  4252 2076 ?        S    00:33   0:00 /usr/sbin/httpd2-perchild -f /etc/apache2/httpd.conf
vhost1   13484  0.3  0.8  4356 2212 ?        S    00:33   0:00 /usr/sbin/httpd2-perchild -f /etc/apache2/httpd.conf
vhost1   13485  0.0  0.8  4356 2212 ?        S    00:33   0:00 /usr/sbin/httpd2-perchild -f /etc/apache2/httpd.conf
vhost2   13486  0.3  0.8  4356 2212 ?        S    00:33   0:00 /usr/sbin/httpd2-perchild -f /etc/apache2/httpd.conf
vhost2   13487  0.3  0.8  4356 2212 ?        S    00:33   0:00 /usr/sbin/httpd2-perchild -f /etc/apache2/httpd.conf
Weiß eigentlich jemand ob confixx das unterstützt? Das hat mich auf den Geschmack gebracht...
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

unter welchem distri denn denn?

und würdeste bitte auch mal die Funktion, die perchild bietet ausprobieren?

Weil ab da es bei mir nämlich dann gescheitert hat!

mit PerchildUserID etc...

und AssignUserID bei Vhost ...

ließ dir das mal ganz genau durch!

http://httpd.apache.org/docs-2.0/de/mod/perchild.html

Ps: auf feedback bin ivh gespannt, weil ich das nämlich trotzdem gerne irgendwie mal hinkriegen würde :)
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

Es funktioniert. Sieht man ja an dem ps Auszug. Distribution war eine SuSE 8.1, mein Test Rechner Zuhause. Folgende Konfiguration hab ich getestet (incl. php und perl):

Das Ergebnis sieht man oben.

Code: Select all

ChildPerUserID vhost1 wwwdocs 2
ChildPerUserID vhost2 wwwdocs 2

<VirtualHost *>
    DocumentRoot /www/vhost1
    ServerName vhost1.server.local
    AssignUserID vhost1 wwwdocs
</VirtualHost>

<VirtualHost *>
    DocumentRoot /www/vhost2
    ServerName vhost2.server.local
    AssignUserID vhost2 wwwdocs
</VirtualHost>
Hier ein kleiner Ã?berblick was ich gemacht habe:

Folgendes Paket habe ich der Einfachheit halber benutzt: ftp://ftp.suse.com/pub/projects/apache/ ... 20.src.rpm

in apache2.spec

Code: Select all

%define default_mpm     prefork
%{!?perchild:%define perchild 0}
%{!?prefork:%define prefork 1}
%{!?worker:%define worker 1}
%{!?leader:%define leader 1}
Durch folgendes ersetzt:

Code: Select all

%define default_mpm     perchild
%{!?perchild:%define perchild 1}
%{!?prefork:%define prefork 0}
%{!?worker:%define worker 0}
%{!?leader:%define leader 0}
RPMs bauen:
rpm -ba /usr/src/packages/SPECS/apache2.spec

RPMs installieren:
rpm -i /usr/src/packages/RPMS/i386/apache2*

Modulverzeichnis korrigieren:
rm -R /etc/apache2/modules
ln -s /usr/lib/apache2 /etc/apache2/modules

Standards anpassen:
vi /etc/sysconfig/apache2

Abschließen:
SuSEconfig --module apache2

Konfiguration anpassen:
vi /etc/apache2/httpd.conf

starten:
rcapache2 start

Läuft und Funktioniert.
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

super.... nur hat Debian keine RPMs :(
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

Tja. Aber ich wüsste nicht warum es mit dem normalen Sourcepaket nicht gehen sollte.
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

ich auch probiere es doch mal aus!

es der Compilert wunder bar, jedoch, kommt ein Request rein, stürzt der apache ab...

und vor allen dingen, wenne das dann mal machst, musste mir umgedingt mal den ./configure -befehl geben!

MfG
Krispin
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

also mein ./configure vom apache2 sähe dann so aus:

Code: Select all

./configure 
--enable-maintainer-mode 
--enable-layout=SuSE81 
--with-program-name=httpd2-perchild 
--with-mpm=perchild 
--with-perl=`which perl` 
--enable-mods-shared=all 
--enable-ssl=shared 
--disable-deflate 
--enable-echo 
--enable-ext-filter 
--enable-charset-lite 
--enable-file-cache 
--enable-logio 
--enable-case_filter 
--enable-case_filter_in 
--with-ldap 
--enable-ldap 
--enable-auth_ldap 
--enable-proxy 
--enable-proxy-connect 
--enable-proxy-ftp 
--enable-proxy-http 
--enable-cache 
--enable-disk-cache 
--enable-mem-cache 
von PHP4.3.3RC4

Code: Select all

./configure 
--prefix=/usr/share 
--datadir=/usr/share/php 
--bindir=/usr/bin 
--libdir=/usr/share 
--with-config-file-path=/etc 
--with-exec-dir=/usr/lib/php/bin 
--with-mysql=/usr 
--with-zlib 
--with-bz2 
--with-ftp 
--with-gettext 
--disable-debug 
--with-openssl 
--with-apxs2=/usr/sbin/apxs2-perchild 
--silent
Last edited by oxygen on 2003-08-21 18:56, edited 1 time in total.
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

ähm, aber du compilierst den shit dann auch noch?
./configure
--with-mpm=prechild
Nicht dein Ernst, oder? :D - Obwohl es sich auch "spacig" anhört ;)
MfG
Krispin
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 und PHP unter anderem User

Post by oxygen »

Ich musste denn ./configure String aus dem spec File fischen... das sollte natürlich perchild heißen.
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

nix.... will einfach nicht.. argl... aber moment.. ich habe ja noch das mod_vdbh im core drin, werde ich mal entfernen...
krispin
Posts: 216
Joined: 2003-04-14 16:30
 

Re: Apache2 und PHP unter anderem User

Post by krispin »

ne, daran lag es auch nicht..... perchild will einfach nicht... aber ich bin zuversichtlich, da die von Apache-Foundation schreiben, dass die an dem Problem arbeiten, da man dieses Modul nur auf wenigen OSs bis nun am laufen kriegen soll.!

http://httpd.apache.org/docs-2.0/mod/perchild.html
ich dem rot eingerahmten Kasten.

Naja, so richtig brauchen tu ich das perchild ja nicht, aber es ärgert mich nun, dass ich es nicht m laufen kriege ;)

MfG
Krispin
Post Reply