نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04

در این پست می خواهیم به بررسی نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04 برای شما کاربران عزیز بپردازیم. امیدواریم مقاله نحوه نصب و کانفیگ Nginx و PHP-FPM در Ubuntu 13.04 مورد توجه شما قرار بگیرد. با ما همراه باشید.

نصب و کانفیگ Nginx و php-fpm

نصب و کانفیگ Nginx و php-fpm

Nginx (که به شیوه ” engine x ” تلفظ می شود ) یک وب سرور HTTP رایگان ، متن باز و با کارایی بالا اسـت که به دلیـل ایستادگی ،داشتن گروه ای پربار از خصوصیات ، پی-خ000000000099کربندی آسان ، و استفاده منابع کم سرور شناخته شده می باشد. این آموزش نشان خواهـد داد که چطور Nginx و هندل php-fpm را بر روی سرور لینوکس اوبونتو ۱۳٫۰۴ که از PHP5 (از طریق PHP-FPM) و MySQL حمایت می کند ، نصب نمایید .

نصب و کانفیگ Nginx و php-fpm

نصب و کانفیگ Nginx و php-fpm

(LEMP = Linux + nginx (pronounced “engine x”) + MySQL + PHP)

نکته ها مقدماتی نصب و کانفیگ Nginx و php-fpm

در این آموزش از نام هاست server1.example.com با IP آدرس ۱۹۲٫۱۶۸٫۰٫۱۰۰ بهره گیری شده می باشد. این تنظیمات شانس دارد با تنظیمات شما گوناگـون باشد، پس می بایست آنها را با تنظمات مورد نظـر خود در قسمـت های مناسب جایگزین نمایید .

همه وهله ها این آموزش با دسترسی های کاربری ریشه (root) اجرا می شود ، پس مطمئن شوید که به عنوان کاربر ریشه وارد شده اید :

sudo su

  • نصب MySQL 5

نصب و کانفیگ Nginx و php-fpm

نصب و کانفیگ Nginx و php-fpm

 

برای نصب 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 و php-fpm

نصب و کانفیگ Nginx و php-fpm

Nginx به شیوه یک پکیج برای اوبونتو ۱۳٫۰۴ در دسترس است که خواهید توانست برای نصب آن به شرح پایین عمل نمایید :

apt-get install nginx

سپس برای استارت شدن سرویس  nginx دستور پایین را اجرا نمایید :

/etc/init.d/nginx start

IP وب سرور یا نام هاست خود را در مرورگر تایپ نمایید (به عنوان مثال http://192.168.0.100)، می بایست صفحه پایین را ببینید:

نصب و کانفیگ Nginx و php-fpm

نصب و کانفیگ Nginx و php-fpm

 

ریشه مدرک 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

نصب و کانفیگ Nginx و php-fpm

نصب و کانفیگ Nginx و php-fpm

 

همان گونه که در خط 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 وجود داشته باشد :

نصب و کانفیگ Nginx و php-fpm

نصب و کانفیگ Nginx و php-fpm

 

  • تعامل 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 رسیدیم. از توجه و همراهی شما با این مقاله سپاسگزاریم.