GNU/Linux >> LINUX-Kenntnisse >  >> OpenSuse

So richten Sie Apache2 mit mod_fcgid und PHP5 unter OpenSUSE 11.3 ein

Dieses Tutorial beschreibt, wie Sie Apache2 mit mod_fcgid und PHP5 auf OpenSUSE 11.3 installieren können. mod_fcgid ist eine kompatible Alternative zum älteren mod_fastcgi. Damit können Sie PHP-Skripte mit den Berechtigungen ihrer Eigentümer anstelle des Apache-Benutzers ausführen.

1 Vorbemerkung

Ich verwende in diesem Tutorial einen OpenSUSE 11.3-Server mit dem Hostnamen server1.example.com und der IP-Adresse 192.168.0.100.

Ich werde in diesem Tutorial zwei Apache-Vhosts erstellen, www.example1.com und www.example2.com, um die Verwendung von mod_fcgid zu demonstrieren.

2 Installieren von Apache2/mod_fcgi/PHP5

Wir können Apache2, mod_fcgid und PHP5 wie folgt installieren:

yast2 -i apache2 apache2-mod_fcgid php5-fastcgi

Wenn Apache2 bereits mit PHP5 als Apache-Modul installiert war, deaktivieren Sie jetzt das PHP5-Modul:

a2dismod php5

Als nächstes aktivieren Sie die Module suexec und fcgid:

a2enmod suexec
a2enmod fcgid

Dann erstellen wir die Systemstartlinks für Apache und starten es:

chkconfig --add apache2
/etc/init.d/apache2 start

Als nächstes öffnen wir /etc/php5/fastcgi/php.ini...

vi /etc/php5/fastcgi/php.ini

... und kommentieren Sie die Zeile cgi.fix_pathinfo =1:

aus
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]

Starten Sie dann Apache neu:

/etc/init.d/apache2 restart

3 Erstellen von Vhosts für www.example1.com und www.example2.com

Ich werde jetzt zwei vhosts erstellen, www.example1.com (mit dem Document Root /srv/www/web1/web) und www.example2.com (mit dem Document Root /srv/www/web2/web). www.example1.com gehört dem Benutzer und der Gruppe web1 und www.example2.com dem Benutzer und der Gruppe web2.

Zuerst erstellen wir die Benutzer und Gruppen:

groupadd web1
groupadd web2
useradd -s /bin/false -d /srv/www/web1 -m -g web1 web1
useradd -s /bin/false -d /srv/www/web2 -m -g web2 web2
chmod 755 /srv/www/web1
chmod 755 /srv/www/web2

Dann erstellen wir die Document Roots und machen sie zu Eigentum der Benutzer/Gruppen web1 bzw. web2:

mkdir -p /srv/www/web1/web
chown web1:web1 /srv/www/web1/web
mkdir -p /srv/www/web2/web
chown web2:web2 /srv/www/web2/web

Wir werden PHP mit suExec ausführen; Der Dokumentenstamm von suExec ist /srv/www, wie der folgende Befehl zeigt:

/usr/sbin/suexec2 -V
server1:~ # /usr/sbin/suexec2 -V
 -D AP_DOC_ROOT="/srv/www"
 -D AP_GID_MIN=96
 -D AP_HTTPD_USER="wwwrun"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=96
 -D AP_USERDIR_SUFFIX="public_html"
server1:~ #

Daher können wir die PHP-Binärdatei (/usr/bin/php-cgi) nicht direkt aufrufen, da sie sich außerhalb des Dokumentstammverzeichnisses von suExec befindet. Da suExec keine symbolischen Links zulässt, besteht die einzige Möglichkeit, das Problem zu lösen, darin, für jede Website ein Wrapper-Skript in einem Unterverzeichnis von /srv/www zu erstellen; Das Wrapper-Skript ruft dann die PHP-Binärdatei /usr/bin/php-cgi auf. Das Wrapper-Skript muss dem Benutzer und der Gruppe jeder Website gehören, daher benötigen wir ein Wrapper-Skript für jede Website. Ich werde die Wrapper-Skripte in Unterverzeichnissen von /srv/www/php-fcgi-scripts erstellen, z. /srv/www/php-fcgi-scripts/web1 und /srv/www/php-fcgi-scripts/web2.

mkdir -p /srv/www/php-fcgi-scripts/web1
mkdir -p /srv/www/php-fcgi-scripts/web2
vi /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Die PHPRC-Zeile enthält das Verzeichnis, in dem sich die Datei php.ini befindet (d. h. /etc/php5/fastcgi/ wird übersetzt in /etc/php5/fastcgi/php.ini). PHP_FCGI_MAX_REQUESTS ist die maximale Anzahl von Anfragen, bevor ein fcgid-Prozess gestoppt und ein neuer gestartet wird. PHP_FCGI_CHILDREN definiert die Anzahl der PHP-Kinder, die gestartet werden.

Die php-fcgi-starter-Skripte müssen ausführbar sein und sie (und die Verzeichnisse, in denen sie sich befinden) müssen dem Benutzer und der Gruppe der Website gehören:

chmod 755 /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /srv/www/php-fcgi-scripts/web1
chown -R web2:web2 /srv/www/php-fcgi-scripts/web2

Jetzt erstellen wir die Apache vhosts für www.example1.com und www.example2.com:

