در این پست قصد داریم شما را با نحوه ایجاد و تنظیم CDN محتوای ثابت روی سروری که بر روی آن لینوکس CentOS 7 نصب شده است، آشنا کنیم. برای انجام این کار کافیست مراحلی که در ادامه مطلب آمده است را گام به گام طی کنید:
1. ابتدا با استفاده از دستور زیر پکیج های نرم افزاری سیستم خود را به بروزرسانی کنید.
1 |
#yum -y update |
2. سپس با استفاده از دستور زیر باید سرور Nginx HTTP را از مخزن EPEL نصب کنید:
1 2 |
# yum install epel-release # yum install nginx |
3. هنگامی که وب سرور Nginx نصب شد، شما می توانید nginx را برای اولین بار اجرا کنید و تنظیم آن را به گونه ای انجام دهید که از این به بعد به صورت خودکار و با بوت شدن سیستم اجرا شود. برای این کار از دستورات زیر استفاده کنید:
1 2 |
# systemctl start nginx # systemctl enable nginx |
4. به صورت پیش فرض، فایروال تعیبه شده در CentOS 7 به گونه ای تنظیم شده است که ترافیک های Nginx را بلاک کند. برای رفع بلاک این ترافیک روی Nginx، قوانین (rule) فایروال را آپدیت کنید به طوری که بسته های ورودی HTTP و HTTPS اجازه عبور داشته باشند. این کار با اجرای دستورات زیر قابل انجام است:
1 2 3 |
# firewall-cmd –zone=public –permanent –add-service=http # firewall-cmd –zone=public –permanent –add-service=https # firewall-cmd –reload |
برای باز کردن تمامی کانکشن ها (جهت تست و تمرین) و حذف فایروال و پاک کردن جدول های آن نیز می توانید از دستور زیر استفاده کنید (توجه داشته باشید که این دستور را در محل کار خود هرگز اجرا نکنید 🙂 ).
1 |
# yum remove firewalld && iptables -F |
5. در مرحله بعدی با تایپ http://SERVER_DOMAIN_NAME_OR_IP (که باید مطابق با نام دامنه و یا آی پی شما پر شود) در مرورگر خود صفحه پیش فرض nginx را مطابق تصویر زیر مشاهده می کنید.
فایل ها و دایرکتوری های مهم Nginx
- دایرکتوری root پیش فرض سرور (بالاترین سطح دایرکتوری شامل فایل های پیکربندی (config):etc/nginx/
- فایل اصلی کانفیگ Nginx در etc/nginx/nginx.conf
- تنظیمات مربوط به کانفیگ سرور (هاست های مجازی) می تواند در فایل زیر اضافه شود: etc/nginx/conf.d/
- دایرکتوری پیش فرض داکیومنت سرور: usr/share/nginx/html/
6. حال باید کدهای زیر را به منظور انجام تنظیمات لازم برای کَش کردن محتوای ثابت با nginx در فایل conf.d وارد کرده و سپس آن را ذخیره کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
cd /etc/nginx/conf.d/ <strong>#changes directory</strong> vim cdn.conf <strong>#create a config file with below content.</strong> upstream cdn { server cdn.linuxscriptshub.com; <strong>#origin (this is the web server been create earlier)</strong> } proxy_cache_path /mnt/nginx/cdn levels=1:2 keys_zone=cdn_cache:10m max_size=10g inactive=60m use_temp_path=off; <strong>#cache setting http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path</strong> server { listen 80; server_name www.linuxscriptshub.com; <strong>#your domain name ie: www.linuxscriptshub.com</strong> access_log /var/log/nginx/cdn.access.log; <strong>#your cdn access log</strong> error_log /var/log/nginx/cdn.error.log; <strong>#your cdn error log</strong> location ~* .(mp4|gif|jpg|png|html|htm|css|js|ico|swf|pdf)$ { <strong>#in root location, every file content these file format will be serve as a cache # this line must be include on cdn server and origin backend server.</strong> proxy_redirect off; <strong>#http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect (we dont need rewrite when proxy to upstream)</strong> proxy_pass http://cdn; <strong>#proxy_pass to the upstream that we set.</strong> proxy_set_header Host $http_host; <strong>#An unchanged “Host” request header field can be passed like this</strong> expires 5m; <strong>#cache will be expire in 5minutes</strong> proxy_cache cdn_cache; <strong>#proxy pass to the cache rules we setup on top of the config file</strong> proxy_cache_revalidate on; <strong>#cache will be revalidate with the origin server if it is expire</strong> add_header Johnson-CDN-Cache $upstream_cache_status; <strong>#with this header you can know the status of the content been cache or MISS. (can check via inspect element, network)</strong> } location / { proxy_redirect off; <strong>#http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect (we dont need rewrite when proxy to upstream)</strong> set_real_ip_from 0.0.0.0/0; real_ip_header X-Real-IP; real_ip_recursive on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; <strong>#proxy pass the origin client ip to the upstream server</strong> proxy_pass http://cdn; <strong>#proxy_pass to the upstream that we set.</strong> proxy_set_header Host $http_host; <strong>#An unchanged “Host” request header field can be passed like this</strong> } |
8. با استفاده از دستور زیر یک دایرکتوری cache ایجاد کنید که در واقع این دایرکتوری حافظه cache شما محسوب می شود:
1 2 |
mkdir /mnt/nginx/cdn chown -R nginx.nginx /mnt/nginx/ |
نکته: دستوراتی که در بالا به آنها اشاره شد، برای ایجاد یک CDN سرور است که برای یک نقطه جغرافیایی از کشور در نظر گرفته می شود، تنها کاری که باید در ادامه انجام دهید این است که دامنه خود را به CDN سرور ایجاد شده اشاره دهید. در صورتی که تمایل داشته باشید، این سرور را در کشورهای مختلفی راه اندازی کنید، باید از ماژول nginx geo استفاده کنید.
نفیسه دانشگرمقدم
Latest posts by نفیسه دانشگرمقدم (see all)
- نحوه ارسال هرزنامه ها به صورت اسپم - آذر ۲۸, ۱۴۰۰
- 7 نکته برای کاهش اندازه دیتابیس وردپرس - دی ۳۰, ۱۳۹۹
- نحوه تعریف فوروارد ایمیل در cPanel - آذر ۲۴, ۱۳۹۹