PHP-FPM، معرفی و آموزش نصب و راه اندازی با NGINX
PHP-FPM چیست ؟ سوالی که اکثر مدیران سرور به دنبال پاسخ آن می باشند ، PHP-FPM یک هندلر برای اپلیکیشن ها و اسکریپت های PHP می باشد و مخفف PHP Fast Process Manager می باشد که با وب سرور ها نصب و راه اندازی می شود. یکی از دلایلی که از PHP-FPM در سرور مورد استفاده قرار می گیرد، برای قادر سازی انجین ایکس برای پردازش فایل های پی اچ پی است. همانطور که می دانید، NGINX به تنهایی قادر به پردازش فایل های پی اچ پی نیست، برای همین واجب است که از PHP-FPM برای آن استفاده کرد.
پیش نیاز ها :
- نصب بودن وب سرور انجین ایکس
- دسترسی روت
نصب و راه اندازی PHP-FPM
نصب روی CentOS و Red Hat (RHEL) :
1 | yum install php-fpm |
نصب روی Ubuntu :
1 | sudo apt install php-fpm |
تست نصب و اجرا بودن PHP-FPM :
1 | systemctl status php7.0-fpm.service |
برخی دستورات مانند دستور بالا به نسخه نصب شده PHP بستگی دارد ، ما در این آموزش از نسخه ی 7.0 PHP که از مخزن رسمی اوبنتو نصب شده است استفاده می کنیم.
پیدا کردن فایل های کانفیگ :
1 | find / \( -iname "php.ini" -o -name "www.conf" \) |
خروجی به شکل زیر می باشد :
1 2 3 4 | root@localhost:~# find / \( -iname "php.ini" -o -name "www.conf" \) /etc/php/7.0/fpm/php.ini /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/cli/php.ini |
مقادیر listen.owner و listen.group به صورت پیش فرض روی www-data ست شده اند که باید آن ها را به user و group که NGINX تحت آن اجرا شده است تغییر داد ، برای پیدا کردن می توان از دستور زیر کمک گرفت :
1 | ps -aux | grep nginx |
خروجی مانند زیر می باشد :
1 2 3 4 | root@localhost:~# ps -aux | grep nginx root 3448 0.0 0.0 32500 3516 ? Ss 18:21 0:00 nginx: master process / usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 3603 0.0 0.0 32912 2560 ? S 18:24 0:00 nginx: worker process nginx 3604 0.0 0.0 32912 3212 ? S 18:24 0:00 nginx: worker process |
خروجی نشان می دهد که پروسس اصلی وب سرور انجین ایکس تحت یوزر root و worker ها تحت یوزر و گروه nginx در حال اجرا می باشند ، پس باید مقادیر listen.owner و listen.group را روی nginx تنظیم کنیم :
1 2 | sed -i 's/listen.owner = www-data/listen.owner = nginx/g' /etc/php/7.0/fpm/pool.d/www.conf sed -i 's/listen.group = www-data/listen.group = nginx/g' /etc/php/7.0/fpm/pool.d/www.conf |
توجه داشته باشید که در دستور بالا آدرس فایل کانفیگ را در صورت مغایرت تغییر دهید.
زمانی که PHP-FPM و NGINX رو با هم pair کردیم ، ممکن است که یک .php که در دایرکتوری سایت موجود نیست به انجین ایکس ارجاع داده شود و وظیفه ی PHP processor این است که URI رو پردازش کند و فایل .php را اجرا کند و این موضوع باعث به وجود آمدن مشکل امنیتی می شود ، پس برای رفع این مشکل ما باید مواردی که انجین ایکس به PHP-FPM پاس می دهد را محدود کنیم ،پس به تغییر فایل کانفیگ PHP-FPM می پردازیم :
1 | sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.0/fpm/php.ini |
با دستور بالا مقدار cgi.fix_pathinfo=1 را از حالت کامنت در آوردیم و مقدار آن را 0 گذاشتیم ، در آخر سرویس PHP-FPM را ری استارت می کنیم :
1 | systemctl restart php7.0-fpm.service |
حالا نوبت به تغییر Virtual Host ها می رسد ، در اینجا ما میخواهیم Virtual Host وب سایت example.com رو تغییر دهیم پس فایل Virtual Host آن را با یک ویرایشگر مناسب باز می کنیم :
1 | nano /etc/nginx/conf.d/example.com.conf |
که محتوایات آن مانند :
1 2 3 4 5 6 7 | server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; root /var/www/example.com; index index.html; } |
می باشد که با اضافه کردن مقادیر زیر PHP-FPM را فراخوانی می کنیم :
1 2 3 4 5 6 | location ~* \.php$ { fastcgi_pass unix:/run/php/php7.0-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } |
پس به صورت کلی به شکل زیر در می آید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; root /var/www/example.com; index index.html; location ~* \.php$ { fastcgi_pass unix:/run/php/php7.0-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } } |
بعد از تغییرات انجین ایکس را ریلود کنید :
1 | nginx -s reload |
برای این که تست کنید ببینید PHP-FPM کار می کند یا خیر می توانید یک فایل .php ایجاد کنید و کد زیر را درون آن قرار دهید و آن را فراخوانی کنید :
1 | echo "<?php phpinfo(); ?>" >> /var/www/example.com/test.php |
این آموزش ، کانفیگ ساده PHP-FPM بود که با توجه به نیاز آن را تغییر می دهند.
در آموزش های بعدی به نصب و راه اندازی PHP-FPM در سی پنل و دایرکت ادمین می پردازیم ، با تشکر که با ما همراه بودید.
[line]
تیم فنی آلما هاست، در تمام ایام سال به صورت 24 ساعته در خدمت شما هستند تا برای خرید سرور مجازی، لایسنس امنیتی imunify360 و لایسنس سی پنل اصل شما را یاری کنند و جدیدترین آفر های موجود را برای شما متناسب با نیازتان ارائه کنند. برای دریافت آخرین آفر های ویژه و تخفیف های ما، می توانید از طریق تیکت با ما در ارتباط باشید تا آفر های موجود را بر اساس نیاز شما برایتان ارسال کنیم.
پرتال کاربری آلما هاست ( پاسخگویی 24 ساعته ) : پورتال مشتریان آلما هاست
بنیامین
سپتامبر 9, 2018با تشکر از مقاله مفیدتان .
متاسفانه در Centos 7 , مسیر /etc/nginx/conf.d/example.com.conf وجود نداره !
یعنی /etc/nginx/conf.d مربوطه به دیبیان و conf.d در سنت او اس 7 نیست !!
Alma Host
سپتامبر 9, 2018سلام،
کانف دات دی یک دایرکتوری برای کانفیگ ها هست و فایل example.com.conf فایل کانفیگ چایلد هاست شماست. می بایست فایل examle.com.conf رو با دامنه خودتون به جای example.com جایگزین کنید. خروجی زیر برای ls /etc/nginx در سنت او اس 7.5 هست.
ls /etc/nginx/
conf.d koi-utf scgi_params
default.d koi-win scgi_params.default
fastcgi.conf mime.types uwsgi_params
fastcgi.conf.default mime.types.default uwsgi_params.default
fastcgi_params nginx.conf win-utf
fastcgi_params.default nginx.conf.default
با تشکر از این که دیدگاهتان را با ما به اشتراک گذاشتید. مورد دیگری هم بود درخدمتیم.
با احترام.