
مقدمه
اگر قصد دارید وبسایت خود را با Nginx میزبانی کنید، استفاده از Cloudflare یکی از بهترین روشها برای افزایش امنیت، سرعت و پایداری سرویس است.
Cloudflare بهعنوان یک Reverse Proxy بین کاربران و سرور شما قرار میگیرد و علاوه بر ارائه CDN، امکانات متعددی مانند محافظت در برابر حملات DDoS، فایروال تحت وب (WAF)، مدیریت DNS و بهینهسازی کش را نیز فراهم میکند.
در این آموزش یاد میگیرید چگونه یک وبسایت که روی Ubuntu 24.04 LTS و Nginx اجرا شده است را به Cloudflare متصل کنید و ارتباط بین Cloudflare و سرور را با استفاده از Origin CA Certificate ایمن نمایید. همچنین در ادامه قابلیت Authenticated Origin Pulls را فعال میکنیم تا تنها سرورهای Cloudflare بتوانند به وبسرور شما متصل شوند و تمامی درخواستهای مستقیم به سرور مسدود شوند.
در پایان این آموزش، تمام درخواستهای کاربران ابتدا از Cloudflare عبور کرده و سپس به سرور شما خواهند رسید؛ موضوعی که امنیت وبسایت را به شکل قابل توجهی افزایش میدهد.
پیشنیازها
قبل از شروع این آموزش، موارد زیر باید آماده باشند:
- یک سرور Ubuntu 24.04 LTS
- یک کاربر دارای دسترسی
sudo - نصب و پیکربندی Nginx
- یک دامنه فعال
- یک حساب کاربری در Cloudflare
- اضافه کردن دامنه به Cloudflare و تنظیم DNS آن روی سرور
- ایجاد یک Server Block در Nginx برای دامنه موردنظر
در این آموزش فرض میکنیم دامنه شما قبلاً به Cloudflare منتقل شده و وبسایت از طریق HTTP در دسترس است.
معماری این راهاندازی
در حالت عادی ارتباط کاربران به این شکل است:
Visitor
│
▼
Nginx Server
اما پس از پایان این آموزش ساختار به شکل زیر خواهد بود:
Visitor
│
▼
Cloudflare
│
SSL/TLS
│
▼
Nginx Server
و پس از فعالسازی Authenticated Origin Pulls:
Visitor
│
▼
Cloudflare
│
(Authenticated TLS)
│
▼
Nginx
در این حالت هیچ کاربری قادر نخواهد بود مستقیماً به IP سرور متصل شود.
مرحله اول — ساخت Origin Certificate در Cloudflare
Cloudflare قابلیتی به نام Origin CA ارائه میکند که یک گواهی SSL مخصوص ارتباط بین Cloudflare و سرور شما ایجاد میکند.
این گواهی فقط توسط Cloudflare معتبر شناخته میشود و برای استفاده مستقیم کاربران مناسب نیست.
وارد داشبورد Cloudflare شوید.
سپس دامنه موردنظر را انتخاب کنید.
از منوی سمت چپ وارد بخش زیر شوید:
SSL/TLS
سپس وارد تب:
Origin Server
روی گزینه:
Create Certificate
کلیک کنید.
تنظیمات ساخت گواهی
تنظیمات پیشفرض را تغییر ندهید.
گزینه زیر را انتخاب کنید:
Generate private key and CSR with Cloudflare
سپس روی:
Next
کلیک کنید.
Cloudflare دو مقدار در اختیار شما قرار میدهد:
- Origin Certificate
- Private Key
هردوی این موارد را ذخیره کنید زیرا Private Key فقط یک بار نمایش داده میشود.
ذخیره Certificate روی سرور
ابتدا فایل گواهی را ایجاد کنید.
sudo nano /etc/ssl/cert.pem
کل متن Origin Certificate را داخل فایل قرار دهید.
سپس فایل را ذخیره کنید.
اکنون فایل کلید خصوصی را ایجاد کنید.
sudo nano /etc/ssl/key.pem
محتویات Private Key را داخل آن قرار دهید.
سپس فایل را ذخیره کنید.
نکته مهم
هنگام Paste کردن Certificate یا Private Key دقت کنید هیچ خط خالی اضافی داخل فایل وجود نداشته باشد.
وجود خط خالی باعث میشود Nginx گواهی را نامعتبر تشخیص دهد.
هشدار امنیتی
گواهیهای Origin CA فقط برای ارتباط بین Cloudflare و سرور طراحی شدهاند.
اگر Cloudflare را غیرفعال کنید یا رکورد DNS را از حالت Proxy خارج نمایید، مرورگر کاربران این گواهی را معتبر نخواهد دانست و خطای SSL نمایش داده میشود.
به همین دلیل Origin Certificate نباید جایگزین گواهی عمومی مانند Let’s Encrypt شود.
مرحله دوم — پیکربندی Nginx برای استفاده از Origin Certificate
اکنون که گواهی SSL و کلید خصوصی را روی سرور ذخیره کردهاید، باید Nginx را طوری پیکربندی کنید که از آنها برای برقراری ارتباط امن با Cloudflare استفاده کند.
فعال کردن HTTPS در فایروال
اگر از UFW استفاده میکنید، ابتدا اجازه دسترسی به HTTP و HTTPS را صادر کنید.
sudo ufw allow 'Nginx Full'
سپس تنظیمات فایروال را بارگذاری مجدد کنید.
sudo ufw reload
برای اطمینان از اعمال شدن قوانین، وضعیت UFW را بررسی کنید.
sudo ufw status
خروجی باید مشابه زیر باشد:
Status: active
To Action
-----------------------------------------
OpenSSH ALLOW
Nginx Full ALLOW
حذف Server Block پیشفرض
اگر هنوز فایل پیشفرض Nginx فعال است، آن را حذف کنید.
sudo rm -f /etc/nginx/sites-enabled/default
ویرایش تنظیمات سایت
فایل تنظیمات دامنه را باز کنید.
sudo nano /etc/nginx/sites-available/your_domain
اگر قبلاً Server Block ساخته باشید، احتمالاً چیزی مشابه زیر مشاهده خواهید کرد.
server {
listen 80;
listen [::]:80;
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;
}
}
ریدایرکت تمام درخواستهای HTTP به HTTPS
بهتر است کاربران همیشه از نسخه امن سایت استفاده کنند.
بنابراین بلاک اول را به شکل زیر تغییر دهید.
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 301 https://$host$request_uri;
}
استفاده از 301 Redirect باعث میشود موتورهای جستجو نیز نسخه HTTPS سایت را بهعنوان آدرس اصلی در نظر بگیرند.
ایجاد Server Block برای HTTPS
در ادامه فایل، بلاک زیر را اضافه کنید.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain www.your_domain;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
location / {
try_files $uri $uri/ =404;
}
}
در این بخش:
listen 443 sslفعالسازی HTTPS را انجام میدهد.http2باعث افزایش سرعت بارگذاری صفحات میشود.ssl_certificateمسیر فایل گواهی Cloudflare Origin CA را مشخص میکند.ssl_certificate_keyنیز کلید خصوصی مربوط به آن گواهی است.
بررسی صحت تنظیمات Nginx
قبل از راهاندازی مجدد سرویس، فایلهای تنظیمات را بررسی کنید.
sudo nginx -t
اگر همه چیز صحیح باشد، خروجی مشابه زیر خواهد بود.
nginx: configuration file /etc/nginx/nginx.conf test is successful
راهاندازی مجدد Nginx
اکنون سرویس را ریستارت کنید.
sudo systemctl restart nginx
برای اطمینان از اجرا شدن سرویس نیز میتوانید دستور زیر را اجرا کنید.
sudo systemctl status nginx
تنظیم حالت SSL در Cloudflare
اکنون وارد داشبورد Cloudflare شوید.
مسیر زیر را باز کنید.
SSL/TLS → Overview
حالت SSL را روی گزینه زیر قرار دهید.
Full (Strict)
چرا Full (Strict)؟
Cloudflare چهار حالت مختلف برای SSL ارائه میدهد:
| حالت | توضیح |
|---|---|
| Off | بدون SSL |
| Flexible | فقط ارتباط کاربر با Cloudflare رمزنگاری میشود. |
| Full | ارتباط Cloudflare تا سرور رمزنگاری میشود اما اعتبار گواهی بررسی نمیشود. |
| Full (Strict) | ارتباط رمزنگاری شده است و اعتبار گواهی نیز بررسی میشود. پیشنهاد شده |
از آنجایی که از Origin Certificate استفاده میکنیم، بهترین گزینه Full (Strict) است.
تست اتصال
اکنون مرورگر را باز کنید و آدرس سایت را وارد کنید.
https://your_domain
اگر همه مراحل را بهدرستی انجام داده باشید:
- سایت بدون خطا باز میشود.
- مرورگر اتصال HTTPS را تأیید میکند.
- ارتباط بین Cloudflare و سرور نیز کاملاً رمزنگاری شده خواهد بود.
مرحله سوم — فعالسازی Authenticated Origin Pulls
تا این مرحله ارتباط بین Cloudflare و سرور شما رمزنگاری شده است، اما هنوز یک مشکل امنیتی وجود دارد.
اگر مهاجم IP واقعی سرور را پیدا کند، میتواند مستقیماً به Nginx متصل شود و Cloudflare را دور بزند. در این حالت حملات دیگر از فیلترها، WAF و سیستمهای امنیتی Cloudflare عبور نخواهند کرد.
قابلیت Authenticated Origin Pulls این مشکل را برطرف میکند.
در این روش، Nginx فقط درخواستهایی را قبول میکند که دارای گواهی معتبر Cloudflare باشند و تمام ارتباطهای مستقیم با IP سرور رد خواهند شد.
نحوه عملکرد Authenticated Origin Pulls
در این حالت فرآیند ارتباط به شکل زیر خواهد بود:
Visitor
│
▼
Cloudflare
│
Client Certificate
│
▼
Nginx
اگر درخواست مستقیماً به IP سرور ارسال شود:
Visitor
│
▼
Nginx
✖ Connection Rejected
بنابراین حتی اگر IP سرور لو برود، کسی قادر به دسترسی مستقیم نخواهد بود.
دریافت گواهی Cloudflare
Cloudflare برای احراز هویت درخواستهای خود از یک گواهی عمومی استفاده میکند.
به جای کپی کردن دستی گواهی (که ممکن است در آینده تغییر کند)، بهتر است آخرین نسخه را مستقیماً از مخزن رسمی Cloudflare دریافت کنید.
sudo curl -L \
https://developers.cloudflare.com/ssl/static/authenticated_origin_pull_ca.pem \
-o /etc/ssl/cloudflare.crt
اکنون فایل زیر روی سرور ایجاد شده است:
/etc/ssl/cloudflare.crt
ویرایش تنظیمات Nginx
فایل تنظیمات دامنه را باز کنید.
sudo nano /etc/nginx/sites-available/your_domain
داخل بلاک HTTPS، دو خط زیر را اضافه کنید.
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;
در نهایت بخش SSL باید چیزی مشابه زیر باشد.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain www.your_domain;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;
root /var/www/your_domain/html;
location / {
try_files $uri $uri/ =404;
}
}
معنی این تنظیمات
ssl_client_certificate
این فایل شامل Certificate Authority مربوط به Cloudflare است.
Nginx از این فایل برای بررسی اعتبار درخواستهای ورودی استفاده میکند.
ssl_verify_client on
با فعال شدن این گزینه، هر کلاینت باید هنگام برقراری ارتباط یک Client Certificate معتبر ارائه دهد.
از آنجایی که فقط Cloudflare این گواهی را دارد، تمام درخواستهای دیگر رد خواهند شد.
بررسی تنظیمات
تنظیمات Nginx را بررسی کنید.
sudo nginx -t
اگر خروجی مشابه زیر بود، همه چیز صحیح است.
nginx: configuration file /etc/nginx/nginx.conf test is successful
راهاندازی مجدد Nginx
sudo systemctl restart nginx
فعال کردن Authenticated Origin Pulls در Cloudflare
اکنون وارد داشبورد Cloudflare شوید.
از مسیر زیر وارد تنظیمات شوید.
SSL/TLS
سپس وارد تب:
Origin Server
در پایین صفحه گزینه زیر را پیدا کنید.
Authenticated Origin Pulls
آن را روی Enabled قرار دهید.
تست عملکرد
اکنون دوباره سایت را باز کنید.
https://your_domain
اگر همه چیز به درستی انجام شده باشد، سایت بدون هیچ مشکلی بارگذاری خواهد شد.
بررسی امنیت
برای اطمینان از عملکرد صحیح این قابلیت، میتوانید بهصورت موقت گزینه Authenticated Origin Pulls را در داشبورد Cloudflare غیرفعال کنید.
پس از غیرفعال کردن، مرورگر را رفرش کنید.
اکنون Nginx درخواست Cloudflare را معتبر تشخیص نمیدهد و معمولاً یکی از خطاهای زیر نمایش داده میشود:
- 403 Forbidden
- 400 Bad Request
- یا خطای 525 / 526 از سمت Cloudflare (بسته به تنظیمات SSL)
این رفتار نشان میدهد که Nginx فقط درخواستهایی را میپذیرد که دارای گواهی معتبر Cloudflare باشند.
پس از اطمینان از عملکرد صحیح، دوباره گزینه Authenticated Origin Pulls را فعال کنید.




