GNU/Linux >> Znalost Linux >  >> OpenSuse

Jak nastavit Apache2 s mod_fcgid a PHP5 na OpenSUSE 12.2

Tento tutoriál popisuje, jak můžete nainstalovat Apache2 s mod_fcgid a PHP5 na OpenSUSE 12.2. mod_fcgid je kompatibilní alternativou ke staršímu mod_fastcgi. Umožňuje vám spouštět PHP skripty s oprávněními jejich vlastníků namísto uživatele Apache.

1 předběžná poznámka

V tomto tutoriálu používám server OpenSUSE 12.2 s názvem hostitele server1.example.com a IP adresou 192.168.0.100.

V tomto tutoriálu vytvořím dva vhosty Apache, www.example1.com a www.example2.com, abych demonstroval použití mod_fcgid.

2 Instalace Apache2/mod_fcgi/PHP5

Apache2, mod_fcgid a PHP5 můžeme nainstalovat následovně:

instalace zypperu apache2 apache2-mod_fcgid php5-fastcgi

Pokud byl Apache2 již nainstalován s PHP5 jako modul Apache, vypněte modul PHP5 nyní:

a2dismod php5

Dále povolte moduly suexec a fcgid:

a2enmod suexec
a2enmod fcgid

Poté vytvoříme spouštěcí odkazy systému pro Apache a spustíme jej:

systemctl povolit apache2.service
systemctl spustit apache2.service

Dále otevřeme /etc/php5/fastcgi/php.ini...

vi /etc/php5/fastcgi/php.ini

... a odkomentujte řádek cgi.fix_pathinfo =1:

[...]; cgi.fix_pathinfo poskytuje *skutečnou* podporu PATH_INFO/PATH_TRANSLATED pro CGI. PHP; předchozí chování bylo nastavit PATH_TRANSLATED na SCRIPT_FILENAME a negrok; co je PATH_INFO. Další informace o PATH_INFO naleznete ve specifikacích cgi. Nastavení; toto na 1 způsobí, že PHP CGI opraví své cesty tak, aby odpovídaly specifikaci. nastavení; nula způsobí, že se PHP bude chovat jako předtím. Výchozí hodnota je 1. Měli byste opravit své skripty; použít SCRIPT_FILENAME spíše než PATH_TRANSLATED.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=1[...]

Otevřete /etc/apache2/conf.d/mod_fcgid.conf...

vi /etc/apache2/conf.d/mod_fcgid.conf

... a přidejte řádek PHP_Fix_Pathinfo_Enable 1 (tento řádek nesmí jít do sekce , protože pak byste dostali tuto chybu:PHP_Fix_Pathinfo_Enable se nemůže vyskytovat v sekci ):

[...]PHP_Fix_Pathinfo_Enable 1

Poté restartujte Apache:

systemctl restart apache2.service

3 Vytvoření Vhosts pro www.example1.com a www.example2.com

Nyní vytvořím dva vhosty, www.example1.com (s kořenem dokumentu /srv/www/web1/web) a www.example2.com (s kořenem dokumentu /srv/www/web2/web). www.example1.com bude vlastnit uživatel a skupina web1 a www.example2.com uživatel a skupina web2.

Nejprve vytvoříme uživatele a skupiny:

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

Poté vytvoříme kořeny dokumentu a učiníme je vlastněnými uživateli/skupinami web1 resp. 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

PHP spustíme pomocí suExec; Kořen dokumentu suExec je /srv/www, jak ukazuje následující příkaz:

/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:~ #

Proto nemůžeme volat binární soubor PHP (/usr/bin/php-cgi) přímo, protože je umístěn mimo kořen dokumentu suExec. Protože suExec nepovoluje symbolické odkazy, jediným způsobem, jak problém vyřešit, je vytvořit obalový skript pro každou webovou stránku v podadresáři /srv/www; obalový skript pak zavolá PHP binární /usr/bin/php-cgi. Obalový skript musí být ve vlastnictví uživatele a skupiny každého webu, proto potřebujeme jeden obalový skript pro každý web. Budu vytvářet obalové skripty v podadresářích /srv/www/php-fcgi-scripts, např. /srv/www/php-fcgi-scripts/web1 a /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/shPHPRC=/etc/php5/fastcgi/export PHPRCexport PHP_FCGI_MAX_REQUESTS=5000export PHP_FCGI_CHILDREN=8exec /usr/bin/php-cgi 
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/shPHPRC=/etc/php5/fastcgi/export PHPRCexport PHP_FCGI_MAX_REQUESTS=5000export PHP_FCGI_CHILDREN=8exec /usr/bin/php-cgi 

Řádek PHPRC obsahuje adresář, kde se nachází soubor php.ini (tj. /etc/php5/fastcgi/ se překládá na /etc/php5/fastcgi/php.ini). PHP_FCGI_MAX_REQUESTS je maximální počet požadavků před zastavením procesu fcgid a spuštěním nového. PHP_FCGI_CHILDREN definuje počet PHP potomků, které budou spuštěny.

Skripty php-fcgi-starter musí být spustitelné a musí je (a adresáře, ve kterých se nacházejí) vlastnit uživatel a skupina webové stránky:

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

Nyní vytváříme Apache vhosts pro www.example1.com a www.example2.com:

