آموزش نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04
Nginx (که به صورت ” engine x ” تلفظ میشود ) یک وب سرور HTTP رایگان، متن باز و با کارایی بالا میباشد که به علت پایداری ،داشتن مجموعه ای پربار از ویژگی ها، پیکربندی ساده، و مصرف منابع کم سرور شناخته شده است. این آموزش نشان می دهد که چگونه Nginx و هندل php-fpm را بر روی سرور لینوکس اوبونتو ۱۳٫۰۴ که از PHP5 (از طریق PHP-FPM) و MySQL پشتیبانی می کند، نصب کنید .
(LEMP = Linux + nginx (pronounced “engine x”) + MySQL + PHP)
نکات مقدماتی نصب و کانفیگ Nginx و php-fpm
در این آموزش از نام هاست server1.example.com با IP آدرس ۱۹۲٫۱۶۸٫۰٫۱۰۰ استفاده شده است . این تنظیمات ممکن است با تنظیمات شما متفاوت باشد، بنابراین باید آنها را با تنظمات مورد نظر خود در بخش های مناسب جایگزین کنید.
تمامی مراحل این آموزش با دسترسی های کاربری ریشه (root) اجرا خواهد شد، بنابراین مطمئن شوید که به عنوان کاربر ریشه وارد شده اید :
sudo su
-
نصب MySQL 5
برای نصب MySQL دستور زیر را اجرا کنید:
apt-get install mysql-server mysql-client
در حین نصب MySQL از شما خواسته میشود که یک رمز عبور برای کاربر روت MySQL تعیین کنید. این رمز عبور برای کاربری root@localhost و همچنین root@server1.example.com نیز معتبر است، البته استفاده از MySQL root password در فایل کانفیگ اسکریپت سرور های شلوغ توصیه نمیشود .در این مرحله یک کلمه عبور به عنوان MySQL root password انتخاب کنید :
New password for the MySQL “root” user: <– yourrootsqlpassword
Repeat password for the MySQL “root” user: <– yourrootsqlpassword
-
نصب Nginx
Nginx به صورت یک پکیج برای اوبونتو ۱۳٫۰۴ در دسترس است که میتوانید برای نصب آن به شرح زیر عمل کنید:
apt-get install nginx
سپس برای استارت شدن سرویس nginx دستور زیر را اجرا کنید :
/etc/init.d/nginx start
IP وب سرور یا نام هاست خود را در مرورگر تایپ کنید (به عنوان مثال http://192.168.0.100)، باید صفحه زیر را ببینید:
ریشه سند nginx به طور پیش فرض در اوبونتو ۱۳٫۰۴ ، مسیر /usr/share/nginx/html است
-
نصب PHP5
بهترین روش برای کار کردن با PHP5 در nginx استفاده از PHP-FPM یا (FastCGI Process Manager ) است . PHP-FPM یک پیاده سازی مدرن و مدیریت شده از PHP FastCGI به همراه امکانات بسیار زیاد بوده که برای انواع سایت ها مخصوصا سایت های فعال و پر بازدید مناسب است . برای نصب PHP5 در لینوکس Ubuntu دستور زیر را اجرا کنید:
apt-get install php5-fpm
PHP-FPM یک فرایند دیمن (با اسکریپت init /etc/init.d/php5-fpm) است که یک سرور FastCGI در سوکت / var/run/php5-fpm.sock اجرا میکند. (روش های دیگری نیز به جز استفاده از سوکت وجود دارد)
-
تنظیمات nginx
تنظیمات nginx در مسیر / etc / nginx / nginx.conf قرار دارد . برای این کار باید فایل nginx.conf را به کمک دستور vi ویرایش کنیم :
vi /etc/nginx/nginx.conf
این تنظیمات به آسانی قابل درک بوده و میتوانید برای کسب اطلاعات بیشتر به لینک های زیر مراجعه کنید :
http://wiki.nginx.org/NginxFullExample
http://wiki.nginx.org/NginxFullExample2
اول تعداد worker processes را تعیین کرده و سپس یک مقدار معقول برای keepalive_timeout مشخص کنید (این مرحله اختیاری است)
[...] worker_processes 4; [...] keepalive_timeout 2; [...]
هاست های مجازی یا همان vhost ها در تابع {} server تعریف میشوند . هاست مجازی پیش فرض در فایل /etc/nginx/sites-available/default قرار دارد و باید به به شرح زیر تغییر یابند:
vi /etc/nginx/sites-available/default
[...] server { listen 80; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.php index.html index.htm; # Make site accessible from http://localhost/ server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; allow ::1; deny all; } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /.ht { deny all; } } [...]
فایل index.php را به خط index اضافه کنید. root /usr/share/nginx/html بدان معنی است که ریشه سند، دایرکتوری /usr/share/nginx/html است. سایر تنظیمات مورد نظر در مثال فوق مشخص است .
برای کسب اطلاعات بیشتر به لینک زیر مراجعه کنید:
http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP
http://forum.nginx.org/read.php?2,88845,page=3
فایل را ذخیره و nginx را مجددا بارگذاری کنید:
/etc/init.d/nginx reload
سپس /etc/php5/fpm/php.ini…را باز کنید
vi /etc/php5/fpm/php.ini
و cgi.fix_pathinfo را مساوی ۰ قرار دهید (cgi.fix_pathinfo=0) :
[...] ; 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=0 [...]
PHP-FPM را مجددا بارگذاری کنید:
/etc/init.d/php5-fpm reload
فایل php زیر را در ریشه سند /usr/share/nginx/html ایجاد کنید :
vi /usr/share/nginx/html/info.php
<?php phpinfo(); ?>
حال باید فایل را در مرورگر فراخوانی کنید برای مثال :
http://192.168.0.100/info.php
همانطور که در خط Server API نشان داده شده PHP5 با استفاده از FPM / FastCGI کار می کند. شما میتوانید تمامی ماژول های فعال در PHP5 را ببینید. MySQL در لیست موجود نیست این بدان معناست که MySQL هنوز در PHP5 پشتیبانی نمیشود.
-
پشتیبانی PHP5 از MySQL
برای اینکه MySQL در PHP پشتیبانی شود ، میتوانید پکیج php5-mysql را نصب کنید. ایده خوبی است اگر برخی دیگر از ماژول های PHP5 را نصب کنید ، این ماژول ها ممکن است برای برنامه های شما مورد نیاز باشند . برای جستجوی ماژول های PHP5 در دسترس میتوانید از دستور زیر استفاده کنید :
apt-cache search php5
انتخاب php ماژول ها در هر سرور و بسته به نوع کاربری آن متفاوت است . در یک حالت استاندارد ، ماژول های مورد نیاز خود را به شرح زیر نصب میکنیم :
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
APC یک PHP opcode cacher رایگان و باز برای ذخیره و بهینه سازی کد میانی PHP است. APC شبیه به آپکد کش های دیگر در php مانند eAccelerator و Xcache است. به شدت توصیه می شود که یکی از آنها را برای سرعت بخشیدن به صفحات PHP تان نصب کنید.
APC را می توانید با دستور زیر نصب کنید:
apt-get install php-apc
PHP-FPM را مجددا بارگذاری کنید :
/etc/init.d/php5-fpm reload
http://192.168.0.100/info.php را در مرورگر خود بار دیگر بارگذاری کنید ، اکنون در بخش ماژول ها باید تعداد زیادی ماژول جدید از جمله ماژول MySQL وجود داشته باشد :
-
تعامل PHP-FPM و NGINX با استفاده از TCP
PHP-FPM به طور پیش فرض به کمک سوکت /var/run/php5-fpm.sock با وب سرور تعامل خواهد داشت . به دلیل پیچیده تر بودن ساختار SOCKET و جلوگیلی از ارور های احتمالی BAD GATEWAY در وب سرور NGINX ما از اتصال TCP برای ارتباط با وب سرور استفاده میکنیم .برای این کار، فایل /etc/php5/fpm/pool.d/www.conf را باز کنید:
vi /etc/php5/fpm/pool.d/www.conf
خط listen را به شرح زیر تغییر دهید:
[...] ;listen = /var/run/php5-fpm.sock listen = 127.0.0.1:9000 [...]
با این کار PHP-FPM به پورت ۹۰۰۰ گوش کرده و آماده سرویس دهی خواهد بود ، اطمینان حاصل کنید که در سرور شما، از این پورت استفاده نمیشود سرویس دیگری با آن کار نمیکند .
سپس PHP-FPM را مجددا بارگذاری کنید:
/etc/init.d/php5-fpm reload
در تنظیمات nginx خود خط :
;fastcgi_pass unix:/var/run/php5-fpm.sock
را به ;fastcgi_pass 127.0.0.1:9000 تغییر دهید :
vi /etc/nginx/sites-available/default
[...] location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: fastcgi_pass 127.0.0.1:9000; # With php5-fpm: #fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } [...]
در نهایت nginx را مجددا بارگذاری کنید :
/etc/init.d/nginx reload
توجه داشته باشید که برای انجام یک کانفیگ فوق حرفه ای Nginx و php-fpm نمیتوانید به آموزش های فوق اکتفا کنید . کانفیگ سرور های لینوکس به صورت حرفه ای و در سطح تجاری ، نیاز به داشتن تجربه و تسلط بالا بر مفاهیم سیستم عامل لینوکس ، وب سرور ، PHP و سایر سرویس های مورد نیاز دارد .