LEMP Stack یک مخفف میباشد که نشان دهنده گروهی از پکیج ها (Linux OS, Nginx web server, MySQL\MariaDB database و زبان برنامه نویسی PHP) که برای گسترش یا توسعه اپلیکیشن های web و صفحات web داینامیک استفاده میشود.
در این آموزش به شما نحوه نصب LEMP Stack به همراه MariaDB 10 ,PHP 7 و HTTP 2.0 برای Nginx در اوبونتو 16.10 و اوبونتو 16.04 نسخه سرور/دسکتاپ را یاد خواهیم داد.
همچنین توصیه میشود مطالعه کنید :
آموزش نصب LEMP "Linux, Nginx, MariaDB, PHP-FPM" در دبیان 9
آموزش نصب (LEMP (Nginx 1.10.1 ,MariaDB 10 ,PHP 5.5/5.6 روی RedHat/CentOS 7/6 & Fedora 20-24
مرحله اول : نصب وب سرور Nginx
1 - انجین ایکس یک وب سرور کارآمد و پیشرفته که برای نمایش صفحات وب به بازدید کنندگان از اینترنت استفاده میشود. ما میخواهیم نصب وب سرور Nginx را از ریپازیتوری های رسمی Ubuntu با استفاده از دستور apt شروع کنیم.
2 - سپس، دستورات netstat و systemctl را برای مطمئن شدن از اینکه سرویس Nginx روی پورت 80 در حال کار کردن میباشد را اجرا میکنیم.
به محض اینکه مطمئن شدید سرویس start میباشد، میتوانید یک مرورگر را باز کنید و با وارد کردن IP آدرس سرور یا DNS record تان با استفاده از پروتکل HTTP برای مشاهده صفحه وب پیش فرض انجین اکس استفاده کنید.
مرحله دوم : فعال کردن پروتکل Nginx HTTP/2.0
3 - پروتوكل HTTP/2.0 كه در آخرين نسخه ي باينري انجين اكس روي اوبونتو 16.04 بضورت پيش فرض ايجاد شده تنها بصورت تركيبي با ssl كار ميكند و بهبود عظيمي در سرعت لود صفحات وب ssl را تضمين ميكند.
برای فعال کردن پروتکل در Nginx روی Ubuntu 16.04 ابتدا وارد فایل های کانفیگ available sites میشویم، سپس با استفاده از دستور زیر از فایل تنظیمات پیش فرض بک آپ تهیه میکنیم.
4 - سپس، با استفاده از ادیتور متن، یک فایل default جدید با دستورالعمل های زیر ایجاد کنید.
تنظیمات بالا استفاده از HTTP/2.0 را با اضافه کردن پارامتر http2 به تمام قسمت های در حال listen کردن SSL، را فعال میکند.
همچنین، آخرین بخش از دستور بالا در بلاک server برای ریدایرکت کردن کل ترافیک بدون SSL به هاست پیش فرض SSL/TLS استفاده میشود. همچنین، server_name را با IP آدرس یا DNS رکورد خود (ترجیحا FQDN) جایگزین کنید.
5 - زمانیکه ویرایش فایل پیکربندی انجین اکس با تنظیمات بالا به پایان رسید، بوسیله اجرای دستورات زیر فایل گواهینامه SSL و کلید (Key) را تولید و لیست کنید.
پرسش های مربوط به گواهینامه (Certificate) به همراه تنظیمات سفارشی خودتان پرکنید و به تنظیمات Common Name برای مطابقت داشتن با رکورد DNS FQDN یا IP Address سرورتان که برای دسترسی به صفحه وب مورد استفاده قرار میگیرد، توجه کنید.
6 - همچنین، بوسیله اجرای دستور زیر یک DH cypher (رمز DH) قوی ایجاد کنید، که در فایل کانفیگ Default همانطور که در بالا تصویر آنرا مشاهده میکنید در خط مربوط به مشخص کردن مسیر فایل ssl_dhparam باید مسیر درست آنرا تعریف کنید.
7 - زمانیکه کلید Diffie-Hellman ایجاد شد، با استفاده از دستور nginx -t بررسی کنید که فایل کانفیگ Nginx به درستی نوشته شده است و می تواند توسط وب سرور انجین اکس استفاده شود، سپس برای مشاهده تغییرات توسط دستور زیر سرویس را restart کنید.
8 - به منظور تست اینکه Nginx از پروتکل HTTP/2.0 استفاده میکند، دستور زیر را اجرا کنید. وجود داشتن h2 در قسمت "Protocols advertised by server" تایید میکند که Nginx به نحوی کانفیگ شده که از پروتکل HTTP/2.0 استفاده کند. تمامی مرورگرهای به روز و مدرن باید به صورت پیش فرض از این پروتکل پشتیبانی کنند.
مرحله سوم : نصب مفسر PHP 7
انجین ایکس برای ایجاد کردن محتوای داینامیک وب با کمک مدیریت پروسه fastcgi (که از طریق نصب پکیج باینری php-fpm از repository های رسمی Ubuntu فراهم میآید) میتواند به همراه مفسر زبان پردازش داینامیک PHP استفاده شود.
9 - جهت نصب PHP7.0 و پکیج های اضافه که به PHP امکان برقراری ارتباط با وب سرور Nginx را میدهد دستورات زیر را روی کنسول سرورتان اجرا کنید.
10 - زمانیکه مفسر PHP7.0 با موفقیت بر روی ماشین تان نصب شد، سرویس php7.0-fpm را توسط دستورات زیر start و چک کنید.
11 - فایل کانفیگ موجود در Nginx به صورت پیش فرض به طوری کانفیگ شده که از مدیر پروسه PHP FastCGI به منظور مدیریت محتوای داینامیک استفاده کند.
بلاک Server که انجین ایکس را قادر به استفاده از مفسر PHP میسازد در بخش زیر قابل مشاهده است در نتیجه شما نیاز به هیچ گونه اعمال تغییرات بیشتری را روی فایل Nginx نخواهید داشت.
12 - برای تست ارتباط وب سرور انجین ایکس با مدیر پروسه PHP FastCGI یک فایل PHP به نام info.php ایجاد میکنیم و فایل کانفیگ را با اجرا کردن دستور زیر تست میکنیم و تنظیمات را با مشاهده این فایل config و با استفاده از آدرس http://IP_or domain/info.php بررسی میکنیم.
همچنین میتوانید از advertise (منتشر) شدن پروتکل HTTP/2.0 توسط web server مطمئن شوید که برای این منظور باید خط $_SERVER[‘SERVER_PROTOCOL’] را روی بلاک PHP Variables همانند آنچه که در تصویر زیر مشاهده میکنید بررسی کنید.
13 - به منظور نصب ماژول های اضافی PHP7.0 دستور apt search php7.0 را اجرا کنید تا یک ماژول PHP را پیدا و نصب کنید.
همچنین سعی کنید ماژول های PHP زیر که برای کار با وردپرس یا CMS های دیگر بسیار مفید است را نصب کنید.
14 - برای ریجیستر کردن ماژول های اضافی PHP تنها کافیست سرویس php-fpm را با اجرای دستور زیر restart کنید.
مرحله چهارم : نصب دیتابیس MariaDB
15 - در نهایت به منظور کامل کردن نصب LEMP خود به منظور مدیریت و ذخیره کردن دیتای وب سایت به دیتابیس MariaDB نیاز داریم.
سیستم مدیریت دیتابیس MariaDB را با اجرای دستور زیر نصب کنید و سرویس PHP-FPM را به منظور استفاده از ماژول MySQL برای دسترسی به دیتابیس restart کنید.
16 - برای امن کردن MariaDB اسکریپت امنیتی موجود در ریپازیتوری اوبونتو را اجرا کنید، که به صورت پکیج باینری میباشد و از شما میخواهد که پسورد root را تعریف کنید و کاربران ناشناخته را حذف نمایید و همچنین login از راه دوره را به یوزر root را غیر فعال و دیتابیس Test را حذف نمایید.
اسکریپت را با استفاده از دستور زیر اجرا کنید و به تمام سوالات با yes پاسخ دهید. میتوانید از تصویر زیر به عنوان یک راهنما استفاده کنید.
17 - برای کانفیگ کردن MariaDB به نحوی که کاربران معمولی هم بدون دسترسی sudo بتوانند به دیتابیس دسترسی داشته باشند باید به محیط کامندی MySQL با یوزر root و با اجرای دستورات زیر وارد شوید.
در نهایت به دیتابیس MariaDB لاگین کنید و یک دستور mysql را بدون داشتن پرمیژن root و تنها با استفاده از دستور زیر اجرا نمایید.
همچنین توصیه میشود مطالعه کنید.
نحوه رمزگذاری دایرکتوری ها در وب سرور Nginx
راه اندازی Virtual Hosting بر پایه Name و IP در وب سرور انجین ایکس
آموزش نصب SSL (تنظیمات https به همراه گواهینامه SSL) در وب سرور nginx روی RHEL/CentOS 7/6
آموزش امن کردن و بالا بردن سرعت وب سرور Nginx
اکنون شما روی سیستم تان یک LEMP کانفیگ شده بر روی سرور اوبونتو 16.10 و 16.04 دارید که به شما امکان ایجاد اپلیکیشن های تحت وب پیچیده داینامیک را میدهد که میتواند با دیتابیس تعامل داشته باشد.
در این آموزش به شما نحوه نصب LEMP Stack به همراه MariaDB 10 ,PHP 7 و HTTP 2.0 برای Nginx در اوبونتو 16.10 و اوبونتو 16.04 نسخه سرور/دسکتاپ را یاد خواهیم داد.
همچنین توصیه میشود مطالعه کنید :
آموزش نصب LEMP "Linux, Nginx, MariaDB, PHP-FPM" در دبیان 9
آموزش نصب (LEMP (Nginx 1.10.1 ,MariaDB 10 ,PHP 5.5/5.6 روی RedHat/CentOS 7/6 & Fedora 20-24
مرحله اول : نصب وب سرور Nginx
1 - انجین ایکس یک وب سرور کارآمد و پیشرفته که برای نمایش صفحات وب به بازدید کنندگان از اینترنت استفاده میشود. ما میخواهیم نصب وب سرور Nginx را از ریپازیتوری های رسمی Ubuntu با استفاده از دستور apt شروع کنیم.
کد PHP:
$ sudo apt-get install nginx
2 - سپس، دستورات netstat و systemctl را برای مطمئن شدن از اینکه سرویس Nginx روی پورت 80 در حال کار کردن میباشد را اجرا میکنیم.
کد PHP:
$ sudo netstat -tlpn
کد PHP:
$ sudo systemctl status nginx.service
به محض اینکه مطمئن شدید سرویس start میباشد، میتوانید یک مرورگر را باز کنید و با وارد کردن IP آدرس سرور یا DNS record تان با استفاده از پروتکل HTTP برای مشاهده صفحه وب پیش فرض انجین اکس استفاده کنید.
کد PHP:
http://IP-Address
مرحله دوم : فعال کردن پروتکل Nginx HTTP/2.0
3 - پروتوكل HTTP/2.0 كه در آخرين نسخه ي باينري انجين اكس روي اوبونتو 16.04 بضورت پيش فرض ايجاد شده تنها بصورت تركيبي با ssl كار ميكند و بهبود عظيمي در سرعت لود صفحات وب ssl را تضمين ميكند.
برای فعال کردن پروتکل در Nginx روی Ubuntu 16.04 ابتدا وارد فایل های کانفیگ available sites میشویم، سپس با استفاده از دستور زیر از فایل تنظیمات پیش فرض بک آپ تهیه میکنیم.
کد PHP:
$ cd /etc/nginx/sites-available/
$ sudo mv default default.backup
4 - سپس، با استفاده از ادیتور متن، یک فایل default جدید با دستورالعمل های زیر ایجاد کنید.
کد PHP:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /var/www/html;
index index.html index.htm index.php;
server_name 192.168.10.241;
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 180m;
resolver 8.8.8.8 8.8.4.4;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 80;
listen [::]:80;
server_name 192.168.10.241;
return 301 https://$server_name$request_uri;
}
تنظیمات بالا استفاده از HTTP/2.0 را با اضافه کردن پارامتر http2 به تمام قسمت های در حال listen کردن SSL، را فعال میکند.
همچنین، آخرین بخش از دستور بالا در بلاک server برای ریدایرکت کردن کل ترافیک بدون SSL به هاست پیش فرض SSL/TLS استفاده میشود. همچنین، server_name را با IP آدرس یا DNS رکورد خود (ترجیحا FQDN) جایگزین کنید.
5 - زمانیکه ویرایش فایل پیکربندی انجین اکس با تنظیمات بالا به پایان رسید، بوسیله اجرای دستورات زیر فایل گواهینامه SSL و کلید (Key) را تولید و لیست کنید.
پرسش های مربوط به گواهینامه (Certificate) به همراه تنظیمات سفارشی خودتان پرکنید و به تنظیمات Common Name برای مطابقت داشتن با رکورد DNS FQDN یا IP Address سرورتان که برای دسترسی به صفحه وب مورد استفاده قرار میگیرد، توجه کنید.
کد PHP:
$ sudo mkdir /etc/nginx/ssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
$ ls /etc/nginx/ssl/
6 - همچنین، بوسیله اجرای دستور زیر یک DH cypher (رمز DH) قوی ایجاد کنید، که در فایل کانفیگ Default همانطور که در بالا تصویر آنرا مشاهده میکنید در خط مربوط به مشخص کردن مسیر فایل ssl_dhparam باید مسیر درست آنرا تعریف کنید.
کد PHP:
$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
7 - زمانیکه کلید Diffie-Hellman ایجاد شد، با استفاده از دستور nginx -t بررسی کنید که فایل کانفیگ Nginx به درستی نوشته شده است و می تواند توسط وب سرور انجین اکس استفاده شود، سپس برای مشاهده تغییرات توسط دستور زیر سرویس را restart کنید.
کد PHP:
$ sudo nginx -t
$ sudo systemctl restart nginx.service
8 - به منظور تست اینکه Nginx از پروتکل HTTP/2.0 استفاده میکند، دستور زیر را اجرا کنید. وجود داشتن h2 در قسمت "Protocols advertised by server" تایید میکند که Nginx به نحوی کانفیگ شده که از پروتکل HTTP/2.0 استفاده کند. تمامی مرورگرهای به روز و مدرن باید به صورت پیش فرض از این پروتکل پشتیبانی کنند.
کد PHP:
$ openssl s_client -connect localhost:443 -nextprotoneg ''
مرحله سوم : نصب مفسر PHP 7
انجین ایکس برای ایجاد کردن محتوای داینامیک وب با کمک مدیریت پروسه fastcgi (که از طریق نصب پکیج باینری php-fpm از repository های رسمی Ubuntu فراهم میآید) میتواند به همراه مفسر زبان پردازش داینامیک PHP استفاده شود.
9 - جهت نصب PHP7.0 و پکیج های اضافه که به PHP امکان برقراری ارتباط با وب سرور Nginx را میدهد دستورات زیر را روی کنسول سرورتان اجرا کنید.
کد PHP:
$ sudo apt install php7.0 php7.0-fpm
10 - زمانیکه مفسر PHP7.0 با موفقیت بر روی ماشین تان نصب شد، سرویس php7.0-fpm را توسط دستورات زیر start و چک کنید.
کد PHP:
$ sudo systemctl start php7.0-fpm
$ sudo systemctl status php7.0-fpm
11 - فایل کانفیگ موجود در Nginx به صورت پیش فرض به طوری کانفیگ شده که از مدیر پروسه PHP FastCGI به منظور مدیریت محتوای داینامیک استفاده کند.
بلاک Server که انجین ایکس را قادر به استفاده از مفسر PHP میسازد در بخش زیر قابل مشاهده است در نتیجه شما نیاز به هیچ گونه اعمال تغییرات بیشتری را روی فایل Nginx نخواهید داشت.
کد PHP:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
12 - برای تست ارتباط وب سرور انجین ایکس با مدیر پروسه PHP FastCGI یک فایل PHP به نام info.php ایجاد میکنیم و فایل کانفیگ را با اجرا کردن دستور زیر تست میکنیم و تنظیمات را با مشاهده این فایل config و با استفاده از آدرس http://IP_or domain/info.php بررسی میکنیم.
کد PHP:
$ sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'
همچنین میتوانید از advertise (منتشر) شدن پروتکل HTTP/2.0 توسط web server مطمئن شوید که برای این منظور باید خط $_SERVER[‘SERVER_PROTOCOL’] را روی بلاک PHP Variables همانند آنچه که در تصویر زیر مشاهده میکنید بررسی کنید.
13 - به منظور نصب ماژول های اضافی PHP7.0 دستور apt search php7.0 را اجرا کنید تا یک ماژول PHP را پیدا و نصب کنید.
همچنین سعی کنید ماژول های PHP زیر که برای کار با وردپرس یا CMS های دیگر بسیار مفید است را نصب کنید.
کد PHP:
$ sudo apt install php7.0-mcrypt php7.0-mbstring
14 - برای ریجیستر کردن ماژول های اضافی PHP تنها کافیست سرویس php-fpm را با اجرای دستور زیر restart کنید.
کد PHP:
$ sudo systemctl restart php7.0-fpm.service
مرحله چهارم : نصب دیتابیس MariaDB
15 - در نهایت به منظور کامل کردن نصب LEMP خود به منظور مدیریت و ذخیره کردن دیتای وب سایت به دیتابیس MariaDB نیاز داریم.
سیستم مدیریت دیتابیس MariaDB را با اجرای دستور زیر نصب کنید و سرویس PHP-FPM را به منظور استفاده از ماژول MySQL برای دسترسی به دیتابیس restart کنید.
کد PHP:
$ sudo apt install mariadb-server mariadb-client php7.0-mysql
$ sudo systemctl restart php7.0-fpm.service
16 - برای امن کردن MariaDB اسکریپت امنیتی موجود در ریپازیتوری اوبونتو را اجرا کنید، که به صورت پکیج باینری میباشد و از شما میخواهد که پسورد root را تعریف کنید و کاربران ناشناخته را حذف نمایید و همچنین login از راه دوره را به یوزر root را غیر فعال و دیتابیس Test را حذف نمایید.
اسکریپت را با استفاده از دستور زیر اجرا کنید و به تمام سوالات با yes پاسخ دهید. میتوانید از تصویر زیر به عنوان یک راهنما استفاده کنید.
کد PHP:
$ sudo mysql_secure_installation
17 - برای کانفیگ کردن MariaDB به نحوی که کاربران معمولی هم بدون دسترسی sudo بتوانند به دیتابیس دسترسی داشته باشند باید به محیط کامندی MySQL با یوزر root و با اجرای دستورات زیر وارد شوید.
کد PHP:
$ sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit
در نهایت به دیتابیس MariaDB لاگین کنید و یک دستور mysql را بدون داشتن پرمیژن root و تنها با استفاده از دستور زیر اجرا نمایید.
کد PHP:
$ mysql -u root -p -e 'show databases'
همچنین توصیه میشود مطالعه کنید.
نحوه رمزگذاری دایرکتوری ها در وب سرور Nginx
راه اندازی Virtual Hosting بر پایه Name و IP در وب سرور انجین ایکس
آموزش نصب SSL (تنظیمات https به همراه گواهینامه SSL) در وب سرور nginx روی RHEL/CentOS 7/6
آموزش امن کردن و بالا بردن سرعت وب سرور Nginx
اکنون شما روی سیستم تان یک LEMP کانفیگ شده بر روی سرور اوبونتو 16.10 و 16.04 دارید که به شما امکان ایجاد اپلیکیشن های تحت وب پیچیده داینامیک را میدهد که میتواند با دیتابیس تعامل داشته باشد.
کامنت