ßíÝ ÊÓÊÖíÝ ãÌãæÚÉ ãæÇÞÚ ÈÔßá Âãä ÈÇÓÊÎÏÇã Php-fpm
ãä ÇáãÚÑæÝ Ãä ÍÒãÉ LEMP (æÇáÊí åí ÇÎÊÕÇÑ áÜ Linux, Nginx, MySQL, PHP) ÊæÝÑ ÓÑÚÉ æãæËæÞíÉ ÚÇáíÉ áÊÔÛíá ãæÇÞÚ PHP¡ ÅáøÇ ÃäåÇ Êãáß ãÒÇíÇ ÃÎÑì ÛíÑ ãÔåæÑÉ ßÇáÃãä æÇáÚÒá.
Ýí åÐÇ ÇáãËÇá¡ ÓäÚÑÖ áß ãÒÇíÇ Ããä æÚÒá ÇáãæÇÞÚ Úáì LEMP ãÚ ãÓÊÎÏãíä ãõÎÊáÝíä¡ æåÐÇ Úä ØÑíÞ ÅäÔÇÁ ÃÍæÇÖ pools ÎÇÕøÉ ÈÜ php-fpm áßá ÌÒÁ ãä ÎÇÏæã nginx (ÓæÇÁ ßÇä ãæÞÚðÇ Ãæ ãÓÊÖíÝðÇ ÇÝÊÑÇÖíðÇ virtual host).
ÇáãÊØáÈÇÊ ÇáÃÓÇÓíÉ
ÊãÊ ÊÌÑÈÉ åÐÇ ÇáÏÑÓ Úáì ÃæÈäÊæ 14.04 æÚáì ÇáÑÛã ãä Ðáß ÝÅä ØÑíÞÉ ÇáÊËÈíÊ æÇáÅÚÏÇÏ ÓÊßæä ãÔÇÈåÉ áåÇ Úáì ÈÞíÉ ÇáÃäÙãÉ æÇáÅÕÏÇÑÇÊ¡ áßä ÞÏ ÊÎÊáÝ ÇáÃæÇãÑ æÃãÇßä ãáÝÇÊ ÇáÅÚÏÇÏ Èíä ÇáÃäÙãÉ.
ßãÇ ÃääÇ äÝÊÑÖ Ãäß ÞÏ ËÈÊÊ nginx æ php-fpm¡ æÈÎáÇÝ Ðáß ÃäÕÍß ÈÅÊÈÇÚ ÇáÎØæÉ ÇáÃæáì æÇáËÇáËÉ ãä åÐÇ ÇáãÞÇá: ßíÝ ÊËÈÊ ÍÒã MySQL ¡nginx ¡Linux :LEMP æPHP Úáì ÃæÈäÊæ 14.04.
íÌÈ ÊäÝíÐ ÌãíÚ ÇáÃæÇãÑ Ýí åÐÇ ÇáÏÑÓ ÇáÊÚáíãí ÈãÓÊÎÏã ÛíÑ ÇáÌÐÑ (non-root)¡ æÅä ÅÍÊÌäÇ áÕáÇÍíÇÊå ÝÓäÓÊÎÏã sudo¡ æÅÐÇ áã ÊõÚÏø ÈÚÏ åÐÇ ÇáãÓÊÎÏã ÝÃäÕÍß ÈÅÊÈÇÚ åÐÇ ÇáÏÑÓ: ÇáÅÚÏÇÏ ÇáÇÈÊÏÇÆí áÎÇÏæã ÃæÈäÊæ 14.04.
ÓÊÍÊÇÌ ÃíÖÇ Åáì ÇÓã äØÇÞ ãÄåá ÈÇáßÇãá (fully qualified domain name (fqdn ÇáÐí íÑÈØ Úáì ÎÇÏæã Ãæ ÎÇÏæã ááÊÌÑÈÉ ÈÇáÅÖÇÝÉ Åáì localhost ÇáÇÝÊÑÇÖí¡ æÅÐÇ áã íßä áÏíß æÇÍÏ¡ íãßäß ÇÓÊÎÏÇã site1.example.org¡ æÐáß Úä ØÑíÞ ÊÚÏíá ãáÝ etc/hosts/ ÈÇÓÊÎÏÇã ãÍÑÑß ÇáãÝÖá ßåÐÇ sudo vim /etc/hosts æÃÖÝ åÐÇ ÇáÓØÑ (ÇÓÊÈÏá site1.example.org ÈÜ fqdn ÇáÎÇÕ Èß ÅÐÇ ßäÊ ÊÓÊÎÏãå):
...
127.0.0.1 site1.example.org
... ÃÓÈÇÈ áÒíÇÏÉ ÊÃãíä LEMP
ÚäÏ ÅÚÏÇÏ LEMP ãÔÊÑß Óíßæä åäÇáß ÍæÖ pool php-fpm æÇÍÏ ÝÞØ æÇáÐí ÓíÔÛá ÌãíÚ ÓßÑÈÊÇÊ PHP áÌãíÚ ÇáãæÇÞÚ ÈÇÓÊÎÏÇã äÝÓ ÇáãÓÊÎÏã¡ æåÐÇ íØÑÍ ãÔßáÊíä ßÈíÑÊíä:
- ÅÐÇ ÊÚÑÖ ÊØÈíÞ æíÈ Úáì ÃÍÏ ÃÌÒÇÁ ÎÇÏæã nginx -Úáì ÓÈíá ÇáãËÇá ÚäæÇä ÝÑÚí Ãæ ãæÞÚ ãÇ- Åáì ÎØÑ Ãæ åÌæã ÝÓÊÊÚÑÖ ÌãíÚ ãæÇÞÚ ÇáãæÌæÏÉ Úáì åÐÇ ÇáÎÇÏæã ÃíÖÇ¡ ÝÇáãåÇÌã ÓíÊãßä ãä ÞÑÇÁÉ ãáÝÇÊ ÇáÅÚÏÇÏ (configuration files) ÈãÇ Ýí Ðáß ÊÝÇÕíá ÞæÇÚÏ ÈíÇäÇÊ áãæÇÞÚ ÃÎÑì Ãæ ÍÊì ÊÛííÑ ãáÝÇÊåÇ.
- ÅÐÇ ÃÑÏÊ ÅÚØÇÁ ãÓÊÎÏã ÕáÇÍíÇÊ ááÏÎæá Åáì ÇáÎÇÏæã ÇáÎÇÕ Èß¡ ÝÓæÝ ÊÚØíå ÕáÇÍíÇÊ ÇáæÕæá Åáì ÌãíÚ ÇáãæÇÞÚ¡ ÝÚáì ÓÈíá ÇáãËÇá¡ ÅÐÇ ßÇä ãØæÑß íÍÊÇÌ Åáì ÇáÚãá Úáì ÈíÆÉ ÇáÅÏÑÇÌ (staging environment)¡ ÝÍÊì ãÚ ÕáÇÍíÇÊ ÕÇÑãÉ ÌÏÇ Úáì ÇáãáÝÇÊ¡ ÝÓÊÈÞì áå ÅãßÇäíÉ æÕæáå Åáì ÌãíÚ ÇáãæÇÞÚ ÈãÇ Ýí Ðáß ãæÞÚß ÇáÑÆíÓí Úáì äÝÓ ÇáÎÇÏæã.
ÇáãÔÇßá ÃÚáÇå Êã ÍáåÇ Ýí php-fpm ÈÅäÔÇÁ ÃÍæÇÖ ãÎÊáÝÉ æÇáÊí ÊÔÊÛá ÊÍÊ ãÓÊÎÏã ãÎÊáÝ áßá ãæÞÚ.
ÇáÎØæÉ ÇáÃæáì - ÅÚÏÇÏ php-fpm
ÅÐÇ ÛØíÊ ÇáãÊØáÈÇÊ ÇáÃÓÇÓíÉ ÝÓíßæä áÏíß Ýí ÇáæÞÊ ÇáÍÇáí ãæÞÚ æíÈ íÚãá Úáì ÎÇÏæã.
ÓääÔÆ ÇáÂä ãæÞÚðÇ ËÇäíðÇ (site1.example.org) ãÚ ÍæÖ php-fpm æãÓÊÎÏã áíäßÓ ãÎÕÕíä áå.
áäÈÏà ÈÅäÔÇÁ ÇáãÓÊÎÏã ÇáÖÑæÑí¡ æáÃÝÖá ÚãáíÉ ÝÕá íÌÈ Ãä íÍÕá ÇáãÓÊÎÏã ÇáÌÏíÏ Úáì ãÌãæÚÊå ÇáÎÇÕÉ áÐáß ÓääÔÆ ÃæáÇ ãÌãæÚÉ ÇáãÓÊÎÏã site1:
sudo groupadd site1 æÈÚÏ Ðáß ÓääÔÆ ãÓÊÎÏã site1 íäÊãí Åáì åÐå ÇáãÌãæÚÉ:
sudo useradd -g site1 site1 ÍÊì ÇáÂä áÇ íãáß åÐÇ ÇáãÓÊÎÏã ÇáÌÏíÏ ßáãÉ ãÑæÑ æáÇ íãßäß ÊÓÌíá ÏÎæáå Ýí ÎÇÏæã¡ ÅÐÇ ÃÑÏÊ ÊæÝíÑ ÕáÇÍíÇÊ æÕæá Åáì åÐå ÇáãáÝÇÊ ãä ÇáãæÞÚ áÔÎÕ ãÚíä¡ ÝíÌÈ Úáíß Ýí åÐå ÇáÍÇáÉ ÅäÔÇÁ ßáãÉ ãÑæÑ áåÐÇ ÇáãÓÊÎÏã Úä ØÑíÞ ÇáÃãÑ:
sudo passwd site1 æãÚ ÊÑßíÈÉ ÇÓã ÇáãÓÊÎÏã/ßáãÉ ÇáãÑæÑ ÓíÊãßä ÇáãÓÊÎÏã ãä ÊÓÌíá ÏÎæáå Úä ÈÚÏ ÈÇÓÊÎÏÇã ssh Ãæ sftp.
ÈÚÏ Ðáß¡ ÃäÔÆ ÍæÖ php-fpm ÌÏíÏ áÜ site1¡ ÝÇáÍæÖ ãåã ááÛÇíÉ æåæ ÚÈÇÑÉ Úä ÚãáíÉ (process) áíäßÓ ÚÇÏíÉ æÇáÊí ÊÚãá ÊÍÊ ãÓÊÎÏã/ãÌãæÚÉ ãÍÏÏÉ æÊÓÊãÚ áÜ Linux socket æÞÏ ÊÓÊãÚ ÃíÖÇ áÊÑßíÈÉ IP:Port áßä ÓíÊØáÈ åÐÇ Åáì ÇáãÒíÏ ãä ãæÇÑÏ ÇáÎÇÏæã æåÐå ÇáØÑíÞÉ áíÓÊ ÌíÏÉ.
ÈÔßá ÇÝÊÑÇÖí Ýí äÙÇã ÃÈäÊæ 14.04¡ ßá ÍæÖ php-fpm íÌÈ Ãä íÊã ÅÚÏÇÏå Ýí ãáÝ ÏÇÎá ãÌáÏ etc/php5/fpm/pool.d/.
ßá ãáÝ ãÚ ÇãÊÏÇÏ conf. Ýí åÐÇ ÇáãÌáÏ ÓíÊã ÊÍãíáå ÊáÞÇÆíÇ Ýí ÇáÅÚÏÇÏ ÇáÚÇã áÜ php-fpm.
áÐáß ÓääÔÆ ãáÝ etc/php5/fpm/pool.d/site1.conf/ áãæÞÚäÇ¡ íãßäß ÝÚá Ðáß ãÚ ãÍÑÑß ÇáãÝÖá ßÇáÊÇáí:
sudo vim /etc/php5/fpm/pool.d/site1.conf íÌÈ Ãä íÍÊæí åÐÇ ÇáãáÝ Úáì:
[site1]
user = site1
group = site1
listen = /var/run/php5-fpm-site1.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = / Ýí ÇáÅÚÏÇÏÇÊ ÃÚáÇå¡ áÇÍÙ åÐå ÇáÎíÇÑÇÊ:
- Åä [site1] åæ ÇÓã ÇáÍæÖ¡ Ýáßá ÍæÖ ÇÓã ÎÇÕ Èå.
- íÔíÑ ßá ãä user æ group Åáì ÇáãÓÊÎÏã ÇáãÌãæÚÉ ÇáÊí ÓíÚãá ÚáíåÇ ÇáÍæÖ ÇáÌÏíÏ.
- ÓÊÔíÑ listen Åáì ãßÇä ÎÇÕ áßá ÍæÖ.
- Åä ßá ãä listen.owner æ listen.group íÚÑøÝÇä ãáßíÉ ÇáãÓÊãÚ (listener) -Úáì ÓÈíá ÇáãËÇá socket ÇáÎÇÕÉ ÈÍæÖ php-fpm ÇáÌÏíÏ- æíÌÈ Úáì Nginx Ãä íßæä ÞÇÏÑÇ Úáì ÞÑÇÁÉ åÐÇ socket¡ æåÐÇ åæ ÓÈÈ Ãä socket íõäÔà ãÚ ÇÓã ÇáãÓÊÎÏã æÇáãÌãæÚÉ ÊÍÊ nginx ÇáÐí íÔÛá www-data.
- íÓãÍ áß php_admin_value ÈæÖÚ Þíã ÅÚÏÇÏ php ãÎÕÕÉ æÇáÊí ÓäÓÊÎÏãåÇ áÊÚØíá ÏæÇá ÇáÊí ÊõÔÛøá ÃæÇãÑ áíäßÓ ãËá exec, passthru, shell_exec, system.
- Åä php_admin_flag ãÔÇÈå áÜ php_admin_value áßäå ãÌÑÏ ãÈÏá áÞíã ÇáãäØÞíÉ ãËá on æ off. ÓäÚØá ÏÇáÉ PHP ÇáÊí ÊÏÚì allow_url_fopen æÇáÊí ÊÓãÍ áÓßÑÈÊ PHP ÈÝÊÍ ãáÝÇÊ Úä ÈÚÏ æÇáÊí íãßä Ãä ÊõÓÊÎÏã ÈæÇÓØÉ ÇáãåÇÌã.
ãáÇÍÙÉ: Åä Þíã php_admin_value æ php_admin_flag íãßä ÊØÈíÞåÇ ÈÔßá ÚÇã¡ æÚáì ÇáÑÛã ãä Ðáß ÞÏ íÍÊÇÌåãÇ ÇáãæÞÚ æåÐÇ åæ ÓÈÈ ÚÏã ÅÚÏÇÏåãÇ ÈÔßá ÇÝÊÑÇÖí. Åä ãä ããíÒÇÊ ÃÍæÇÖ php-fpm ÃäåÇ ÊÓãÍ áß ÈÊÎÕíÕ ÅÚÏÇÏÇÊ Ããä áßá ãæÞÚ¡ æÚáÇæÉ Úáì Ðáß¡ Ýíãßäß ÇÓÊÎÏÇã åÐå ÇáÎíÇÑÇÊ áÃí ÅÚÏÇÏÇÊ php ÃÎÑì¡ ÎÇÑÌ ÇáãÌÇá ÇáÃãäí¡ áÊÎÕíÕ ÈíÆÉ ÇáãæÞÚ.
áä äÊÍÏË Ýí ÏÑÓäÇ Íæá ÇáÃãä Úä ÎíÇÑÇÊ pm¡ áßä íÌÈ Ãä ÊÚÑÝ ÃäåÇ ÊÓãÍ áß ÈÅÚÏÇÏ ÃÏÇÁ ÇáÍæÖ.
æÈÇáäÓÈÉ Åáì ÎíÇÑ chdir ÝíÌÈ Ãä íßæä / æÇáÐí íÚÈÑ Úä ÌÐÑ äÙÇã ÇáãáÝÇÊ¡ æåÐÇ ÇáÓØÑ áÇ íÌÈ ÊÛííÑå ãÇ áã Êßä ÊÓÊÎÏã chroot.
áã íÊã ÊÖãíä ÎíÇÑ chroot Ýí ÇáÅÚÏÇÏÇÊ ÃÚáÇå áÃäå ÓíÓãÍ áß ÈÊÔÛíá ÇáÍæÖ Ýí ÈíÆÉ ãÓÌæäÉ¡ ãËá ÞÝá ÇáãÌáÏ¡ æåÐÇ ÇáÃãÑ Óíßæä ÑÇÆÚðÇ áÃÛÑÇÖ ÃãäíÉ áÃäå ÓÊÊãßä ãä ÞÝá ÇáÍæÖ ÏÎá ãÌáÏ ÇáÌÐÑ ááãæÞÚ¡ æáßä Úáì ÇáÑÛã ãä Ðáß ÝÅä åÐÇ ÇáÎíÇÑ ÇáÃãäí ÞÏ íÊÓÈÈ ÈÇáÚÏíÏ ãä ÇáãÔÇßá áÃí ÊØÈíÞ PHP íÚÊãÏ Úáì ÊØÈíÞÇÊ ÇáäÙÇã (system binaries) æÊØÈíÞÇÊ ãËá Imagemagick æÇáÊí áä Êßæä ãÊæÝÑÉ.
ÈãÌÑÏ ÇäÊåÇÆß ãä ÇáÅÚÏÇÏÇÊ ÃÚáÇå ÃÚÏ ÊÔÛíá php-fpm áÊÝÚíá ÇáÎíÇÑÇÊ ÇáÌÏíÏÉ æÐáß Úä ØÑíÞ ÇáÃãÑ:
sudo service php5-fpm restart ÊÃßÏ ãä Ãä ÇáÍæÖ íÚãá ÈÔßá ÕÍíÍ æÐáß ÈæÇÓØÉ ÇáÈÍË Úä ÚãáíÇÊå ßÇáÊÇáí:
ps aux |grep site1 ÅÐÇ ÇÊÈÚÊ ÇáÊÚáíãÇÊ ÈÏÞÉ ÝÓÊÍÕá Úáì ãÎÑÌÇÊ ãÔÇÈåÉ áåÐå:
site1 14042 0.0 0.8 133620 4208 ? S 14:45 0:00 php-fpm: pool site1
site1 14043 0.0 1.1 133760 5892 ? S 14:45 0:00 php-fpm: pool site1 ÈÇáÅÖÇÝÉ Åáì Ðáß¡ ÓäÚØá ÇáÊÎÒíä ÇáãÄÞÊ ÇáÐí íæÝÑå opcache¡ ÝåÐÇ ÇáÃÎíÑ ÞÏ íõÍÓøä ÇáÃÏÇÁ áßäå ÞÏ íÊÓÈÈ Ýí ãÔÇßá ÃãäíÉ.
áÊÚØíáå¡ ÚÏá ãáÝ etc/php5/fpm/conf.d/05-opcache.ini/ ÈÇÓÊÎÏÇã ÕáÇÍíÇÊ ÃÚáì (super user) æÃÖÝ ÇáÓØÑ ÇáÊÇáí:
opcache.enable=0 ÈÚÏ Ðáß ÃÚÏ ÊÔÛíá php-fpm ÍÊì ÊÚãá ÇáÎíÇÑÇÊ ÇáÌÏíÏÉ:
sudo service php5-fpm restart ÇáÎØæÉ ÇáËÇäíÉ - ÅÚÏÇÏ nginx
ÈÚÏ Ãä ÇäÊåíäÇ ãä ÅÚÏÇÏ ÍæÖ php-fpm áãæÞÚäÇ¡ ÓäÞæã ÇáÂä ÈÅÚÏÇÏ ÌÒÁ ÇáÎÇÏæã Ýí nginx. æáÐáß ÃäÔÆ ãáÝðÇ ÌÏíÏðÇ æÐáß ÈÇÓÊÎÏÇã ãÍÑÑß ÇáãÝÖá ßÇáÊÇáí:
sudo vim /etc/nginx/sites-available/site1 íÌÈ Ãä íÍÊæí åÐÇ ÇáãáÝ Úáì:
server {
listen 80;
root /usr/share/nginx/sites/site1;
index index.php index.html index.htm;
server_name site1.example.org;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm-site1.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
} ÇáÔíÝÑÉ ÃÚáÇå ÊÙåÑ ÅÚÏÇÏÇÊ ãÔÊÑßÉ áÌÒÁ ÇáÎÇÏæã Ýí nginx¡ áÇÍÙ åÐå ÇáÃÌÒÇÁ:
- ÌÐÑ ÇáæíÈ (Web root) åæ usr/share/nginx/sites/site1/.
- ÇÓã ÇáÎÇÏæã íÓÊÎÏã site1.example.org ÇáÊí ÐßÑäÇåÇ Ýí ÌÒÁ ÇáãÊØáÈÇÊ ÇáÃÓÇÓíÉ ãä åÐÇ ÇáÏÑÓ.
- íÍÏÏ fastcgi_pass ÇáãÊÚÇãá (handler) áãáÝÇÊ php¡ íÌÈ ÇÓÊÎÏÇã unix socket ãÎÊáÝÉ áßá ãæÞÚ ãËá var/run/php5-fpm-site1.sock/.
ÈÚÏ Ðáß ÃäÔÆ ãÌáÏ ÌÐÑ ÇáæíÈ:
sudo mkdir /usr/share/nginx/sites
sudo mkdir /usr/share/nginx/sites/site1 áÊÝÚíá ÇáãæÞÚ ÃÚáÇå ÊÍÊÇÌ Åáì ÅäÔÇÁ ÑÇÈØ ÑãÒí (symlink) áå Ýí ãÌáÏ /etc/nginx/sites-enabled/. íãßäß ÝÚá Ðáß ÈÇÓÊÚãÇá ÇáÃãÑ ÇáÊÇáí:
sudo ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/site1 Ýí ÇáäåÇíÉ¡ ÃÚÏ ÊÔÛíá nginx áÊÚãá ÇáÊÛííÑÇÊ ÇáÌÏíÏÉ ßÇáÊÇáí:
sudo service nginx restart ÇáÎØæÉ ÇáËÇáËÉ - ÇáÊÌÇÑÈ
ááÊÌÇÑÈ¡ ÓäÓÊÎÏã ÏÇáÉ phpinfo æÇáÊí ÊæÝÑ áäÇ ãÚáæãÇÊ ÊÝÕíáíÉ Íæá ÈíÆÉ php.
ÃäÔÆ ãáÝðÇ ÌÏíÏðÇ ÈÇÓã info.php æÇáÐí íÍÊæí Úáì ÓØÑ æÇÍÏ ÝÞØ:
<?php phpinfo(); ?> ÓÊÍÊÇÌ åÐÇ ÇáãáÝ Ýí ÇáãæÞÚ ÇáÇÝÊÑÇÖí áÜ nginx æÝí ÌÐÑ ÇáæíÈ /usr/share/nginx/html/¡ æáåÐÇ ÇáÛÑÖ íãßäß ÇÓÊÎÏÇã ãÍÑÑ ÇáäøÕæÕ ßÇáÊÇáí:
sudo vim /usr/share/nginx/html/info.php Ëã ÇäÓÎ ÇáãáÝ Åáì ÌÐÑ ÇáæíÈ ááãæÞÚ ÇáÂÎÑ (site1.example.org) ßÇáÊÇáí:
sudo cp /usr/share/nginx/html/info.php /usr/share/nginx/sites/site1/ ÃäÊ ÇáÂä ãÓÊÚÏ áÊÔÛíá ÃÈÓØ ÇÎÊÈÇÑ ááÊÃßÏ ãä ãÓÊÎÏã ÇáÎÇÏæã¡ íãßäß ÅÌÑÇÁ ÇáÇÎÊÈÇÑ Úä ØÑíÞ ãÊÕÝÍ Ãæ ãä ÎáÇá ØÑÝíÉ ÎÇÏæã æ lynx (ãÊÕÝÍ íÚãá ÚÈÑ ÇáØÑÝíÉ)¡ æÅÐÇ áã ÊËÈÊ lynx ÓÇÈÞÇ Ýí ÎÇÏæã Ýíãßäß ÊËÈíÊå Èßá ÓåæáÉ Úä ØÑíÞ ÇáÃãÑ:
sudo apt-get install lynx ÊÃßÏ ÃæáÇ ãä æÌæÏ ãáÝ info.php Ýí ÇáãæÞÚ ÇáÇÝÊÑÇÖí¡ íäÈÛí Ãä ÊÊãßä ãä ÇáæÕæá Åáíå ÚÈÑ localhost ßÇáÊÇáí:
lynx --dump http://localhost/info.php |grep 'SERVER\["USER"\]' Ýí ÇáÃãÑ ÇáÓÇÈÞ äÑÔÍ ÇáãÎÑÌÇÊ ÈÇÓÊÎÏÇã grep áãÊÛíÑ ["SERVER["USER ÝÞØ æÇáÐí íÔíÑ Åáì ãÓÊÎÏã ÇáÎÇÏæã¡ ÈÇáäÓÈÉ Åáì ÇáãæÞÚ ÇáÇÝÊÑÇÖí íÝÊÑÖ Ãä Êßæä ÇáãÎÑÌÇÊ ÊÚÑÖ ãÓÊÎÏã www-data ÇáÇÝÊÑÇÖí ßÇáÊÇáí:
_SERVER["USER"] www-data æäÝÓ ÇáÔíÁ ÓäÝÚáå ááÊÃßÏ ãä ãÓÊÎÏã ÎÇÏæã site1.example.org:
lynx --dump http://site1.example.org/info.php |grep 'SERVER\["USER"\]' íÌÈ Ãä ÊÑì åÐå ÇáãÑÉ site1 Ýí ÇáãÎÑÌÇÊ:
_SERVER["USER"] site1 ÅÐÇ ÞãÊ ÈÚãá ÃíÉ ÊÎÕíÕÇÊ Ýí ÅÚÏÇÏÇÊ php Ýí ÃÍæÇÖ php-fpm ÇáÃÓÇÓíÉ¡ Ýíãßäß ÃíÖÇ ÇáÊÃßÏ ãä ÞíãåãÇ ÈäÝÓ ÇáØÑíÞÉ ÇáÓÇÈÞÉ æÐáß Úä ØÑíÞ ÊÑÔíÍ ÇáãÎÑÌÇÊ ÇáÊí Êåãß.
ÍÊì ÇáÂä¡ ÚÑÝäÇ Ãä ãæÞÚíäÇ íÚãáÇä ÊÍÊ ãÓÊÎÏãíä ãÎÊáÝíä¡ áßä áäÑì ÇáÂä ßíÝ íãßääÇ ÊÃãíä ÇáÇÊÕÇá¡ áÊÝÓíÑ ÇáãÔßáÉ ÇáÃãäíÉ ÇáÊí äÑíÏ ÍáåÇ Ýí åÐÇ ÇáãÞÇá¡ ÓääÔÆ ãáÝðÇ íÍÊæí Úáì ãÚáæãÇÊ ÍÓÇÓÉ¡ Ýí ÇáÚÇÏÉ íÍÊæí åÐÇ ÇáãáÝ ãÚáæãÇÊ ÇáÇÊÕÇá ÈÞÇÚÏÉ ÇáÈíÇäÇÊ æíÍÊæí Úáì ÊÝÇÕíá ÇÓã ÇáãÓÊÎÏã æßáãÉ ÇáãÑæÑ áÞÇÚÏÉ ÈíÇäÇÊ ÇáãÓÊÎÏã¡ ÝÅÐÇ æõÌÏ Ãä ÃÍÏåã íÓÊØíÚ ÇáæÕæá Åáì åÐå ÇáãÚáæãÇÊ ÝÓíÊãßä ãä ÝÚá Ãí ÔíÁ áãæÞÚäÇ.
ÃäÔÆ ÈÇÓÊÎÏÇã ãÍÑÑß ÇáãÝÖá ãáÝðÇ ÌÏíÏðÇ Ýí ãæÞÚß ÇáÑÆíÓí íÏÚìusr/share/nginx/html/config.php/ æíÍÊæí Úáì ÇáÊÇáí:
<?php
$pass = 'secret';
?> Ýí ÇáãáÝ ÃÚáÇå ÚÑøÝäÇ ãÊÛíÑðÇ íÏÚì pass æÇáÐí íÍÊæí Úáì ÞíãÉ secret¡ æØÈÚÇ äÑíÏ ÊÞííÏ ÇáæÕæá Åáì åÐÇ ÇáãáÝ áÐáß ÓäÛíÑ ÇáÕáÇÍíÇÊ Åáì 400¡ æÇáÊí ÊÚØí ÕáÇÍíÇÊ ÇáÞÑÇÁÉ ÝÞØ áãÇáß ÇáãáÝ.
áÊÛííÑ ÇáÕáÇÍíÇÊ Åáì 400 äÝÐ ÇáÃãÑ ÇáÊÇáí:
sudo chmod 400 /usr/share/nginx/html/config.php ÈÇáÅÖÇÝÉ Åáì Ðáß ãæÞÚäÇ ÇáÑÆíÓí íÚãá ÊÍÊ ãÓÊÎÏã www-data æÇáÐí íÌÈ Ãä íßæä ÞÇÏÑðÇ Úáì ÞÑÇÁÉ åÐÇ ÇáãáÝ¡ æÈÇáÊÇáí¡ ÛíøÑ ãáßíÉ ÇáãáÝ Åáì ÐÇß ÇáãÓÊÎÏã ßÇáÊÇáí:
sudo chown www-data:www-data /usr/share/nginx/html/config.php Ýí ãËÇáäÇ ÓäÓÊÎÏã ãáÝðÇ ÂÎÑ íÏÚì usr/share/nginx/html/readfile.php/ áÞÑÇÁÉ ÇáãÚáæãÇÊ ÇáÓÑíÉ æãä Ëã ØÈÇÚÊåÇ¡ æíÌÈ Ãä íÍÊæí åÐÇ ÇáãáÝ Úáì ÇáÔíÝÑÉ ÇáÈÑãÌíÉ ÇáÊÇáíÉ:
<?php
include('/usr/share/nginx/html/config.php');
print($pass);
?> ÈÚÏ Ðáß ÛíøÑ ãáßíÉ åÐÇ ÇáãáÝ áãÓÊÎÏã www-data ßÇáÊÇáí:
sudo chown www-data:www-data /usr/share/nginx/html/readfile.php ááÊÃßÏ ãä ÌãíÚ ÇáÕáÇÍíÇÊ æÇáãáßíÇÊ Ýí ÌÐÑ æíÈ¡ äÝøÐ ÇáÃãÑ ÇáÊÇáí:
ls -l /usr/share/nginx/html/ íÌÈ Ãä Êßæä ÇáãÎÑÌÇÊ ÔÈíåÉ ÈåÐå:
-r-------- 1 www-data www-data 27 Jun 19 05:35 config.php
-rw-r--r-- 1 www-data www-data 68 Jun 21 16:31 readfile.php ÇáÂä ÌÑÈ ÇáæÕæá Åáì ÇáãáÝ ÇáÓøÇÈÞ Úáì ãæÞÚß ÇáÇÝÊÑÇÖí ÈÇÓÊÎÏÇã ÇáÃãÑ:
lynx --dump http://localhost/readfile.php ÓÊáÇÍÙ Ãä secret ãØÈæÚÉ Úáì ÇáÔÇÔÉ æÇáÊí ÊÚäí Ãä ÇáãáÝ ãÚ ÇáãÚáæãÇÊ ÇáÍÓÇÓÉ íãßä ÇáæÕæá Åáíå ãä ÏÇÎá äÝÓ ÇáãæÞÚ¡ æåÐÇ ÇáÓáæß ãÊæÞÚ.
ÇáÂä ÌÑÈ äÓÎ ãáÝ usr/share/nginx/html/readfile.php/ Åáì ãæÞÚß ÇáËÇäí site1.example.org ßÇáÊÇáí:
sudo cp /usr/share/nginx/html/readfile.php /usr/share/nginx/sites/site1/ ááÍÝÇÙ Úáì ÚáÇÞÇÊ ÇáãæÞÚ/ÇáãÓÊÎÏã¡ ÊÃßÏ ãä Ãä ÇáãáÝÇÊ ÏÇÎá ßá ãæÞÚ ããáæßÉ ãä ØÑÝ ÇáãÓÊÎÏã ÇáãÚäí æÐáß Úä ØÑíÞ ÊÛííÑ ãáßíÉ ÇáãáÝ ÇáãäÓæÎ Åáì site1 ÈÇÓÊÎÏÇã ÇáÃãÑ ÇáÊÇáí:
sudo chown site1:site1 /usr/share/nginx/sites/site1/readfile.php ááÊÍÞÞ ãä æÖÚß ÇáÕáÇÍíÇÊ æÇáãáßíÇÊ ÇáÕÍíÍÉ ááãáÝÇÊ¡ ÇÚÑÖ ÞÇÆãÉ ãÍÊæíÇÊ ÌÐÑ æíÈ site1 ÈÇÓÊÎÏÇã ÇáÃãÑ:
ls -l /usr/share/nginx/sites/site1/ íÌÈ Ãä ÊÑì ßÇáÊÇáí:
-rw-r--r-- 1 site1 site1 80 Jun 21 16:44 readfile.php ÈÚÏ Ðáß ÍÇæá ÇáæÕæá Åáì äÝÓ ÇáãáÝ ãä site1.example.com ÈÇÓÊÎÏÇã ÇáÃãÑ:
lynx --dump http://site1.example.org/readfile.php ÓÊÑì Ãäå Êã ÅÑÌÇÚ ãÓÇÍÉ ÝÇÑÛÉ¡ æÈÇáÅÖÇÝÉ Åáì Ðáß¡ ÅÐÇ ÈÍËÊ Úä ÇáÃÎØÇÁ Ýí ÓÌá ÇáÃÎØÇÁ áÜ nginx ÈÇÓÊÎÏÇã ÇáÃãÑ grep ÇáÊÇáí:
sudo grep error /var/log/nginx/error.log ÝÓÊÑì ÔíÆÇ ãÔÇÈåÇ áåÐÇ:
2015/06/30 15:15:13 [error] 894#0: *242 FastCGI sent in stderr: "PHP message: PHP Warning: include(/usr/share/nginx/html/config.php): failed to open stream: Permission denied in /usr/share/nginx/sites/site1/readfile.php on line 2 ãáÇÍÙÉ: ÓÊÑì ÃíÖÇ ÎØÃ ãÔÇÈåðÇ Ýí ãÎÑÌÇÊ lynx ÅÐÇ ÝÚøáÊ ÎíÇÑ display_errors Ýí ÅÚÏÇÏÇÊ php-fpm Ýí ãáÝ etc/php5/fpm/php.ini/ (ÈæÖÚ On Ýí Ðáß ÇáÎíÇÑ).
íÙåÑ ÇáÊÍÐíÑ Ãä ÇáÓßÑÈÊ ãä ãæÞÚ site1.example.org áÇ íãßäå ÞÑÇÁÉ ÇáãáÝ ÇáÍÓÇÓ (config.php) ãä ÇáãæÞÚ ÇáÑÆíÓí æÈÇáÊÇáí¡ ÇáãæÇÞÚ ÇáÊí ÊÚãá ÊÍÊ ÚÏÉ ãÓÊÎÏãíä áÇ íãßäåÇ ÊÚÑíÖ Ããä ÈÞíÉ ÇáãæÇÞÚ.
ÅÐÇ ÐåÈÊ Åáì äåÇíÉ ÌÒÁ ÇáÅÚÏÇÏÇÊ ãä åÐÇ ÇáãÞÇá¡ ÓÊÑì ÃääÇ ÚØáäÇ ÇáÊÎÒíä ÇáãÄÞÊ ÇáÊí íæÝÑåÇ opcache ÈÔßá ÇÝÊÑÇÖí¡ æÅÐÇ ÑÛÈÊ ÈãÚÑÝÉ ÇáÓÈÈ ÍÇæá ÊÝÚíáå ãÌÏÏÇ æÐáß Úä ØÑíÞ æÖÚ opcache.enable=1 Ýí ãáÝetc/php5/fpm/conf.d/05-opcache.ini/ Úä ØÑíÞ ãÓÊÎÏã sudo æãä Ëã ÅÚÇÏÉ ÊÔÛíá php5-fpm ÈÇÓÊÎÏÇã ÇáÃãÑ sudo service php5-fpm restart.
ÓÊÌÏ Ãäå ÅÐÇ ÞãÊ ÈÅÚÇÏÉ ÎØæÇÊ ÇáÇÎÊÈÇÑ ÈäÝÓ ÇáÊÑÊíÈ ÝÅäß ÓÊÊãßä ãä ÞÑÇÁÉ ÇáãáÝ ÇáÍÓÇÓ Úáì ÇáÑÛã ãä ÕáÇÍíÇÊå æãáßíÇÊå¡ æåÐå ÇáãÔßáÉ Ýí opcache ÞÏ Êã ÇáÅÈáÇÛ ÚäåÇ ãäÐ ÝÊÑÉ ØæíáÉ áßä áã íÊã ÅÕáÇÍåÇ ÍÊì æÞÊ ßÊÇÈÉ åÐÇ ÇáãÞÇá.
ÇáÎÇÊãÉ
ãä ÇáäÇÍíÉ ÇáÃãäíÉ¡ íÌÈ ÇÓÊÎÏÇã ÃÍæÇÖ php-fpm ãÚ ãÓÊÎÏã ãÎÊáÝ áßá ãæÞÚ Úáì äÝÓ ÎÇÏæã æíÈ nginx¡ ÝåÐÇ ÇáÃãÑ ÍÊì áæ ßÇä íÖúÚÝ ÇáÃÏÇÁ ÞáíáÇ¡ ÝÅä ãíÒÉ ÚãáíÉ ÇáÝÕá íãßäåÇ ãäÚ ÎÑæÞ ÃãäíÉ ÎØíÑÉ.
ÇáÝßÑÉ ÇáÊí ÔÑÍäÇåÇ Ýí åÐÇ ÇáãÞÇá áíÓÊ ÝÑíÏÉ¡ æåí ãæÌæÏÉ Ýí ÊÞäíÇÊ ÝÕá PHP ÃÎÑì ãËá SuPHP. æÚáì ÇáÑÛã ãä Ðáß¡ ÃÏÇÁ ÈÞíÉ ÇáÈÏÇÆá ÃÓæÁ ãä php-fpm.
ÇáãÑÌÚ :
https://academy.hsoub.com/devops/ser...%88-1404-r251/



ÑÏ ãÚ ÇÞÊÈÇÓ
ÇáãÝÖáÇÊ