مقدمه
Nginx یکی از محبوب ترین وب سرورها در جهان است و مسئولیت میزبانی برخی از بزرگترین و پربازدیدترین سایت های اینترنت را بر عهده دارد. در بیشتر موارد از Apache سازگارتر با منابع است و می تواند به عنوان وب سرور یا پروکسی معکوس استفاده شود.
در این راهنما، نحوه نصب Nginx را بر روی سرور اوبونتو 18.04 و در مورد فایلها و دایرکتوریهای مهم Nginx خواهید آموخت.
پیش نیازها
قبل از شروع این راهنما، باید یک کاربر معمولی و غیر روت با امتیازات sudo و یک فایروال اصلی روی سرور خود پیکربندی کنید. شما می توانید با دنبال کردن راهنمای اولیه راه اندازی سرور برای اوبونتو 18.04، نحوه پیکربندی یک حساب کاربری معمولی را بیاموزید.
هنگامی که یک حساب کاربری در دسترس دارید، برای شروع به عنوان کاربر غیر روت وارد شوید.
مرحله 1 – نصب Nginx
از آنجایی که Nginx در مخازن پیش فرض اوبونتو موجود است، می توان آن را از این مخازن با استفاده از سیستم بسته بندی apt نصب کرد.
از آنجایی که ممکن است این اولین تعامل شما با سیستم بسته بندی apt در این جلسه باشد، فهرست بسته محلی را به روز کنید تا به آخرین لیست های بسته دسترسی داشته باشید. پس از آن، می توانید nginx را نصب کنید:
sudo apt update
sudo apt install nginx
پس از پذیرش رویه، apt Nginx و هر گونه وابستگی مورد نیاز را روی سرور شما نصب خواهد کرد.
مرحله 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)
توصیه می شود محدودترین نمایه را فعال کنید که همچنان به ترافیکی که پیکربندی کرده اید اجازه دهد. از آنجایی که در این راهنما هنوز 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 – وب سرور خود را بررسی کنید
در پایان مراحل نصب، اوبونتو 18.04 Nginx را راه اندازی می کند. وب سرور باید از قبل راه اندازی شده باشد.
با سیستم systemd init چک کنید تا مطمئن شوید که سرویس در حال اجرا است:
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: en
Active: active (running) since Fri 2021-10-01 21:36:15 UTC; 35s ago
Docs: man:nginx(8)
Main PID: 9039 (nginx)
Tasks: 2 (limit: 1151)
CGroup: /system.slice/nginx.service
├─9039 nginx: master process /usr/sbin/nginx -g daemon on; master_pro
└─9041 nginx: worker process
این خروجی نشان می دهد که سرویس با موفقیت شروع شده است. با این حال، بهترین راه برای آزمایش این است که واقعاً یک صفحه از Nginx درخواست کنید.
میتوانید با پیمایش به آدرس IP سرور خود، به صفحه فرود پیشفرض Nginx دسترسی پیدا کنید تا تأیید کنید که نرمافزار به درستی اجرا میشود. اگر آدرس IP سرور خود را نمی دانید، می توانید آن را از چند راه مختلف دریافت کنید.
سعی کنید موارد زیر را در خط فرمان سرور خود تایپ کنید:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
چند خط دریافت خواهید کرد. می توانید هر کدام را در مرورگر وب خود امتحان کنید تا تأیید کنید که آیا کار می کنند یا خیر.
یک جایگزین دستور زیر را اجرا می کند، که باید آدرس IP عمومی شما را همانطور که از مکان دیگری در اینترنت شناسایی شده است ایجاد کند:
curl -4 icanhazip.com
وقتی آدرس IP سرور خود را دارید، آن را در نوار آدرس مرورگر خود وارد کنید:
http://your_server_ip
شما باید صفحه فرود پیش فرض Nginx را دریافت کنید:
این صفحه با Nginx همراه است تا تأیید شود که سرور به درستی در حال اجرا است.
مرحله 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
Nginx اکنون باید به طور خودکار هنگام بوت شدن سرور دوباره شروع شود.
مرحله 5 – راه اندازی بلوک های سرور (توصیه می شود)
هنگام استفاده از وب سرور Nginx، بلوک های سرور (مشابه میزبان های مجازی در آپاچی) می توانند برای کپسوله کردن جزئیات پیکربندی و میزبانی بیش از یک دامنه از یک سرور استفاده شوند. ما دامنه ای به نام your_domain راه اندازی خواهیم کرد، اما شما باید آن را با نام دامنه خود جایگزین کنید. برای کسب اطلاعات بیشتر در مورد تنظیم نام دامنه با DigitalOcean، به معرفی ما در DigitalOcean DNS مراجعه کنید.
Nginx در اوبونتو 18.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 یا ویرایشگر مورد علاقه خود ایجاد کنید:
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.com 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/
اکنون دو بلوک سرور برای پاسخگویی به درخواستها بر اساس دستورالعملهای listen و server_name فعال و پیکربندی شدهاند (شما میتوانید درباره نحوه پردازش Nginx این دستورالعملها را در اینجا بیشتر بخوانید):
- your_domain: به درخواست های your_domain و www.your_domain پاسخ می دهد.
- پیش فرض: به هر درخواستی در پورت 80 که با دو بلوک دیگر مطابقت نداشته باشد پاسخ می دهد.
برای جلوگیری از مشکل احتمالی حافظه سطل هش که ممکن است از افزودن نام سرورهای اضافی ایجاد شود، لازم است یک مقدار واحد را در فایل /etc/nginx/nginx.conf تنظیم کنید. فایل را باز کنید:
sudo nano /etc/nginx/nginx.conf
دستور server_names_hash_bucket_size را بیابید و نماد # را حذف کنید تا خط را از کامنت خارج کنید:
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
پس از اتمام کار فایل را ذخیره کرده و ببندید.
در مرحله بعد، آزمایش کنید تا مطمئن شوید در هیچ یک از فایل های Nginx شما خطای نحوی وجود ندارد:
sudo nginx -t
اگر مشکلی وجود ندارد، Nginx را مجددا راه اندازی کنید تا تغییرات شما فعال شود:
sudo systemctl restart nginx
Nginx اکنون باید نام دامنه شما را ارائه دهد. میتوانید این را با رفتن به http://your_domain آزمایش کنید، جایی که باید چیزی شبیه به زیر را ببینید:
مرحله 6 – آشنایی با فایل ها و دایرکتوری های مهم Nginx
اکنون که می دانید چگونه خود سرویس Nginx را مدیریت کنید، باید چند دقیقه وقت بگذارید تا با چند فهرست و فایل مهم آشنا شوید.
Content
- /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 در این گزارش ثبت می شود.
نتیجه
اکنون که وب سرور خود را نصب کرده اید، گزینه های زیادی برای نوع محتوا و فناوری هایی که می خواهید برای ایجاد تجربه غنی تر استفاده کنید، دارید.