بخش دوم
نصب NGINX روی سرور مجازی
در بخش قبلی مراحل ابتدایی تنظیمات سرور مجازی و امنیت سرور را انجام دادیم .در این بخش به تنظیمات و پیکربندی وب سرور NGINX می پردازیم، که بخش بنیادین کار بعد از خرید سرور مجازی می باشد.
- لیست مطالب این بخش
قبل از شروع شما باید با استفاده از نرم افزار Putty یک اتصال SSHبا سرور برقرار کنید.
نصب NGINX روی سرور مجازی Ubuntu 20.04
اگرچه مخزن رسمی پکیج اوبونتو ، شامل پکیج NGINX می باشد ولی اغلب ورژن های قدیمی هستند. بجای آن ما از مخزن نگهداری شده بوسیله Ondřej Surý که شامل آخرین پکیج باثبات NGINX می باشد استفاده می کنیم.
ابتدا مخزن را اضافه کرده و سپس لیست پکیج ها را آپدیت می کنیم.
sudo add-apt-repository ppa:ondrej/nginx -y
sudo apt update
احتمالا تعدادی از پکیج ها نیاز به بروز رسانی دارند، که با فرمان زیر آنها را آپدیت می کنیم:
sudo apt dist-upgrade -y
خب حالا زمان نصب NGINX رسیده:
sudo apt install nginx -y
بمحض کامل شدن نصب، شما می توانید با دستور زیر تاییدیه نصب را دریافت کنید.
nginx -v
علاوه بر این با تایپ آدرس سایت خود (FDQN) در مرورگر، می توانید صفحه خوشامدگویی NGINX را مشاهده کنید.
اکنون که NGINX با موفقیت نصب شده است ، دیگر وقت آن است که پیکربندی مقدماتی برایش انجام دهیم. بصورت پیش فرض بدون هیچ گونه تنظیماتی، ان جین ایکس بخوبی کار می کند، هرچند که تعدادی تنظیم اساسی وجود دارد . خب قبل از شروع به پیکربندی فایل، ابتدا باید اطلاعات منابع سرور مجازی خودمان را – مانند تعداد هسته های CPU و محدودیت فایلهای باز- را بدانیم، پس با استفاده از دستور زیر تعداد پردازنده را خواهیم دید.
grep processor /proc/cpuinfo | wc -l
با اجرای فرمان زیر نیز از تعداد محدودیت فایل های باز سرور مطلع خواهید شد :
ulimit -n
در مرحله بعد فایل کانفیگ NGINX را که در آدرس زیر می باشد را باز و ویرایش می کنیم:
sudo nano /etc/nginx/nginx.conf
در اینجا نیازی نیست تا به تفصیل تک تک موارد را توضیح دهیم، لذا تنها موارد مهم را بطور مختصر توضیح می دهیم.
ابتدا با تغییر user به نام کاربری انتخابیمان – که به VPS متصل شدیم – شروع می کنیم. یعنی www-data را به ubuntu تغییر می دهم این کار مدیریت دسترسی ها را در آینده بسیار ساده تر می کند. البته اینکار از لحاظ امنیتی تنها زمانی که یک یوزر به سرور دسترسی دارد، مورد قبول است.
دستورworker_processes تعیین می کند که چه تعداد پروسه می تواند در سرورانجام شود. بطور معمول این متغیر را براساس تعداد هسته های CPU در دسترس برای سرور در نظر می گیرند. در این آموزش ما آن را ۱ درنظر می گیریم.
بلوک event شامل دو دستور است . اولی worker_connections که باید با محدودیت فایلهای باز در سرور تنظیم شود. اینکار به nginx می گوید چه تعداد اتصالات همزمان می تواند در هر worker_processes باز باشد. به این صورت اگر شما دو هسته CPU دارید و فایل بازی با محدودیت ۱۰۲۴ داشته باشید پس سرور شما می تواند ۲۰۴۸ اتصال را در هر ثانیه مدیریت کند. اگرچه تعداد اتصال مستقیما با تعداد کاربرانی که بوسیله سرور مدیریت می شوند برابر نیست، چرا که بعنوان مثال اکثر مرورگرهای وب در هر درخواست حداقل ۲ اتصال دارند. ضمنا باید کامنت دستور multi_accept را بردارید ( uncomment کنید ) و مطمئن شوید که بر روی on ست شده است. با این کار هر worker_processes برای پذیرش کلیه اتصالات جدید در یک لحظه، آگاه می شود تا هر اتصال را تک تک پذیرش نکند.
همین طور که بسمت پایین فایل حرکت می کنیم، یک بلوک دیگر بنام بلوک http را خواهیم دید. اولین دستور که باید تغییر داده شود keepalive_timeout است، که بصورت پیش فرض بر روی ۶۵ تنظیم شده است. این دستور مشخص می کند که چند ثانیه یک اتصال قبل از اینکه بوسیله NGINX بسته شود باید برای کلاینت باز باقی بماند. بهتر است که کمترین مقدار ممکن را داشته باشد تا از زمان بیکاری اتصال کم شود. ما آن را معادل ۱۵ درنظر گرفتیم.
به دلایل امنیتی باید کامنت دستور server_tokens را بردارید و مطمئن شوید که بر روی off قرار دارد این کار باعث جلوگیری از انتشار شماره ورژن nginx در error messages و response headers خواهد شد.
در قسمت پایین تر بلوک http ( http block ) بخشی بنام Gzip Settings وجود دارد در این بخش بصورت پیش فرض gzip فعال است اما باید کمی اصلاح شود تا بتوان مدیریت بهتری برروی فایهای استاتیک داشت. ابتدا کامنت دستور gzip_proxied را برداشته و آن را روی any باقی بگذارید تا مطمئن شوید همه proxied request responses ها gzip هستند.
در مرحله دوم باید کامنت gzip_comp_level را برداشته و آن را بر روی ۵ تنظیم کنید، این دستور سطح فشردگی را کنترل می کند و می تواند مقداری بین ۱ تا ۹ را برای آن درنظرگرفت. دقت کنید این مقدار را خیلی بالا تنظیم نکنید چرا که می تواند تاثیری منفی روی مصرف CPU داشته باشد. درنهایت باید کامنت gzip_types را بردارید و آن را با همان مقدار پیش فرض باقی بگذارید. اینکار باعث خواهد شد تا جاواسکریپت ، CSS و دیگر انواع فایل ها بهمراه فایل html ، gzip شوند.
بمنظور سرویس دهی درست PHP توسط NGINX ، شما باید از تنظیم fastcgi_param SCRIPT_FILENAME مطئن شوید، در غیر اینصورت هنگام دسترسی به اسکریپت های PHP شما یک صفحه سفید در مانیتور خواهید دید .
پس فایل fastcgi_params را باز می کنیم:
sudo nano /etc/nginx/fastcgi_params
ابتدا مطمئن شوید که دستور زیر وجود دارد ، اگر نبود آن را به فایل اضافه کنید:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
این پیکربندی مقدماتی nginx بود که با هم انجام دادیم. با فشردن کلید های Crt + X و تایپ y تغییرات را در فایل ذخیره کنید. برای اینکه تغییرات اعمال شود باید Nginx را ریستارت کنید. اگرچه قبل از انجام اینکار ابتدا باید مطمئن شویم که هیچ خطایی در هنگام ذخیره، مشکلی ایجاد نکند. لذا ابتدا دستور زیر را اجرا می کنیم:
sudo nginx -t
اگر همه چیز درست انجام شده باشد پیام بالا نمایش داده خواهد شد و شما میتوانید nginx را با دستور زیر ریستارت کنید.
sudo service nginx restart
افزودن بلوک Server
دقایقی پیش که سایت رو ملاحظه کردید با صفحه خوش آمد گویی nginx روبرو شدید، اگر چه این آن چیزی نیست که ما انتظار داریم. لذا بهتر است تا سرور یک صفحه سفید برای یک دامین ناشناس نشان دهد. بنابراین با دو دستور زیر دوفایل مورد نظر را پاک می کنیم.
sudo rm /etc/nginx/sites-available/default
sudo rm /etc/nginx/sites-enabled/default
اکنون نیاز است تا بلوک سرور را به پیکربندی nginx اضافه کنیم. پس با ویرایشگر نانو شروع به ویرایش فایل nginx.conf می کنیم:
sudo nano /etc/nginx/nginx.conf
دقیقا در زیر عبارت
include /etc/nginx/sites-enabled/*;
بلوک سرور را اضافه می کنیم:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
فایل را ذخیره و برای اعمال تغییرات ابتدا پیکربندی را با عبارت :
sudo nginx -t
بررسی کرده و در صورت موفق بودن سرویس nginx را ریستارت می کنیم.
sudo service nginx restart
اکنون با رفرش مرورگر باید خطای زیر را مشاهده کنید:
در زیر فایل نهایی nginx تغییر کرده را مشاهده می کنید:
user ubuntu;
worker_processes 1;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
types_hash_max_size 2048;
server_tokens off;
client_max_body_size 64m;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
}
تمام شد! این بخش را هم با نصب NGINX روی سرور مجازی ( پکیج وب سرور NGINX ) به پایان رساندیم . دربخش بعدی بطور کامل راهنمایی خواهیم کرد که چطور پکیج های PHP، WP-CLI و MariaDB رانصب کنیم خود را تنظیم و راه اندازی کنید.
بخش های بعدی
بخش سوم
نصب MariaDB ,PHP 7.4 و WP-CLI روی سرور مجازی
در این بخش شما پکیج های مورد نیاز برای اینکه بتوانید یک سایت .ردپرسی را نصب و اجرا کنید برا یتان آماده شده است. پکیج PHP را نصب می کنیم و PHP-FPM ر پیکربندی می کنیم و پکیج دیتا بیس MariaDB را بطور کامل نصب می کنیم .همچنین برای راه اندازی وردپرس بصورت خودکار از پکیج WP-CLI استفاده خواهیم کرد.