vi /etc/apache2/vhosts.d/www.example1.com.conf
 ServerName www.example1.com ServerAlias ​​example1.com ServerAdmin [chráněno e-mailem] DocumentRoot /srv/www/web1/web/  SuexecUserGroup web1 web1  Možnosti +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi- starter .php Objednat povolit, odepřít Povolit ze všech   # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log kombinované ServerSignature Off 
vi /etc/apache2/vhosts.d/www.example2.com.conf
 ServerName www.example2.com ServerAlias ​​example2.com ServerAdmin [chráněno e-mailem] DocumentRoot /srv/www/web2/web/  SuexecUserGroup web2 web2  Možnosti +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web2/php-fcgi- starter .php Objednat povolit, odepřít Povolit ze všech   # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log kombinované ServerSignature Off 

Ujistěte se, že jste vyplnili správné cesty (a správného uživatele a skupinu v řádcích SuexecUserGroup).

Otevřete /etc/apache2/httpd.conf a přidejte řádek NameVirtualHost * před řádek Include /etc/apache2/vhosts.d/*.conf (jinak bude fungovat pouze první vhost):

vi /etc/apache2/httpd.conf
[...]### Konfigurace virtuálního serveru ################### ########################## VirtualHost:Pokud chcete na svém# počítači udržovat více domén/názvů hostitelů, můžete pro ně nastavit kontejnery VirtualHost. Většina konfigurací# používá pouze virtuální hostitele založené na jménech, takže server se nemusí starat o # IP adresy. Toto je označeno hvězdičkami v níže uvedených směrnicích.## Než se pokusíte nastavit virtuální hostitele, podívejte se prosím na dokumentaci na adrese# #. .## K ověření konfigurace virtuálního hostitele# můžete použít volbu příkazového řádku '-S'.#NameVirtualHost *:80Zahrnout /etc/apache2/vhosts.d/*.conf[...]

Než restartujeme Apache, změníme oprávnění spustitelného souboru suExec (jinak se při restartu Apache zobrazí následující varování:Upozornění:Direktiva SuexecUserGroup vyžaduje SUEXEC wrapper.):

chmod 4755 /usr/sbin/suexec2

Poté restartujte Apache:

systemctl restart apache2.service

4 testování

Nyní vytvoříme malý testovací soubor PHP, například na webu www.example1.com...

vi /srv/www/web1/web/info.php

... a zavolejte tento soubor v prohlížeči (http://www.example1.com/info.php). Pokud vše půjde dobře, výstup by měl vypadat podobně jako tento a měli byste vidět CGI/FastCGI v řádku Server API:

5 vlastních php.ini pro každý web

Protože každá webová stránka má svůj vlastní obalový skript php-fcgi-starter, je možné definovat různé soubory php.ini pro různé webové stránky. Abych to demonstroval, zkopíruji výchozí php.ini (/etc/php5/fastcgi/php.ini) do adresáře /srv/www/web2/ a zajistím, že www.example2.com bude používat php.ini z /srv /www/web2/ adresář:

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

(Nyní můžete upravit /srv/www/web2/php.ini podle svých představ.)

Poté otevřeme /srv/www/php-fcgi-scripts/web2/php-fcgi-starter...

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

... a vložte /srv/www/web2/ do řádku PHPRC:

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

Poté restartujte Apache:

systemctl restart apache2.service

Vytvořte nový phpinfo(); soubor pro www.example2.com...

vi /srv/www/web2/web/info.php

... a zavolejte jej v prohlížeči (http://www.example2.com/info.php). Řádek Loaded Configuration File by nyní měl zobrazovat /srv/www/web2/php.ini:

6 Změna nastavení jediné konfigurace PHP

Místo předávání zcela nového souboru php.ini na svůj web můžete také změnit jedno konfigurační nastavení PHP ve skriptu php-fcgi-starter wrapper (nebo použít kombinaci obou) přidáním přepínače -d do PHP. spustitelný. Například, pokud chci deaktivovat magic_quotes_gpc pro webovou stránku www.example2.com, udělal bych to následovně:

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

Poté restartujte Apache:

systemctl restart apache2.service

Poté znovu zavolejte skript info.php v prohlížeči (http://www.example2.com/info.php) a vyhledejte řádek magic_quotes_gpc – měl by se nyní zobrazit Off:

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

OpenSuse
  1. Jak nainstalovat Apache2 s PHP5 a MySQL na Fedora 16 (LAMP)

  2. Jak nainstalovat Lighttpd s PHP5 FastCGI a MySQL na openSUSE 12.1

  3. Jak nainstalovat Nginx s PHP-FPM a MySQL na openSUSE 12.1

  1. Jak nastavit SFTP server na OpenSUSE Leap 15.3 Server

  2. Jak nainstalovat a nastavit PHP a Apache (zásobník LAMP) na OpenSUSE Leap 15.3

  3. Jak nainstalovat a nastavit Nginx jako proxy OpenSUSE Leap 15.3

  1. Jak nainstalovat Apache2 s PHP5 a MySQL na Fedora 15 (LAMP)

  2. Nainstalujte Apache2 s PHP5 a MySQL (LAMP) na openSUSE 12.1

  3. Jak nainstalovat a nastavit PHP a Nginx (LEMP) na OpenSUSE Leap 15.3