تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه میزبانی وبسایت با استفاده از Cloudflare و Nginx در اوبونتو 22.04


۱۱ اسفند ۱۴۰۳

Cloudflare یک سرویس است که بین بازدیدکنندگان و سرور وب‌سایت شما قرار می‌گیرد و به عنوان یک پراکسی معکوس عمل می‌کند. این سرویس علاوه بر شبکه توزیع محتوا CDN و کاهش حملات DDoS، خدمات سرور دامنه توزیع‌شده DNS را نیز ارائه می‌دهد.

در این آموزش، شما وب‌سایتی که با Nginx سرو می‌شود را با استفاده از گواهی‌نامه CA Origin از Cloudflare ایمن خواهید کرد. سپس Nginx را طوری پیکربندی می‌کنید که از درخواست‌های pull تایید شده استفاده کند. با این روش، علاوه بر بهره‌مندی از CDN و سرعت بالای حل DNS Cloudflare، اطمینان حاصل می‌کنید که تمامی ارتباطات از طریق Cloudflare عبور می‌کنند و این باعث جلوگیری از حملات مخرب به سرور شما می‌شود.

Nginx چیست؟

Nginx یک وب‌سرور قدرتمند و محبوب است که مسئول میزبانی وب‌سایت‌های پر بازدید و با ترافیک بالا است. معمولا از Nginx برای میزبانی وب‌سایت‌ها استفاده می‌شود و Cloudflare به عنوان CDN و سرویس‌دهنده DNS در کنار آن قرار می‌گیرد.

🔷بیشتر بخوانید: نحوه نصب Nginx در سرور مجازی اوبونتو Ubuntu

در ادامه با آن‌ها آشنا خواهید شد:

  • Nginx چیست؟
  • پیش نیاز ها
  • مرحله اول: ایجاد گواهی‌نامه TLS از Origin CA
  • مرحله دوم: نصب گواهی‌نامه Origin CA در Nginx
  • مرحله سوم: تنظیمات Nginx برای استفاده از گواهی‌نامه SSL
  • مرحله چهارم: بررسی و راه‌اندازی Nginx
  • مرحله پنجم: تنظیمات Cloudflare
  • مرحله ششم: تنظیم Authenticated Origin Pulls
  • سوالات متداول
  • جمع بندی

پیش نیاز ها:

برای انجام این آموزش، به موارد زیر نیاز خواهید داشت:

  1. یک سرور Ubuntu 22.04
  2. نصب Nginx
  3. یک حساب Cloudflare و دامنه ثبت‌شده
  4. پیکربندی یک سرور بلاک Nginx
ت با استفاده از Cloudflare

مرحله اول: ایجاد گواهی‌نامه TLS از Origin CA

اگر می‌خواهید از Cloudflare برای مدیریت دامنه خود استفاده کنید و می‌خواهید ارتباط بین Cloudflare و سرور Nginx خود را ایمن کنید، می‌توانید از گواهی‌نامه رایگان Cloudflare Origin CA استفاده کنید. این گواهی‌نامه باعث رمزگذاری ارتباط بین سرور شما و Cloudflare می‌شود و امنیت بیشتری را برای داده‌های شما فراهم می‌کند.

برای دریافت این گواهی‌نامه، ابتدا وارد حساب Cloudflare خود شوید و دامنه موردنظر را انتخاب کنید. سپس به بخش SSL/TLS در داشبورد Cloudflare بروید و تب Origin Server را باز کنید. در این بخش گزینه Create Certificate را انتخاب کنید تا فرآیند ساخت گواهی‌نامه آغاز شود.

پس از باز شدن صفحه جدید، گزینه پیش‌فرض Generate private key and CSR with Cloudflare را تغییر ندهید و همان را تأیید کنید. سپس روی Create کلیک کنید تا Cloudflare گواهی‌نامه و کلید خصوصی را برای شما ایجاد کند. در این مرحله، یک کد به عنوان Origin Certificate (گواهی‌نامه اصلی) و یک کد دیگر به عنوان Private Key (کلید خصوصی) نمایش داده می‌شود. توجه داشته باشید که کلید خصوصی فقط یک بار نمایش داده می‌شود، بنابراین حتماً قبل از بستن پنجره آن را ذخیره کنید، زیرا در آینده قابل بازیابی نخواهد بود.

