GNU/Linux >> Belajar Linux >  >> OpenSuse

Cara Mengatur Apache2 Dengan mod_fcgid Dan PHP5 Pada OpenSUSE 11.3

Tutorial ini menjelaskan bagaimana Anda dapat menginstal Apache2 dengan mod_fcgid dan PHP5 pada OpenSUSE 11.3. mod_fcgid adalah alternatif yang kompatibel untuk mod_fastcgi yang lebih lama. Ini memungkinkan Anda mengeksekusi skrip PHP dengan izin pemiliknya, bukan pengguna Apache.

1 Catatan Awal

Saya menggunakan server OpenSUSE 11.3 dalam tutorial ini dengan nama host server1.example.com dan alamat IP 192.168.0.100.

Saya akan membuat dua vhost Apache dalam tutorial ini, www.example1.com dan www.example2.com, untuk mendemonstrasikan penggunaan mod_fcgid.

2 Menginstal Apache2/mod_fcgi/PHP5

Kita dapat menginstal Apache2, mod_fcgid, dan PHP5 sebagai berikut:

yast2 -i apache2 apache2-mod_fcgid php5-fastcgi

Jika Apache2 sudah diinstal dengan PHP5 sebagai modul Apache, nonaktifkan modul PHP5 sekarang:

a2dismod php5

Selanjutnya aktifkan modul suexec dan fcgid:

a2enmod suexec
a2enmod fcgid

Kemudian kami membuat tautan startup sistem untuk Apache dan memulainya:

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

Selanjutnya kita buka /etc/php5/fastcgi/php.ini...

vi /etc/php5/fastcgi/php.ini

... dan batalkan komentar pada baris cgi.fix_pathinfo =1:

[...]; cgi.fix_pathinfo memberikan dukungan *real* PATH_INFO/PATH_TRANSLATED untuk CGI. PHP; perilaku sebelumnya adalah menyetel PATH_TRANSLATED ke SCRIPT_FILENAME, dan bukan grok; apa PATH_INFO itu. Untuk informasi lebih lanjut tentang PATH_INFO, lihat spesifikasi cgi. Pengaturan; ini ke 1 akan menyebabkan PHP CGI memperbaiki jalurnya agar sesuai dengan spesifikasi. Sebuah pengaturan; dari nol menyebabkan PHP berperilaku seperti sebelumnya. Standarnya adalah 1. Anda harus memperbaiki skrip Anda; untuk menggunakan SCRIPT_FILENAME daripada PATH_TRANSLATED.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=1[...]

Kemudian restart Apache:

/etc/init.d/apache2 restart

3 Membuat Vhosts Untuk www.example1.com Dan www.example2.com

Sekarang saya akan membuat dua vhost, www.example1.com (dengan document root /srv/www/web1/web) dan www.example2.com (dengan document root /srv/www/web2/web). www.example1.com akan dimiliki oleh pengguna dan grup web1, dan www.example2.com oleh pengguna dan grup web2.

Pertama kita buat pengguna dan grup:

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

Kemudian kami membuat root dokumen dan menjadikannya milik pengguna/grup 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

Kami akan menjalankan PHP menggunakan suExec; Akar dokumen suExec adalah /srv/www, seperti yang ditunjukkan oleh perintah berikut:

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

Oleh karena itu kami tidak dapat memanggil biner PHP (/usr/bin/php-cgi) secara langsung karena terletak di luar root dokumen suExec. Karena suExec tidak mengizinkan symlink, satu-satunya cara untuk menyelesaikan masalah adalah dengan membuat skrip pembungkus untuk setiap situs web dalam subdirektori /srv/www; skrip pembungkus kemudian akan memanggil biner PHP /usr/bin/php-cgi. Script wrapper harus dimiliki oleh user dan group dari masing-masing web site, oleh karena itu diperlukan satu wrapper script untuk setiap web site. Saya akan membuat skrip pembungkus di subdirektori /srv/www/php-fcgi-scripts, mis. /srv/www/php-fcgi-scripts/web1 dan /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=5000ekspor 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=5000ekspor PHP_FCGI_CHILDREN=8exec /usr/bin/php-cgi 

Baris PHPRC berisi direktori tempat file php.ini berada (mis., /etc/php5/fastcgi/ diterjemahkan menjadi /etc/php5/fastcgi/php.ini). PHP_FCGI_MAX_REQUESTS adalah jumlah maksimum permintaan sebelum proses fcgid dihentikan dan yang baru diluncurkan. PHP_FCGI_CHILDREN mendefinisikan jumlah anak PHP yang akan diluncurkan.

Skrip php-fcgi-starter harus dapat dieksekusi, dan skrip tersebut (dan direktori tempat mereka berada) harus dimiliki oleh pengguna dan grup situs web:

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

Sekarang kita membuat vhost Apache untuk www.example1.com dan www.example2.com:

vi /etc/apache2/vhosts.d/www.example1.com.conf
 ServerName www.example1.com ServerAlias ​​example1.com ServerAdmin [dilindungi email] DocumentRoot /srv/www/web1/web/  SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1  Opsi +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi-scripts/web starter .php Pesan izinkan, tolak Izinkan dari semua   # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log gabungan ServerSignature Off 
