آموزش نصب Nginx در اوبونتو
Nginx یکی از محبوب ترین وب سرورها در جهان است و مسئولیت میزبانی برخی از بزرگترین و پربازدیدترین سایت های اینترنت را بر عهده دارد. Nginx یک انتخاب سبک است که می تواند به عنوان وب سرور یا پروکسی معکوس استفاده شود.
در این راهنما، نحوه نصب Nginx بر روی سرور اوبونتو 20.04، تنظیم فایروال، مدیریت فرآیند Nginx و راهاندازی بلاک های سرور برای میزبانی بیش از یک دامنه از یک سرور واحد بحث خواهیم کرد.
پیشنیازها
قبل از شروع این راهنما، باید یک کاربر معمولی و غیر ریشه با امتیازات sudo پیکربندی شده روی سرور خود داشته باشید. می توانید با دنبال کردن راهنمای راه اندازی اولیه سرور ما برای اوبونتو 20.04، نحوه پیکربندی یک حساب کاربری معمولی را بیاموزید.
همچنین در صورتی که می خواهید قبل از تکمیل آخرین مراحل این آموزش، یک نام دامنه را ثبت کنید. برای کسب اطلاعات بیشتر در مورد تنظیم نام دامنه با DigitalOcean، لطفاً به راهنمای مقدماتی ما در DigitalOcean DNS مراجعه کنید.
هنگامی که یک حساب کاربری در دسترس دارید، برای شروع به عنوان کاربر غیر روت وارد شوید.
مرحله 1 - نصب Nginx
از آنجایی که Nginx در مخازن پیشفرض اوبونتو موجود است، میتوان آن را از این مخازن با استفاده از سیستم بستهبندی apt نصب کرد.
از آنجایی که این اولین تعامل ما با سیستم بسته بندی apt در این جلسه است، فهرست بسته محلی خود را به روز می کنیم تا به آخرین لیست های بسته دسترسی داشته باشیم. پس از آن، می توانیم nginx را نصب کنیم:
sudo apt update
sudo apt install nginx
پس از پذیرش رویه، apt انجین ایکس و هر گونه وابستگی مورد نیاز را روی سرور شما نصب خواهد کرد.
مرحله 2 - تنظیم فایروال
قبل از آزمایش Nginx، نرم افزار فایروال باید تنظیم شود تا امکان دسترسی به سرویس فراهم شود. Nginx پس از نصب خود را به عنوان یک سرویس در ufw ثبت میکند و اجازه دسترسی به Nginx را آسان میکند.
پیکربندی های برنامه ای که ufw می داند چگونه با آنها کار کند را با تایپ کردن دستور زیر فهرست کنید:
sudo ufw app list
شما باید لیستی از پروفایل های برنامه دریافت کنید:
Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
همانطور که در خروجی نشان داده شده است، سه نمایه برای Nginx وجود دارد:
- Nginx Full: این نمایه هم پورت 80 (ترافیک وب عادی و رمزگذاری نشده) و هم پورت 443 (ترافیک رمزگذاری شده TLS/SSL) را باز می کند.
- Nginx HTTP: این نمایه فقط پورت 80 را باز می کند (ترافیک وب عادی و رمزگذاری نشده)
- Nginx HTTPS: این نمایه فقط پورت 443 را باز می کند (ترافیک رمزگذاری شده TLS/SSL)
توصیه می شود محدودترین نمایه را فعال کنید که همچنان به ترافیکی که پیکربندی کرده اید اجازه دهد. در حال حاضر، فقط باید اجازه دهیم ترافیک در پورت 80 وجود داشته باشد.
شما می توانید این را با تایپ کردن فعال کنید:
sudo ufw allow 'Nginx HTTP'
می توانید با تایپ کردن دستور زیر تغییر را تأیید کنید:
sudo ufw status
خروجی نشان می دهد که کدام ترافیک HTTP مجاز است:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
مرحله 3 - وب سرور خود را بررسی کنید
در پایان مراحل نصب، Ubuntu 20.04 انجین ایکس را راه اندازی می کند. وب سرور باید از قبل راه اندازی شده باشد.
میتوانیم با تایپ کردن:
systemctl status nginx
Output
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
همانطور که در این مورد تأیید شد، این سرویس با موفقیت شروع شده است. با این حال، بهترین راه برای آزمایش این است که واقعاً یک صفحه از Nginx درخواست کنید.
میتوانید با پیمایش به آدرس IP سرور خود، به صفحه فرود پیشفرض Nginx دسترسی پیدا کنید تا تأیید کنید که نرمافزار به درستی اجرا میشود. اگر آدرس IP سرور خود را نمی دانید، می توانید آن را با استفاده از ابزار icanhazip.com پیدا کنید، که آدرس IP عمومی شما را همانطور که از مکان دیگری در اینترنت دریافت کرده اید به شما می دهد:
curl -4 icanhazip.com
وقتی آدرس IP سرور خود را دارید، آن را در نوار آدرس مرورگر خود وارد کنید:
http://your_server_ip
اگر در این صفحه هستید، سرور شما به درستی کار می کند و آماده مدیریت است.
مرحله 4 - مدیریت فرآیند Nginx
اکنون که وب سرور خود را راهاندازی کردهاید، اجازه دهید برخی از دستورات مدیریتی اولیه را مرور کنیم.
برای متوقف کردن وب سرور خود دستور زیر تایپ کنید:
sudo systemctl stop nginx
برای راه اندازی وب سرور در صورت توقف دستور زیر تایپ کنید:
sudo systemctl start nginx
برای توقف و سپس شروع مجدد سرویس دستور زیر تایپ کنید:
sudo systemctl restart nginx
اگر فقط تغییرات پیکربندی را انجام می دهید، Nginx اغلب می تواند بدون حذف اتصالات، بارگیری مجدد کند. برای انجام این کار دستور زیر تایپ کنید:
sudo systemctl reload nginx
به طور پیش فرض، Nginx به گونه ای پیکربندی شده است که هنگام بوت شدن سرور، به طور خودکار شروع به کار کند. اگر این چیزی نیست که شما می خواهید، می توانید این رفتار را با تایپ کردن غیرفعال کنید:
sudo systemctl disable nginx
برای فعال کردن مجدد سرویس برای راه اندازی در هنگام بوت، می توانید تایپ کنید:
sudo systemctl enable nginx
شما اکنون دستورات مدیریتی اولیه را یاد گرفته اید و باید آماده پیکربندی سایت برای میزبانی بیش از یک دامنه باشید.
مرحله 5 - راه اندازی بلوک های سرور (توصیه می شود)
هنگام استفاده از وب سرور Nginx، بلالک های سرور (مشابه میزبان های مجازی در آپاچی) می توانند برای کپسوله کردن جزئیات پیکربندی و میزبانی بیش از یک دامنه از یک سرور استفاده شوند. ما دامنه ای به نام your_domain راه اندازی خواهیم کرد، اما شما باید آن را با نام دامنه خود جایگزین کنید.
Nginx در اوبونتو 20.04 دارای یک بلوک سرور است که به طور پیش فرض فعال شده است که برای ارائه اسناد خارج از یک فهرست در /var/www/html
پیکربندی شده است. در حالی که این برای فقط یک سایت خوب کار می کند، اگر چندین سایت را میزبانی کنید، می تواند برایتان پیکربندی سایت های سخت شود. به جای تغییر /var/www/html
، بیایید یک ساختار دایرکتوری در /var/www
برای سایت your_domain خود ایجاد کنیم، و در صورت عدم مطابقت با درخواست مشتری، /var/www/html
را به عنوان دایرکتوری پیشفرض باقی میگذاریم تا سایت های دیگر ارائه شود.
دایرکتوری برای your_domain با دستور زیر ایجاد کنید، استفاده از پرچم -p برای ایجاد هر دایرکتوری والد ضروری است:
sudo mkdir -p /var/www/your_domain/html
سپس، مالکیت دایرکتوری را به متغیر محیطی $USER اختصاص دهید:
sudo chown -R $USER:$USER /var/www/your_domain/html
اگر مقدار umask خود را تغییر نداده اید که مجوزهای فایل پیش فرض را تنظیم می کند، مجوزهای ریشه های وب شما باید صحیح باشد. برای اطمینان از صحیح بودن مجوزهای شما و اجازه دادن به مالک برای خواندن، نوشتن و اجرای فایل ها در حالی که فقط مجوزهای خواندن و اجرا را به گروه ها و دیگران می دهد، می توانید دستور زیر را وارد کنید:
sudo chmod -R 755 /var/www/your_domain
سپس، یک صفحه نمونه index.html با استفاده از nano یا ویرایشگر مورد علاقه خود ایجاد کنید:
sudo nano /var/www/your_domain/html/index.html
در داخل، نمونه HTML زیر را اضافه کنید:
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>
با فشار دادن Ctrl+X برای خروج، فایل را ذخیره کرده و ببندید، سپس وقتی از شما خواسته شد که ذخیره کنید، Y و سپس Enter را فشار دهید.
برای اینکه Nginx بتواند این محتوا را ارائه دهد، لازم است یک بلاک سرور با دستورالعمل های صحیح ایجاد کنید. به جای اینکه مستقیماً فایل پیکربندی پیش فرض را تغییر دهیم، بیایید یک فایل جدید در /etc/nginx/sites-available/your_domain
ایجاد کنیم:
sudo nano /etc/nginx/sites-available/your_domain
در بلوک پیکربندی زیر(که شبیه به پیشفرض است، اما برای فهرست و نام دامنه جدید ما بهروزرسانی شد)، جایگذاری کنید:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
توجه داشته باشید که ما پیکربندی root را به دایرکتوری جدید خود و server_name را به نام دامنه خود به روز کرده ایم.
سپس، بیایید فایل را با ایجاد پیوندی از آن به دایرکتوری فعال شده توسط سایتها، که Nginx هنگام راهاندازی از آن میخواند، فعال کنیم:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
نکته : Nginx از یک روش معمول به نام پیوندهای نمادین یا پیوندهای نمادین برای ردیابی اینکه کدام یک از بلاک های سرور شما فعال هستند استفاده می کند. ایجاد یک پیوند نمادین مانند ایجاد یک میانبر بر روی دیسک است، به طوری که بعداً میتوانید میانبر را از فهرست سایتهای فعال حذف کنید در حالی که اگر میخواهید آن را فعال کنید، بلوک سرور را در سایتها در دسترس نگه دارید.
اکنون دو بلوک سرور برای پاسخ به درخواستها بر اساس دستورالعملهای listen و server_name فعال و پیکربندی شدهاند (شما میتوانید در مورد نحوه پردازش Nginx این دستورالعملها را در اینجا بیشتر بخوانید):
- your_domain: به درخواست های your_domain و www.your_domain پاسخ می دهد.
- default: به هر درخواستی در پورت 80 که با دو بلوک دیگر مطابقت نداشته باشد پاسخ می دهد.
برای جلوگیری از مشکل احتمالی حافظه سطل هش که ممکن است در اثر افزودن نام سرور اضافی ایجاد شود، لازم است یک مقدار واحد را در فایل /etc/nginx/nginx.conf
تنظیم کنید. فایل را باز کنید:
sudo nano /etc/nginx/nginx.conf
دستور server_names_hash_bucket_size را پیدا کنید و برای لغو نظر خط، نماد # را بردارید. اگر از nano استفاده میکنید، میتوانید با فشردن CTRL و w به سرعت کلمات موجود در فایل را جستجو کنید.
نکته : نوشتن نظر خطوط کد - معمولاً با قرار دادن # در ابتدای یک خط - راه دیگری برای غیرفعال کردن آنها بدون نیاز به حذف واقعی آنها است. بسیاری از فایلهای پیکربندی با گزینههای متعدد ارسال میشوند تا با جابجایی بین کد فعال و اسناد، آنها را فعال یا غیرفعال کنید.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
پس از اتمام کار فایل را ذخیره کرده و ببندید.
در مرحله بعد، آزمایش کنید تا مطمئن شوید در هیچ یک از فایل های Nginx شما خطای نحوی وجود ندارد:
sudo nginx -t
اگر مشکلی وجود ندارد، Nginx را مجددا راه اندازی کنید تا تغییرات شما فعال شود:
sudo systemctl restart nginx
Nginx اکنون باید نام دامنه شما را ارائه دهد. می توانید این را با رفتن به http://your_domain آزمایش کنید، جایی که باید چیزی شبیه به این را ببینید:
مرحله 6 – آشنایی با فایل ها و دایرکتوری های مهم Nginx
اکنون که می دانید چگونه سرویس Nginx خود را مدیریت کنید، باید چند دقیقه وقت بگذارید تا با چند فهرست و فایل مهم آشنا شوید.
محتوا
/var/www/html
: محتوای واقعی وب که به طور پیشفرض فقط از صفحه پیشفرض Nginx تشکیل شده است که قبلاً دیدهاید، در خارج از فهرست/var/www/html
ارائه میشود. این را می توان با تغییر فایل های پیکربندی Nginx تغییر داد.
پیکربندی سرور
/etc/nginx
: دایرکتوری پیکربندی Nginx. همه فایل های پیکربندی Nginx در اینجا قرار دارند./etc/nginx/nginx.conf
: فایل پیکربندی اصلی Nginx. این را می توان برای ایجاد تغییرات در پیکربندی جهانی Nginx تغییر داد./etc/nginx/sites-available/
: فهرستی که میتوان بلاکهای سرور هر سایت را در آن ذخیره کرد. Nginx از فایل های پیکربندی موجود در این دایرکتوری استفاده نمی کند مگر اینکه به دایرکتوری فعال شده سایت ها پیوند داده شده باشند. به طور معمول، تمام پیکربندی بلوک سرور در این دایرکتوری انجام می شود و سپس با پیوند دادن به دایرکتوری دیگر فعال می شود./etc/nginx/sites-enabled/
: دایرکتوری که بلوکهای سرور فعال در هر سایت در آن ذخیره میشوند. به طور معمول، این ها با پیوند دادن به فایل های پیکربندی موجود در فهرست سایت های موجود ایجاد می شوند./etc/nginx/snippets
: این دایرکتوری شامل قطعات پیکربندی است که می تواند در جای دیگری از پیکربندی Nginx گنجانده شود. بخشهای پیکربندی بالقوه تکرارپذیر، کاندیدهای خوبی برای تبدیل مجدد به قطعهها هستند.
گزارش سرور
/var/log/nginx/access.log
: هر درخواستی به سرور وب شما در این فایل گزارش ثبت میشود، مگر اینکه Nginx به گونهای دیگر پیکربندی شده باشد./var/log/nginx/error.log
: هر گونه خطای Nginx در این گزارش ثبت می شود.
نتیجه
اکنون که وب سرور خود را نصب کرده اید، گزینه های زیادی برای نوع محتوا و فناوری هایی که می خواهید برای ایجاد تجربه غنی تر استفاده کنید، دارید.
اگر میخواهید یک دسته برنامه کاملتر بسازید، مقاله نحوه نصب لینوکس، Nginx، MySQL، PHP (پشته LEMP) در اوبونتو 22.04 را بررسی کنید.
برای راهاندازی HTTPS برای نام دامنه خود با یک گواهی رایگان SSL با استفاده از Let’s Encrypt، باید به نحوه ایمن کردن Nginx با Let’s Encrypt در اوبونتو 22.04 بروید.
منبع DigitalOcean