vi /etc/apache2/vhosts.d/www.example1.com.conf
<VirtualHost *>
  ServerName www.example1.com
  ServerAlias example1.com
  ServerAdmin [email protected]
  DocumentRoot /srv/www/web1/web/

  <IfModule mod_fcgid.c>
    SuexecUserGroup web1 web1
    PHP_Fix_Pathinfo_Enable 1
    <Directory /srv/www/web1/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

</VirtualHost>
vi /etc/apache2/vhosts.d/www.example2.com.conf
<VirtualHost *>
  ServerName www.example2.com
  ServerAlias example2.com
  ServerAdmin [email protected]
  DocumentRoot /srv/www/web2/web/

  <IfModule mod_fcgid.c>
    SuexecUserGroup web2 web2
    PHP_Fix_Pathinfo_Enable 1
    <Directory /srv/www/web2/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /srv/www/php-fcgi-scripts/web2/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

</VirtualHost>

Stellen Sie sicher, dass Sie die richtigen Pfade (und den richtigen Benutzer und die richtige Gruppe in den SuexecUserGroup-Zeilen) eingeben.

Öffnen Sie /etc/apache2/httpd.conf und fügen Sie die Zeile NameVirtualHost * vor der Zeile Include /etc/apache2/vhosts.d/*.conf ein (sonst funktioniert nur der erste vhost):

vi /etc/apache2/httpd.conf
[...]
### Virtual server configuration ############################################
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs-2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
NameVirtualHost *

Include /etc/apache2/vhosts.d/*.conf
[...]

Bevor wir Apache neu starten, ändern wir die Berechtigungen der ausführbaren suExec-Datei (andernfalls sehen Sie beim Neustart von Apache die folgende Warnung:Warnung:SuexecUserGroup-Direktive erfordert SUEXEC-Wrapper.):

chmod 4755 /usr/sbin/suexec2

Danach Apache neu starten:

/etc/init.d/apache2 restart

4 Testen

Jetzt erstellen wir eine kleine PHP-Testdatei, zum Beispiel auf der Website www.example1.com...

vi /srv/www/web1/web/info.php
<?php
phpinfo();
?>

... und rufen Sie diese Datei in einem Browser auf (http://www.example1.com/info.php). Wenn alles gut geht, sollte die Ausgabe ähnlich aussehen, und Sie sollten CGI/FastCGI in der Server-API-Zeile sehen:

5 Benutzerdefinierte php.ini für jede Website

Da jede Website ihr eigenes php-fcgi-starter-Wrapper-Skript hat, ist es möglich, verschiedene php.ini-Dateien für verschiedene Websites zu definieren. Um dies zu demonstrieren, kopiere ich die standardmäßige php.ini (/etc/php5/fastcgi/php.ini) in das Verzeichnis /srv/www/web2/ und lasse www.example2.com die php.ini aus /srv verwenden /www/web2/ Verzeichnis:

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

(Sie können jetzt /srv/www/web2/php.ini nach Ihren Wünschen ändern.)

Dann öffnen wir /srv/www/php-fcgi-scripts/web2/php-fcgi-starter...

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

... und fügen Sie /srv/www/web2/ in die PHPRC-Zeile ein:

#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Danach Apache neu starten:

/etc/init.d/apache2 restart

Erstellen Sie eine neue phpinfo(); Datei für www.example2.com...

vi /srv/www/web2/web/info.php
<?php
phpinfo();
?>

... und in einem Browser aufrufen (http://www.example2.com/info.php). Die Zeile Loaded Configuration File sollte nun /srv/www/web2/php.ini:

anzeigen

6 Einzelne PHP-Konfigurationseinstellungen ändern

Anstatt eine ganz neue php.ini-Datei an Ihre Website zu übergeben, können Sie auch einzelne PHP-Konfigurationseinstellungen im php-fcgi-starter-Wrapper-Skript ändern (oder eine Kombination aus beidem verwenden), indem Sie den Schalter -d zu PHP hinzufügen ausführbar. Wenn ich zum Beispiel magic_quotes_gpc für die Website www.example2.com deaktivieren möchte, mache ich das wie folgt:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off

Danach Apache neu starten:

/etc/init.d/apache2 restart

Rufen Sie dann das Skript info.php erneut in einem Browser auf (http://www.example2.com/info.php) und suchen Sie nach der Zeile magic_quotes_gpc - sie sollte jetzt Off anzeigen:

  • mod_fcgid:http://fastcgi.coremail.cn/
  • Apache:http://httpd.apache.org/
  • PHP:http://www.php.net/
  • OpenSUSE:http://www.opensuse.org/

OpenSuse
  1. So installieren Sie Apache2 mit PHP5 und MySQL auf Fedora 16 (LAMP)

  2. So installieren Sie Lighttpd mit PHP5 FastCGI und MySQL unter openSUSE 12.1

  3. So installieren Sie Nginx mit PHP-FPM und MySQL unter openSUSE 12.1

  4. So richten Sie einen SFTP-Server auf OpenSUSE Leap 15.3 Server ein

  5. So installieren und konfigurieren Sie PHP und Apache (LAMP-Stack) unter OpenSUSE Leap 15.3

So richten Sie Apache2 mit mod_fcgid und PHP5 unter OpenSUSE 11.2 ein

So richten Sie Apache2 mit mod_fcgid und PHP5 unter OpenSUSE 12.2 ein

So richten Sie Apache2 mit mod_fcgid und PHP5 unter OpenSUSE 12.3 ein

So richten Sie Mailman mit Debian und ISPConfig ein

So richten Sie ein VPN mit OpenVPN unter Ubuntu 18.04 ein und konfigurieren es

So installieren und konfigurieren Sie WordPress mit Ansible