vi /etc/apache2/vhosts.d/www.example2.com.conf
 ServerName www.example2.com ServerAlias ​​example2.com ServerAdmin [dilindungi email] DocumentRoot /srv/www/web2/web/  SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1  Opsi +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web2/php-fcgi-scripts/web2 starter .php Pesan izinkan, tolak Izinkan dari semua   # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log gabungan ServerSignature Off 

Pastikan Anda mengisi jalur yang benar (serta pengguna dan grup yang benar di baris SuexecUserGroup).

Buka /etc/apache2/httpd.conf dan tambahkan baris NameVirtualHost * sebelum baris Include /etc/Apache2/vhosts.d/*.conf (jika tidak hanya vhost pertama yang akan bekerja):

vi /etc/apache2/httpd.conf
[...]### Konfigurasi server virtual #################### ######################### VirtualHost:Jika Anda ingin mempertahankan beberapa domain/nama host di mesin# Anda, Anda dapat menyiapkan wadah VirtualHost untuk mereka. Kebanyakan konfigurasi# hanya menggunakan host virtual berbasis nama sehingga server tidak perlu khawatir tentang# alamat IP. Hal ini ditunjukkan oleh tanda bintang di petunjuk di bawah ini.## Silakan lihat dokumentasi di# # untuk detail lebih lanjut sebelum Anda mencoba men-setup virtual host .## Anda dapat menggunakan opsi baris perintah '-S' untuk memverifikasi konfigurasi host virtual Anda#.#NameVirtualHost *Sertakan /etc/Apache2/vhosts.d/*.conf[...]

Sebelum kita me-restart Apache, kita mengubah izin dari executable suExec (jika tidak, Anda akan melihat peringatan berikut ketika Anda me-restart Apache:Peringatan:SuexecUserGroup directive memerlukan pembungkus SUEXEC.):

chmod 4755 /usr/sbin/suexec2

Mulai ulang Apache setelahnya:

/etc/init.d/apache2 restart

4 Pengujian

Sekarang kita buat file pengujian PHP kecil, misalnya di situs web www.example1.com...

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

... dan panggil file itu di browser (http://www.example1.com/info.php). Jika semuanya berjalan dengan baik, outputnya akan terlihat seperti ini, dan Anda akan melihat CGI/FastCGI di baris Server API:

5 php.ini Kustom untuk Setiap Situs Web

Karena setiap situs web memiliki skrip pembungkus php-fcgi-starter sendiri, dimungkinkan untuk menentukan file php.ini yang berbeda untuk situs web yang berbeda. Untuk mendemonstrasikan ini, saya akan menyalin default php.ini (/etc/php5/fastcgi/php.ini) ke direktori /srv/www/web2/ dan membuat www.example2.com menggunakan php.ini dari /srv /www/web2/ direktori:

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

(Sekarang Anda dapat memodifikasi /srv/www/web2/php.ini sesuai keinginan Anda.)

Kemudian kita buka /srv/www/php-fcgi-scripts/web2/php-fcgi-starter...

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

... dan letakkan /srv/www/web2/ di baris PHPRC:

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

Mulai ulang Apache setelahnya:

/etc/init.d/apache2 restart

Buat phpinfo baru(); file untuk www.example2.com...

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

... dan menyebutnya di browser (http://www.example2.com/info.php). Baris File Konfigurasi yang Dimuat sekarang akan menampilkan /srv/www/web2/php.ini:

6 Mengubah Pengaturan Konfigurasi PHP Tunggal

Alih-alih meneruskan file php.ini yang sama sekali baru ke situs web Anda, Anda juga dapat mengubah pengaturan konfigurasi PHP tunggal dalam skrip pembungkus php-fcgi-starter (atau menggunakan kombinasi keduanya) dengan menambahkan sakelar -d ke PHP dapat dieksekusi. Misalnya, jika saya ingin menonaktifkan magic_quotes_gpc untuk situs web www.example2.com, saya akan melakukannya sebagai berikut:

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

Mulai ulang Apache setelahnya:

/etc/init.d/apache2 restart

Kemudian panggil skrip info.php lagi di browser (http://www.example2.com/info.php) dan cari baris magic_quotes_gpc - seharusnya ditampilkan Off sekarang:

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

OpenSuse
  1. Cara Instal Apache2 Dengan PHP5 Dan MySQL Pada Fedora 16 (LAMP)

  2. Cara Instal Apache2 Dengan PHP5 Dan MySQL Pada Fedora 15 (LAMP)

  3. Cara Instal Nginx Dengan PHP5 Dan MySQL Di Ubuntu 11.10

  1. Instal Apache2 Dengan PHP5 Dan MySQL (LAMP) Di openSUSE 12.1

  2. Cara Instal Lighttpd Dengan PHP5 FastCGI Dan MySQL di openSUSE 12.1

  3. Cara mengatur server SFTP di OpenSUSE Leap 15.3 Server

  1. Cara Menginstal Nginx Dengan PHP-FPM Dan MySQL Di openSUSE 12.1

  2. Cara menginstal dan mengatur PHP dan Apache (LAMP stack) di OpenSUSE Leap 15.3

  3. Cara Menginstal dan mengatur Nginx sebagai proxy OpenSUSE Leap 15.3