پس از دریافت این کدها، باید آن‌ها را روی سرور خود ذخیره کنید. مسیر پیشنهادی برای ذخیره این فایل‌ها در سیستم‌های لینوکسی، پوشه /etc/ssl/ است که معمولاً به‌صورت پیش‌فرض در سرورها وجود دارد. با انجام این مراحل، گواهی‌نامه روی سرور شما نصب می‌شود و ارتباط بین Cloudflare و Nginx به‌صورت ایمن برقرار خواهد شد.

ابتدا محتوای گواهی‌نامه اصلی که در پنجره مرورگر شما نمایش داده می‌شود را کپی کنید.

سپس در سرور، فایل /etc/ssl/cert.pem را با ویرایشگر متن دلخواه خود باز کنید.

sudo nano /etc/ssl/cert.pem

محتوای گواهی‌نامه را در این فایل بگذارید، سپس تغییرات را ذخیره کرده و از ویرایشگر خارج شوید. اگر از ویرایشگر nano استفاده می‌کنید، کلیدهای Ctrl+X را فشار دهید، سپس زمانی که از شما خواسته شد Y را بزنید و در نهایت Enter را فشار دهید.

حال به مرورگر خود برگردید و محتوای Private key را کپی کنید. فایل /etc/ssl/key.pem را برای ویرایش باز کنید.

sudo nano /etc/ssl/key.pem

کلید خصوصی را در این فایل بچسبانید، فایل را ذخیره کرده و از ویرایشگر خارج شوید.

  • توجه: گاهی هنگام کپی و پیست کردن گواهی‌نامه و کلید از داشبورد Cloudflare به سرور، خطوط خالی به صورت ناخواسته وارد فایل‌ها می‌شود. Nginx این گواهی‌نامه‌ها و کلیدها را نامعتبر می‌شمارد، پس حتماً مطمئن شوید که هیچ خط خالی در فایل‌ها وجود ندارد.
  • هشدار: گواهی‌نامه Origin CA از Cloudflare تنها توسط خود Cloudflare معتبر است و باید فقط برای سرورهای اصلی که به طور فعال به Cloudflare متصل هستند، استفاده شود. در صورتی که Cloudflare را متوقف یا غیرفعال کنید، این گواهی‌نامه باعث ایجاد خطای “گواهی‌نامه نامعتبر” خواهد شد.

حال که کلید و فایل‌های گواهی‌نامه را به سرور منتقل کردید، باید پیکربندی Nginx را به‌روزرسانی کنید تا از آن‌ها استفاده کند.

مرحله دوم: نصب گواهی‌نامه Origin CA در Nginx

در بخش قبلی، شما یک گواهی‌نامه Origin و کلید خصوصی را با استفاده از داشبورد Cloudflare ایجاد کرده و فایل‌ها را به سرور خود منتقل کردید. در این قسمت باید پیکربندی Nginx را برای سایت خود به‌روز کنید تا از گواهی‌نامه و کلید خصوصی برای ایمن‌سازی ارتباط بین سرورهای Cloudflare و سرور شما استفاده کند.

ابتدا، مطمئن شوید که UFW فایروال ترافیک HTTPS را مجاز می‌کند. دستورات زیر را برای باز کردن پورت‌های HTTP و HTTPS (پورت 80 و 443) اجرا کنید.

sudo ufw allow 'Nginx Full'

سپس، UFW را مجددا بارگذاری کنید.

sudo ufw reload

در نهایت، چک کنید که قوانین جدید اعمال شده‌اند و UFW فعال باشد.

sudo ufw status

خروجی باید به این شکل باشد.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)           ALLOW       Anywhere (v6)
نصب گواهی‌نامه Origin CA در Nginx

اگر قصد دارید تا بلاک سرور Nginx خود را به‌روز کنید. در حین نصب، Nginx یک بلاک سرور پیش‌فرض ایجاد می‌کند. اگر هنوز این بلاک وجود دارد، آن را حذف کنید، زیرا شما قبلاً یک بلاک سرور سفارشی برای دامنه خود پیکربندی کرده‌اید.

sudo rm /etc/nginx/sites-enabled/default

حال فایل پیکربندی Nginx برای دامنه خود را باز کنید.

sudo nano /etc/nginx/sites-available/your_domain

این فایل باید به شکل زیر باشد. در اینجا، شما باید فایل پیکربندی Nginx را برای انجام موارد زیر تغییر دهید.

/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;
        }
}

