نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04
در این پست می خواهیم به بررسی نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04 برای شما کاربران عزیز بپردازیم. امیدواریم مقاله نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04 مورد توجه شما قرار بگیرد. با ما همراه باشید.
Nginx (که به شیوه ” engine x ” تلفظ می شود ) یک وب سرور HTTP رایگان ، متن باز و با کارایی بالا اسـت که به دلیـل ایستادگی ،داشتن گروه ای پربار از خصوصیات ، پی-خ000000000099کربندی آسان ، و استفاده منابع کم سرور شناخته شده می باشد. این آموزش نشان خواهـد داد که چطور 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; […]
1 2 3 4 5 | […] 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; } } […]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | […] 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 […]
1 2 3 4 5 6 7 8 9 10 | […] ; 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
1 2 3 | 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 […]
1 2 3 4 | […] ;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; } […]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | […] 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 و سایـر سرویس های مورد نیاز دارد.
خب دوستان به انتهای مقاله آموزشی نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04 رسیدیم. از توجه و همراهی شما با این مقاله سپاسگزاریم.