مرحله سوم: تنظیمات Nginx برای استفاده از گواهی‌نامه SSL

  1. پیکربندی پورت 80 برای هدایت تمام درخواست‌ها به HTTPS: ابتدا باید درخواست‌هایی که به پورت 80 (HTTP) ارسال می‌شوند را به HTTPS هدایت کنید.
  2. پیکربندی پورت 443 برای استفاده از گواهی‌نامه Origin CA و کلید خصوصی: سپس باید Nginx را تنظیم کنید که از گواهی‌نامه SSL و کلید خصوصی که قبلاً از Cloudflare دریافت کرده‌اید، استفاده کند.

فایل پیکربندی Nginx خود را به این شکل تغییر دهید.

/etc/nginx/sites-available/your_domain
server {
    listen 80;
    listen [::]:80;
    server_name your_domain www.your_domain;
    return 302 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;

    server_name your_domain www.your_domain;

    root /var/www/your_domain/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

پس از انجام این تغییرات، فایل را ذخیره کنید و از ویرایشگر خارج شوید.

مرحله چهارم: بررسی و راه‌اندازی Nginx

بررسی برای اطمینان از نبود خطاهای سینتکسی در پیکربندی Nginx.

sudo nginx -t

اگر هیچ مشکلی وجود نداشت، Nginx را ریستارت کنید تا تغییرات شما فعال شوند.

sudo systemctl restart nginx

مرحله پنجم: تنظیمات Cloudflare

برای تکمیل تنظیمات امنیتی، وارد داشبورد Cloudflare شوید، به بخش SSL/TLS بروید و در تب Overview گزینه Full (strict) را انتخاب کنید. این گزینه باعث می‌شود که تمام ارتباطات بین Cloudflare و سرور Nginx شما به‌صورت کاملاً رمزگذاری‌شده انجام شود و از امنیت کامل سایت اطمینان حاصل شود.

حالا، وب‌سایت خود را با آدرس https://your_domain باز کنید و بررسی کنید که صفحه اصلی به درستی نمایش داده می‌شود. اگر تنظیمات را به‌درستی انجام داده باشید، مرورگر نشان می‌دهد که اتصال شما درست است.

برای مشاهده جزئیات گواهی‌نامه، ابزارهای توسعه‌دهنده مرورگر خود را باز کنید، به تب Security بروید و گزینه View Certificate را انتخاب کنید. ممکن است در این بخش متوجه شوید که گواهی‌نامه شما توسط Cloudflare صادر نشده است. این اتفاق طبیعی است، زیرا Cloudflare گاهی از مراجع گواهی‌نامه دیگری مانند Let’s Encrypt استفاده می‌کند. برای اطلاعات بیشتر می‌توانید مستندات Cloudflare را بررسی کنید.

در مرحله بعد، تنظیمات Authenticated Origin Pulls را انجام می‌دهیم. این قابلیت باعث می‌شود که سرور Nginx شما فقط درخواست‌هایی را بپذیرد که از طرف Cloudflare ارسال شده‌اند. به این ترتیب، اگر کسی بخواهد بدون عبور از Cloudflare مستقیماً به سرور شما متصل شود، درخواست او رد خواهد شد و امنیت سایت افزایش پیدا می‌کند.

تنظیمات Nginx برای استفاده از گواهی‌نامه SSL

مرحله ششم: تنظیم Authenticated Origin Pulls

گواهی‌نامه Origin CA به Cloudflare کمک می‌کند تا مطمئن شوید که ارتباط با سرور اصلی معتبر است یا خیر. این گواهی برای احراز هویت TLS استفاده می‌شود تا تأیید کند که سرور Nginx شما فقط با Cloudflare در ارتباط است.

در این فرآیند، هم سرور Nginx و هم Cloudflare باید گواهی‌نامه‌ای معتبر ارائه دهند تا ارتباط برقرار شود. سرور شما طوری تنظیم می‌شود که فقط درخواست‌هایی را قبول می‌کند که دارای گواهی‌نامه معتبر از Cloudflare باشند. در نتیجه، اگر فردی بخواهد بدون عبور از Cloudflare مستقیماً به سرور شما متصل شود، درخواست او رد خواهد شد، زیرا فاقد این گواهی است.

این روش باعث می‌شود مهاجمان نتوانند اقدامات امنیتی Cloudflare را دور بزنند و به‌طور مستقیم به سرور Nginx شما دسترسی پیدا کنند، در نتیجه امنیت سایت شما افزایش پیدا می‌کند.

Cloudflare گواهی‌نامه‌هایی را ارائه می‌دهد که توسط یک مرجع گواهی‌نامه (CA) معتبر امضا شده است.

-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----

گواهی‌نامه را کپی کنید. سپس فایل /etc/ssl/cloudflare.crt را ایجاد کنید تا گواهی Cloudflare در آن ذخیره شود.

sudo nano /etc/ssl/cloudflare.crt

گواهی‌نامه را در فایل قرار داده و سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید.

حالا پیکربندی Nginx را به‌روزرسانی کنید تا از TLS Authenticated Origin Pulls استفاده کند. فایل پیکربندی دامنه خود را باز کنید.

sudo nano /etc/nginx/sites-available/your_domain
 تنظیم Authenticated Origin Pulls

دستورات ssl_client_certificate , ssl_verify_client را مانند مثال زیر به فایل اضافه کنید.

server {

    # پیکربندی SSL

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;
    ssl_client_certificate /etc/ssl/cloudflare.crt;
    ssl_verify_client on;

    ...
}

فایل را ذخیره کرده و از ویرایشگر خارج شوید.

حالا Nginx را تست کنید تا مطمئن شوید هیچ خطای نحوی در پیکربندی Nginx شما وجود ندارد.

sudo nginx -t

اگر هیچ مشکلی یافت نشد، Nginx را مجدداً راه‌اندازی کنید تا تغییرات شما فعال شود.

sudo systemctl restart nginx

در نهایت، برای فعال‌سازی Authenticated Pulls، به بخش SSL/TLS در داشبورد Cloudflare بروید، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را فعال کنید.

اگر گواهی‌نامه CA Cloudflare درخواست را امضا نکرده باشد، سرور اصلی شما خطا می‌دهد.

  • توجه: بیشتر مرورگرها درخواست‌ها را کش می‌کنند، بنابراین برای مشاهده تغییرات می‌توانید از حالت new incognito tab مرورگر استفاده کنید. برای جلوگیری از کش شدن درخواست‌ها توسط Cloudflare در حین راه‌اندازی وب‌سایت، به بخش Overview در داشبورد Cloudflare بروید و حالت Development Mode را فعال کنید.

حالا که مطمئن شدید تنظیمات به درستی کار می‌کند، به بخش SSL/TLS در داشبورد Cloudflare برگشته، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را دوباره فعال کنید.

سوالات متداول:

در ادامه به سوالاتی که امکان دارد در این موضوع برای شما پیش آمده باشد به صورت مفید و کوتاه پاسخ داده‌ایم.

گواهی‌نامه Origin CA Cloudflare چیست و چه کاربردی دارد؟

این یک گواهی TLS رایگان است که ارتباط بین Cloudflare و سرور شما را ایمن می‌کند.

چگونه گواهی‌نامه Origin CA را در Nginx نصب و تنظیم کنیم؟

گواهی را از Cloudflare دریافت کنید، آن را در مسیر /etc/ssl/ ذخیره کنید و مسیر آن را در تنظیمات Nginx مشخص کنید.

چرا بعد از نصب گواهی‌نامه Origin CA، وب‌سایتم باز نمی‌شود؟

بررسی کنید که SSL/TLS در Cloudflare روی Full (strict) باشد و مسیر گواهی‌ها در Nginx درست تنظیم شده باشد.

تفاوت بین حالت‌ های رمز گذاری SSL/TLS در Cloudflare چیست؟

حالت Flexible فقط بین کاربر و Cloudflare امن است، اما Full (strict) کل مسیر را رمزگذاری می‌کند و امنیت بیشتری دارد.

چگونه مطمئن شوم که فقط Cloudflare به سرور Nginx من دسترسی دارد؟

ویژگی Authenticated Origin Pulls را فعال کنید تا فقط درخواست‌هایی که از Cloudflare می‌آیند، پذیرفته شوند.

گواهی‌نامه Origin CA Cloudflare

جمع بندی

در این آموزش، شما وب‌سایت خود را که روی سرور Nginx راه‌اندازی شده است، با استفاده از گواهی‌نامه Origin CA از Cloudflare ایمن کردید. سپس تنظیماتی که انجام دادید به نام Authenticated Origin Pulls که باعث می‌شود فقط درخواست‌هایی که از طرف سرورهای Cloudflare ارسال می‌شوند، پذیرفته شوند. این کار از اتصال مستقیم دیگران به سرور Nginx شما جلوگیری می‌کند و امنیت سایت شما را افزایش می‌دهد.