فعال سازی GeoDNS در وردپرس

https://negarnovin.com/docs/bring-wordpress-to-the-edge-with-geodns/ · آخرین به‌روزرسانی: · نویسنده: نگارنوین · سایت: نگارنوین · 26 دقیقه مطالعه

📌 خلاصه (TL;DR)

Bring WordPress to the Edge with GeoDNS فعال سازی GeoDNS در وردپرس با استفاده از GeoDNS، عملکرد وردپرس را در سطح جهانی بهینه کنید

📊 حقایق کلیدی

URLhttps://negarnovin.com/docs/bring-wordpress-to-the-edge-with-geodns/
تاریخ انتشار2025-09-11
آخرین به‌روزرسانی2025-09-11
نویسندهنگارنوین
ناشرنگارنوین
زبانفارسی (fa-IR)
تعداد کلمات5068
نوع صفحهبرگه

📄 محتوای کامل

وردپرس را با GeoDNS پیشرفته کنید! با استفاده از GeoDNS، عملکرد وردپرس را در سطح جهانی بهینه کنید. با استقرار در چندین سرور، محتوای سریع و مبتنی بر مکان را ارائه دهید.

مقدمه

وردپرس یک سیستم مدیریت محتوای کاربرپسند (CMS) است که به شما امکان می‌دهد برنامه‌های وب با کارایی بالا ایجاد کنید که به مخاطبان جهانی خدمات ارائه می‌دهد. معمولاً کاربران سایت وردپرس از مناطق مختلفی می‌آیند که در برخی مکان‌ها با مشکلات عملکردی مواجه می‌شوند.

GeoDNS (سیستم نام دامنه جغرافیایی) یک روش توزیع ترافیک است که بسته به موقعیت مکانی کلاینت، رکوردهای DNS خاصی را برمی‌گرداند. با ادغام وردپرس با GeoDNS، سرورهای مختلف، سایت وردپرس شما را بسته به موقعیت مکانی کاربر، به مخاطبان مختلف ارائه می‌دهند.

این مقاله توضیح می‌دهد که چگونه می‌توانید وردپرس را با GeoDNS و با استفاده از چندین سرور ارائه شده توسط نگارنوین به اوج خود برسانید. شما باید سایت وردپرس خود را در چندین مکان مستقر کنید و با همان نسخه از سایت خود با سرعت‌های دسترسی به منابع مختلف، به کاربران خدمت‌رسانی کنید.

پیش‌نیازها

قبل از شروع:

    • سرورهای نام دامنه خود را به یک ارائه دهنده سازگار با GeoDNS مانند CloudDNS یا Cloudflare منتقل کنید.
    • سرور اصلی وردپرس را با استفاده از برنامه NegarNovin Marketplace ایجاد کنید

      اگر یک سرور وردپرس موجود دارید، آن را به عنوان سرور اصلی علامت گذاری کنید تا سایر سرورهای شرکت کننده در شبکه GeoDNS شما همگام سازی شوند. این مقاله از آدرس سرور اصلی استفاده می کند 192.0.2.1، آن را با آدرس IP واقعی سرور وردپرس خود جایگزین کنید.

  • سرورهای با سیستم عامل اوبونتو را در مکان‌های مختلف مستقر کنیداین مقاله از ۹ سرور اوبونتو در مکان‌های نگارنوین زیر استفاده می‌کند:
    • نیوجرسی
    • سائو پائولو (برزیل)
    • دهلی نو (هند)
    • ایران (تهران)
    • پاریس (فرانسه / اروپای مرکزی)
    • لندن (بریتانیا / شمال اروپا)
    • ملبورن
    • توکیو (ژاپن)
    • ژوهانسبورگ (آفریقای جنوبی)

    کلاس آدرس IP مثال را 192.0.2.0با آدرس‌های IP سرور عمومی واقعی خود جایگزین کنید.

  • با استفاده از SSH، به هر یک از سرورها در ترمینال جداگانه دسترسی پیدا کنیدروی هر سرور مجازی:
    • همان کاربر غیر ریشه را با دسترسی sudo ایجاد کنید
    • به کاربر sudo جدید بروید

      در این مقاله از دستور زیر استفاده شده است sysadmin، کاربر را با حساب کاربری sudo واقعی خود جایگزین کنید.

    • سرور را به‌روزرسانی کنید
    • نصب پکیج LEMP

سرور اصلی وردپرس را تنظیم کنید

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

  • همگام‌سازی تغییرات پایگاه داده MySQL به صورت بلادرنگ با تمام سرورهای وردپرس
  • همگام‌سازی فایل‌های وردپرس با همه سرورها
  • پیکربندی قوانین فایروال برای دسترسی به پورت MySQL3306
  • انتقال گواهینامه‌های SSL وردپرس به تمام سرورهای وردپرس

فعال کردن تکثیر پایگاه داده MySQL

  1. به دایرکتوری فایل‌های روت وب وردپرس خود بروید
     $ cd /var/www/example.com
  2. فایل را مشاهده کنید wp-config.phpو نام پایگاه داده وردپرس را یادداشت کنید.
     $ cat wp-config.php

    خروجی:

     /** The name of the database for WordPress */
     define( 'DB_NAME', 'wordpressdb' );
  3. به دایرکتوری فایل‌های پیکربندی MySQL بروید
     $ cd /etc/mysql/
  4. با استفاده از یک ویرایشگر متن مانند Nano، فایل پیکربندی اصلی را ویرایش کنید.
     $ nano my.cnf
  5. تنظیمات زیر را به [mysqld]بخش اضافه کنید
     [mysqld]
    
     server-id = 1
     log_bin = /var/log/mysql/mysql-bin.log
     binlog-do-db = wordpressdb
     expire_logs_days = 5

    فایل را ذخیره کنید و ببندید.

    پیکربندی فوق، شناسه تکثیر سرور پایگاه داده MySQL را روی تنظیم می‌کند 1، فایل‌های لاگ را در /var/log/mysqlدایرکتوری نگه می‌دارد، wordpressdbپایگاه داده را به عنوان پایگاه داده تکثیر تنظیم می‌کند و حذف فایل‌های لاگ باینری را پس از هر 5روز فعال می‌کند.

  6. به دایرکتوری mysql.conf.dیا برویدmariadb.conf.d
     $ cd mariadb.conf.d
  7. 50-server.cnfفایل را ویرایش کنید
     $ sudo 50-server.cnf
  8. بخش زیر را پیدا کنید:
     # Instead of skip-networking the default is now to listen only on
     # localhost which is more compatible and is not less secure.
     bind-address            = 127.0.0.1
  9. برای فعال کردن اتصالات از همه رابط‌های سرور، bind-addressمقدار را از به 127.0.0.1تغییر دهید.0.0.0.0
     bind-address            = 0.0.0.0

    فایل را ذخیره کنید و ببندید.

    اعلان آدرس فوق به سرورهای فرزند اجازه می‌دهد تا با استفاده از آدرس IP عمومی به سرور اصلی پایگاه داده MySQL دسترسی داشته باشند.

  10. دایرکتوری فایل‌های لاگ MySQL را ایجاد کنید
     $ sudo mkdir -p /var/log/mysql/
  11. mysqlبه کاربر امتیازات کامل برای دایرکتوری اعطا کنید
     $ sudo chown -R mysql:mysql /var/log/mysql
  12. سرور پایگاه داده MySQL را مجدداً راه اندازی کنید
     $ systemctl restart mysqld
  13. پشتیبان گیری از پایگاه داده MySQL وردپرس
     $ sudo mysqldump wordpressdb > wpdb.sql
  14. .sqlفایل پایگاه داده را به دایرکتوری webroot وردپرس منتقل کنید .
     $ sudo mv wpdb.sql /var/www/example.com/
  15. وارد کنسول MySQL شوید
     $ sudo mysql
  16. یک کاربر جدید برای تکرار وردپرس ایجاد کنید. مثلاً wpreplicaبا یک رمز عبور قوی
     > CREATE USER 'wpreplica'@'%' IDENTIFIED BY 'strong-password';
  17. به پایگاه داده وردپرس بروید
     > use wordpressdb;
  18. اعطای امتیازات تکثیر کاربر در پایگاه داده
     > GRANT REPLICATION SLAVE ON *.* TO 'wpreplica'@'%';
  19. به‌روزرسانی امتیازات MySQL
     > FLUSH PRIVILEGES;
  20. مشاهده وضعیت تکثیر سرور پایگاه داده
     > SHOW MASTER STATUS;

    خروجی:

     +------------------+----------+--------------+------------------+
     | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     +------------------+----------+--------------+------------------+
     | mysql-bin.000002 |      655 | wordpressdb  |                  |
     +------------------+----------+--------------+------------------+
     1 row in set (0.000 sec)

برای تنظیم صحیح تکثیر پایگاه داده MySQL روی سرورهای مجازی، به فایل و موقعیت آن توجه داشته باشید .

فعال کردن همگام‌سازی فایل‌های وردپرس

برای همگام‌سازی فایل‌های وردپرس از سرور اصلی به سرورهای فرزند، با استفاده از کلیدهای SSH یک اتصال SSH امن به هر یک از سرورها ایجاد کنید. در صورت فعال بودن، از یک پروتکل انتقال فایل مانند Rsync برای انتقال تغییرات دایرکتوری هر ۲۰ ثانیه به دایرکتوری ریشه وب وردپرس مقصد، همانطور که در زیر توضیح داده شده است، استفاده کنید.

  1. یک کلید SSH جدید ایجاد کنید
     $ ssh-keygen

    وقتی از شما خواسته شد، Enterبرای پذیرش همه گزینه‌های پیش‌فرض، را فشار دهید و passphraseبرای غیرفعال کردن احراز هویت با رمز عبور، فیلد را خالی نگه دارید.

  2. کلید عمومی SSH را در سرور وردپرس فرزند خود ثبت کنید
     $ ssh-copy-id 192.0.2.100

    وقتی از شما خواسته شد، اثر انگشت سرور راه دور را بپذیرید، سپس رمز عبور سرور را وارد کنید تا کلید SSH شما روی سرور فرزند فعال شود. در صورت موفقیت، خروجی شما باید مانند تصویر زیر باشد:

    برای اطمینان از اتصال از سرور اصلی، فرآیند فوق را برای هر سرور وردپرس فرزند تکرار کنید.

  3. برای آزمایش کلید SSH خود، یک اتصال SSH به سرور وردپرس برقرار کنید.
     $ ssh [email protected]

    تأیید کنید که اتصال SSH بدون احراز هویت با رمز عبور شروع می‌شود.

  4. ایجاد دایرکتوری webroot وردپرس
     $ sudo mkdir -p /var/www/example.com
  5. به وب سرور امتیازات کامل برای دسترسی به دایرکتوری را اعطا کنید.
     $ sudo chown -R www-data:www-data /var/www/example.com/
  6. گروه اصلی کاربر غیر ریشه را به گروه وب سرور تغییر دهید www-data. آن را sysadminبا حساب کاربری واقعی خود جایگزین کنید.
     $ sudo usermod -g www-data sysadmin
  7. www-dataبه گروه، امتیازات کامل برای دسترسی به دایرکتوری webroot وردپرس را اعطا کنید .
     $ sudo chmod -R 775 /var/www/example.com/
  8. فهرست طولانی دایرکتوری والد برای مشاهده مجوزهای کاربر و گروه
     $ ls -l /var/www/

    خروجی:

     total 8
     drwxrwxr-x 6 www-data www-data 4096 Sep 27 00:45 example.com

    تأیید کنید که گروه مجوزهای write، read، و را executeدر دایرکتوری دارد.

  9. یک دایرکتوری جدید Nginx SSL برای ذخیره گواهینامه‌های SSL ایجاد کنید
     $ sudo mkdir -p /etc/nginx/ssl
  10. به وب سرور امتیازات کامل برای دسترسی به دایرکتوری را اعطا کنید.
     $ sudo chown -R www-data:www-data /etc/nginx/ssl
  11. www-dataبه گروه امتیازات کامل برای دسترسی به دایرکتوری اعطا کنید
     $ sudo chmod 775 /etc/nginx/ssl
  12. اتصال SSH را ببندید
     $ exit
  13. با استفاده از Rsync، فایل‌ها را از سرور اصلی وردپرس به سرور فرزند وردپرس منتقل کنید
     $ rsync -avz /var/www/example.com/ 192.0.2.100:/var/www/example.com/

    در صورت موفقیت، خلاصه انتقال شما باید مانند تصویر زیر باشد:

     sent 81,149 bytes received 376 bytes 10,870.00 bytes/sec
     total size is 69,002,299 speedup is 846.39
  14. برای خودکارسازی فرآیند Rsync که هر ۲۰ ثانیه اجرا شود و فایل‌های وردپرس را به‌روز نگه دارد، یک اسکریپت bash جدید در یک دایرکتوری سیستمی مانند زیر ایجاد کنید:/opt/
     $ sudo nano /opt/wpsync.sh
  15. محتویات زیر را به فایل اضافه کنید
     #!/bin/bash
    
     while true; do
         rsync -avz /var/www/example.com/ 192.0.2.100:/var/www/example.com/
         sleep 20 
     done

    فایل را ذخیره کنید و ببندید.

    پیکربندی بالا دستور Rsync را طوری تنظیم می‌کند که هر ۲۰ ثانیه با استفاده از یک حلقه while اجرا شود. این کار فایل‌های وردپرس شما را در سرور فرزند هر بار که تغییرات جدیدی در دایرکتوری سرور اصلی ایجاد می‌شود، به‌روزرسانی می‌کند.

  16. اعطای امتیازات اجرا به اسکریپت
     $ sudo chmod +x /opt/wpsync.sh
  17. یک سرویس سیستمی جدید برای خودکارسازی اسکریپت ایجاد کنید
     $ sudo nano /etc/systemd/system/wpsync.service
  18. محتویات زیر را به فایل اضافه کنید. sysadminبا حساب کاربری واقعی خود که در سرور وردپرس فرزند موجود است، جایگزین کنید.
     [Unit]
     Description=WordPress Files From Main Server to Child Servers
     After=network.target
    
     [Service]
     Type=simple
     ExecStart=/opt/wpsync.sh
     Restart=always
     User=sysadmin
     Group=www-data
    
     [Install]
     WantedBy=multi-user.target

    فایل را ذخیره و ببندید

    پیکربندی فوق اسکریپت Rsync را به عنوان یک سرویس سیستمی اجرا می‌کند و فایل‌ها را با استفاده از کاربر و گروه تنظیم شده منتقل می‌کند.

  19. دیمن systemd را مجدداً راه‌اندازی کنید
     $ sudo systemctl daemon-reload
  20. فعال کردن سرویس برای شروع در زمان بوت شدن
     $ sudo systemctl enable wpsync.service
  21. سرویس را شروع کنید
     $ sudo systemctl start wpsync.service
  22. وضعیت سرویس را مشاهده کنید و تأیید کنید که بدون هیچ خطایی به طور فعال در حال اجرا است
     $ sudo systemctl status wpsync.service

    خروجی:

     ● myscript.service - WordPress Files Transfer Service
          Loaded: loaded (/etc/systemd/system/wpsync.service; enabled; preset: enabled)
          Active: active (running) since Tue 2023-09-26 20:34:09 UTC; 4h 30min ago
        Main PID: 54092 (wpsync.sh)
           Tasks: 2 (limit: 1092)
          Memory: 2.2M
             CPU: 3min 55.143s
          CGroup: /system.slice/wpsync.service
                  ├─54092 /bin/bash /opt/WordPress-Sync/sync.sh
                  └─59570 sleep 10
    
     Sep 27 01:04:18 NEGARNOVIN-SERVER wpsync.sh[59566]: ./
     Sep 27 01:04:20 NEGARNOVIN-SERVER wpsync.sh[59566]: sent 81,187 bytes  received 376 bytes  14,829.64 bytes/sec
     Sep 27 01:04:20 NEGARNOVIN-SERVER wpsync.sh[59566]: total size is 69,832,356  speedup is 856.18

شما Rsync را برای همگام‌سازی فایل‌های webroot وردپرس خود از سرور اصلی به سرورهای فرزند تنظیم کرده‌اید. فرآیند همگام‌سازی را برای هر سرور فرزند تکرار کنید و تأیید کنید که هر سرور دارای یک رکورد Rsync در اسکریپت خودکار برای انتقال فایل‌های وردپرس است.

پیکربندی قوانین فایروال

به طور پیش‌فرض، فایروال ساده (UFW) در سرورهای نگارنوین موجود است. قوانین فایروال را پیکربندی کنید تا دسترسی قابل اعتماد به تمام پورت‌های لازم سرور، همانطور که در زیر توضیح داده شده است، فراهم شود.

  1. وضعیت فایروال را بررسی کنید
     $ sudo ufw status

    وقتی فعال باشد، جدول فایروال باید نمایش داده شود. وقتی غیرفعال باشد، پورت SSH را فعال کنید 22و فایروال را فعال کنید.

     $ sudo ufw allow 22/tcp && sudo ufw allow enable
  2. اجازه دسترسی به پورت MySQL 3306از سرورهای فرزند وردپرس مورد اعتماد
     $ sudo ufw allow from 192.0.2.100 to any port 3306
    
     $ sudo ufw allow from 192.0.2.101 to any port 3306
    
     $ sudo ufw allow from 192.0.2.102 to any port 3306
    
     $ sudo ufw allow from 192.0.2.103 to any port 3306
  3. پورت HTTP را 80از طریق فایروال مجاز کنید
     $ sudo ufw allow 80/tcp
  4. پورت HTTPS را مجاز کنید443
     $ sudo ufw allow 443/tcp
  5. برای ذخیره تغییرات، فایروال را مجدداً راه‌اندازی کنید
     $ sudo ufw reload

تولید و همگام‌سازی گواهینامه‌های SSL وردپرس

وردپرس برای مدیریت صحیح درخواست‌های HTTPS به یک گواهی SSL معتبر نیاز دارد. گواهی‌های SSL Let’s Encrypt را روی سرور اصلی ایجاد کنید و آنها را برای انتقال به سرورهای فرزند همگام‌سازی کنید تا از همان گواهی SSL استفاده کنند، همانطور که در زیر توضیح داده شده است.

  1. ابزار کلاینت رمزگذاری Certbot را نصب کنید
     $ sudo snap install certbot --classic
  2. یک گواهی SSL جدید ایجاد کنید. example.comنام دامنه واقعی خود را جایگزین کنید.
     $ sudo certbot --nginx -d www.example.com -d example.com --agree-tos

    /etc/letsencrypt/live/در صورت درخواست، آدرس ایمیل خود را وارد کنید تا یک گواهی SSL جدید در فایل پیکربندی Nginx شما مستقر شود و در دایرکتوری ذخیره شود.

  3. فهرست کردن فایل‌های موجود در /etc/letsencrypt/live/example.com/دایرکتوری
     $ sudo ls /etc/letsencrypt/live/example.com/

    خروجی:

     cert.pem  chain.pem  fullchain.pem  privkey.pem  README

    تأیید کنید که فایل‌های کلید خصوصی و کلید عمومی .pemدر دایرکتوری موجود هستند.

  4. مجوزهای خواندن را در /etc/letsencrypt/archiveدایرکتوری مجاز کنید
     $ sudo chmod 755 -R etc/letsencrypt/archive/

    دایرکتوری به دایرکتوری /etc/letsencrypt/liveارجاع می‌دهد archive، برای جلوگیری از هرگونه خطای انتقال فایل، فایل‌ها باید قابل خواندن باشند.

  5. اسکریپت همگام‌سازی Rsync را ویرایش کنید
     $ sudo nano /opt/wpsync.sh
  6. دستورالعمل زیر را while {قبل از sleepدستورالعمل ، درون حلقه اضافه کنید
     rsync -av --copy-links /etc/letsencrypt/live/example.com/ 192.0.2.100:/etc/nginx/ssl/

    فایل را ذخیره و ببندید

    پیکربندی فوق تغییرات در گواهی SSL را بررسی می‌کند و .pemفایل‌های به‌روز شده را به دایرکتوری SSL سرور وردپرس فرزند منتقل می‌کند.

سرورهای فرزند وردپرس را راه‌اندازی کنید

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

  1. به دایرکتوری webroot وردپرس بروید
     $ cd /var/www/example.com
  2. فهرست بلندی از فایل‌ها تهیه کنید و مطمئن شوید که همه فایل‌های وردپرس در دایرکتوری ریشه وب موجود هستند.
     $ ls -l

    خروجی:

     drwxr-xr-x  9 sysadmin www-data    4096 Aug 29 14:14 wp-admin
     -rw-r--r--  1 sysadmin www-data     351 Feb  6  2020 wp-blog-header.php
     -rw-r--r--  1 sysadmin www-data    2323 Jun 14 14:11 wp-comments-post.php
     -rw-r--r--  1 sysadmin www-data    3300 Sep 26 12:22 wp-config.php
     -rw-r--r--  1 sysadmin www-data    3013 Feb 23  2023 wp-config-sample.php
     drwxr-xr-x  5 sysadmin www-data    4096 Sep 26 15:03 wp-content
     -rw-r--r--  1 sysadmin www-data    5638 May 30 18:48 wp-cron.php
     -rw-r--r--  1 sysadmin www-data  830057 Sep 27 00:44 wpdb.sql
     drwxr-xr-x 27 sysadmin www-data   12288 Aug 29 14:14 wp-includes
     -rw-r--r--  1 sysadmin www-data    2502 Nov 26  2022 wp-links-opml.php

    تأیید کنید که فایل پشتیبان پایگاه داده MySQL شما wpdb.sqlنیز در دایرکتوری موجود است

  3. مشاهده wp-config.phpفایل
     $ cat wp-config.php

    نام کاربری و رمز عبور پایگاه داده وردپرس را یادداشت کنید:

     /** Database username */
     define( 'DB_USER', 'wpuser' );
    
     /** Database password */
     define( 'DB_PASSWORD', 'strong-password' );
  4. وارد کنسول پایگاه داده MySQL شوید
     $ sudo mysql
  5. پایگاه داده وردپرس را دوباره ایجاد کنید
     > CREATE DATABASE wordpressdb;
  6. کاربر پایگاه داده وردپرس را با همان رمز عبور ذکر شده در wp-config.phpفایل ایجاد کنید. به عنوان مثالwpuser
     > CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strong-password';
  7. به کاربر دسترسی کامل به پایگاه داده وردپرس بدهید
     > GRANT ALL PRIVILEGES ON wordpressdb.* TO wpuser@localhost;
  8. به‌روزرسانی امتیازات MySQL
     > FLUSH PRIVILEGES;
  9. کنسول MySQL را ببندید
     > EXIT
  10. پایگاه داده MySQL خود را از wpdb.sqlفایل به پایگاه داده وردپرس بازیابی کنید
     $ sudo mysql wordpressdb < wpdb.sql
  11. پس از موفقیت، فایل پشتیبان MySQL را از فهرست فایل‌های وردپرس خود حذف کنید.
     $ sudo rm /var/www/example.com/wpdb.sql
  12. به دایرکتوری فایل‌های پیکربندی MySQL بروید
     $ cd /etc/mysql/
  13. my.cnfفایل پیکربندی اصلی را ویرایش کنید
     $ sudo nano my.cnf
  14. تنظیمات زیر را به [mysqld]بخش اضافه کنید
     [mysqld]
    
     server-id = 2
     log_bin = /var/log/mysql/mysql-bin.log
     binlog-do-db = wordpressdb
     expire_logs_days = 5

    فایل را ذخیره و ببندید

    پیکربندی فوق، شناسه‌ی تکرار فرزند را 2متفاوت از شناسه‌ی سرور پایگاه داده‌ی اصلی تنظیم می‌کند 1. هر سرور پایگاه داده در فرآیند تکرار باید از یک مقدار شناسه‌ی منحصر به فرد استفاده کند. wordpressdbاین پایگاه داده‌ی تکرار مقصد است و گزارش‌های باینری هر 5روز منقضی می‌شوند.

  15. ایجاد دایرکتوری لاگ‌های MySQL
     $ sudo mkdir -p /var/log/mysql/
  16. به کاربر MySQL امتیازات کامل برای دسترسی به دایرکتوری اعطا کنید
     $ sudo chown -R mysql:mysql /var/log/mysql
  17. سرور پایگاه داده MySQL را مجدداً راه اندازی کنید
     $ sudo systemctl restart mysqld
  18. دسترسی به کنسول MySQL
     $ sudo mysql
  19. دستورات SQL زیر را اجرا کنید. mysql-bin.00و را 766با جزئیات واقعی فایل و موقعیت مکانی که قبلاً در سرور اصلی پایگاه داده MySQL ایجاد کرده‌اید، جایگزین کنید.
     > CHANGE MASTER TO
        MASTER_HOST = '192.0.2.1',
        MASTER_USER = 'wpnew',
        MASTER_PASSWORD = 'strong-password',
        MASTER_LOG_FILE = 'mysql-bin.000002',
        MASTER_LOG_POS = 76625;

    192.0.2.1با آدرس IP اصلی سرور وردپرس خود جایگزین کنید

  20. شروع فرآیند تکثیر
     > SLAVE SLAVE;
  21. وضعیت تکثیر را تأیید کنید
     > SHOW SLAVE STATUS\G;

    خروجی:

     *************************** 1. row ***************************
                     Slave_IO_State: Waiting for master to send event
                        Master_Host: 192.0.2.1
                        Master_User: wpreplica
                        Master_Port: 3306
                      Connect_Retry: 60
                    Master_Log_File: mysql-bin.000002
                Read_Master_Log_Pos: 76950
                     Relay_Log_File: mysqld-relay-bin.000003
                      Relay_Log_Pos: 555
              Relay_Master_Log_File: mysql-bin.000002
                   Slave_IO_Running: Yes
                  Slave_SQL_Running: Yes

    تأیید کنید که Slave_IO_Stateفیلد یک Waiting for master to send eventاعلان برمی‌گرداند. اگر وضعیت … است connecting، فیلد را مشاهده کنید Last_SQL_Error:و خطای نمایش داده شده را برطرف کنید تا تکثیر رکوردهای پایگاه داده از سرور اصلی وردپرس شروع شود.

  22. به دایرکتوری فایل‌های پیکربندی Nginx بروید
     $ cd /etc/nginx/
  23. فهرست کردن فایل‌های موجود در دایرکتوری SSL و تأیید وجود تمام گواهینامه‌های SSL وردپرس
     $ ls -l ssl/

    خروجی:

     cert.pem  chain.pem  fullchain.pem  privkey.pem  README
  24. غیرفعال کردن فایل پیکربندی پیش‌فرض هاست Nginx
     $ sudo rm sites-enabled/default
  25. یک فایل پیکربندی میزبان Nginx جدید در sites-availableدایرکتوری ایجاد کنید
     $ sudo nano sites-available/example.com
  26. تنظیمات زیر را به فایل اضافه کنید. example.comنام دامنه واقعی خود را جایگزین کنید.
     server {
         server_name example.com;
    
         root /var/www/example.com/;
         index index.php;
    
         location / {
            try_files $uri $uri/ /index.php?$args;    
         }
    
         location ~ \.php$ {
             include snippets/fastcgi-php.conf;
             fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;  # Edit to your PHP version viewable with $ php -v
         }
    
         location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
             expires max;
             log_not_found off;
         }
    
         access_log /var/log/nginx/example.access.log;
         error_log /var/log/nginx/example.error.log;
    
         error_page 404 /404.html;
         error_page 500 502 503 504 /50x.html;
         location = /50x.html {
             root /usr/share/nginx/html;
         }
    
         location ~ /\.ht {
             deny all;
         }
    
         listen 443 ssl; 
         ssl_certificate /etc/nginx/ssl/fullchain.pem; 
         ssl_certificate_key /etc/nginx/ssl/privkey.pem; 
     }
    
     server {
         if ($host = example.com) {
             return 301 https://$host$request_uri;
         } 
    
         listen 80;
         server_name example.com;
         return 404; 
     }

    فایل را ذخیره و ببندید

    پیکربندی فوق به دایرکتوری webroot وردپرس اشاره می‌کند و اتصالات HTTPS را با استفاده از گواهینامه‌های SSL شما در این /etc/nginx/ssl/دایرکتوری می‌پذیرد.

  27. فعال کردن فایل پیکربندی وردپرس
     $ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  28. پیکربندی Nginx را برای خطاها آزمایش کنید
     $ sudo nginx -t
  29. برای ذخیره تغییرات، Nginx را مجدداً راه‌اندازی کنید
     $ sudo systemctl restart nginx
  30. وضعیت فایروال UFW را بررسی کنید
     $ sudo ufw status

    خروجی:

     Status: active
    
     To                         Action      From
     --                         ------      ----
     22/tcp                     ALLOW       Anywhere                         
     22/tcp (v6)                ALLOW       Anywhere (v6)                 
  31. پورت HTTP را 80از طریق فایروال مجاز کنید
     $ sudo ufw allow 80/tcp
  32. پورت HTTPS را 443از طریق فایروال مجاز کنید
     $ sudo ufw allow 443/tcp
  33. برای ذخیره قوانین جدید، فایروال را مجدداً راه‌اندازی کنید
     $ sudo ufw reload

فرآیند فوق را روی تمام سرورهای وردپرس تکرار کنید تا آخرین فایل‌ها و پایگاه داده MySQL از سرور اصلی همگام‌سازی شوند.

پیکربندی رکوردهای دامنه

برای فعال کردن GeoDNS در سایت وردپرس خود، چندین رکورد دامنه A را پیکربندی کنید تا کاربران را در مکان‌های مختلف به نزدیکترین سرور هدایت کنید. در این بخش، از ClouDNS برای پیکربندی رکوردهای دامنه خود همانطور که در مراحل زیر توضیح داده شده است، استفاده کنید.

  • به حساب ClouDNS خود دسترسی پیدا کنید
  • در بخش DNS Zones ، روی کلیک کنید تا رکوردهای نام دامنه وردپرس مورد نظر شما باز شود.

  • روی DNS Records کلیک کنید
  • در صفحه سوابق، به A بروید
  • تأیید کنید که یک رکورد میزبان با برچسب مکان Default در لیست موجود است و به سرور اصلی وردپرس شما اشاره می‌کند.
  • روی + Add new record در بخش A کلیک کنید
    فعال سازی GeoDNS در وردپرس
  • در پنجره‌ی بازشو « Add New Record» ، روی منوی کشویی « Location » کلیک کنید و اولین مکان مورد نظر خود را انتخاب کنید. برای مثالEurope
  • به فیلد Points to: بروید و آدرس IP سرور وردپرس را در مکان مورد نظر خود وارد کنید. به عنوان مثال 192.0.2.104برای سرور نگارنوین پاریس (فرانسه).

  • برای اعمال رکورد دامنه A جدید خود، روی Saveکلیک کنید.

فرآیند فوق را برای هر رکورد دامنه A تکرار کنید و تأیید کنید که هر آدرس IP سرور نگارنوین به مکان هدف صحیح اشاره می‌کند.

تست

برای تأیید اینکه پیکربندی GeoDNS وردپرس شما به خوبی کار می‌کند، تأیید کنید که تکثیر پایگاه داده MySQL کار می‌کند و دامنه شما بسته به موقعیت مکانی کاربر، همانطور که در زیر توضیح داده شده است، آدرس IP متفاوتی را برمی‌گرداند.

  1. برای آزمایش فرآیند تکثیر پایگاه داده، به کنسول MySQL در سرور اصلی وردپرس دسترسی پیدا کنید.
     $ sudo mysql
  2. به پایگاه داده وردپرس بروید
     > use wordpressdb;
  3. یک جدول جدید testبا ستون‌های زیر ایجاد کنید
     > CREATE TABLE test (
          id INT AUTO_INCREMENT PRIMARY KEY,
          fname VARCHAR(50),
          lname VARCHAR(50)
      );
  4. کنسول MySQL را ببندید
     > EXIT
  5. به کنسول MySQL در هر یک از سرورهای فرزند پیکربندی‌شده وردپرس دسترسی پیدا کنید
     $ sudo mysql
  6. به پایگاه داده وردپرس بروید
     > use wordpressdb;
  7. نمایش جداول و تأیید testوجود جدول جدید
     > show tables;

    خروجی:

     +-----------------------+
     | Tables_in_wordpressdb |
     +-----------------------+
     | test                  |
     | wp_commentmeta        |
     | wp_comments           |
     | wp_links              |
     | wp_options            |
     | wp_postmeta           |
     | wp_posts              |

    در صورت موفقیت، سرور اصلی وردپرس تمام تغییرات پایگاه داده MySQL را به صورت بلادرنگ در پایگاه داده سرور فرزند تکرار می‌کند.

  8. در یک مرورگر وب مانند کروم، از سایت وردپرس خود بازدید کنید و تأیید کنید که به درستی بارگیری می‌شود.
     https://example.com
  9. VPN را روی دستگاه خود فعال کنید و دوباره به سایت وردپرس دسترسی پیدا کنید تا یک مکان جدید شبیه‌سازی شود. تأیید کنید که بدون هیچ خطایی به درستی نمایش داده می‌شود.
     https://example.com
  10. با استفاده از یک بررسی‌کننده انتشار DNS مانند WhatsMyDNS ، رکوردهای نام دامنه خود را جستجو کنید تا آدرس IP فعال در هر مکان را مشاهده کنید.

برای آزمایش بیشتر پیکربندی GeoDNS وردپرس خود، از یک ابزار تست سرعت سایت با مکان‌های مختلف استفاده کنید تا تفاوت‌های عملکرد بین سایت وردپرس خود را تشخیص دهید. نزدیکترین سرور به مکان کاربر، درخواست کاربر را مدیریت می‌کند که عملکرد سایت شما را بدون هیچ تغییری در عملکرد در تمام مناطق بهبود می‌بخشد.

عیب‌یابی

خطای HTTP ۵۰۰

هنگام استقرار رکوردهای پیکربندی Nginx در سرورهای فرزند وردپرس، وب سرور به دلیل پیکربندی نادرست در فایل‌های شما، خطای بحرانی ۵۰۰ را نمایش می‌دهد . خطا را طبق مراحل زیر برطرف کنید.

  1. برای مشاهده منبع خطا، گزارش خطای میزبان وردپرس را مشاهده کنید.
     $ sudo cat /var/log/nginx/example.error.log

    خروجی:

     1", upstream: "fastcgi://unix:/var/run/php/php8.2-fpm.sock:", host: "example.com.com"
     2023/09/26 19:14:27 [error] 55491#55491: *41 FastCGI sent in stderr: "PHP message: PHP Warning:  require(/var/www/example.com/wp-includes/version.php): Failed to open stream: Permission denied in /var/www/example.com/wp-settings.php on line 33; PHP message: PHP Fatal error:  Uncaught Error: Failed opening required '/var/www/example.com/wp-includes/version.php' (include_path='.:/usr/share/php') in /var/www/example.com/wp-settings.php:33
     Stack trace:
     #0 /var/www/example.com/wp-config.php(96): require_once()
     #1 /var/www/example.com/wp-load.php(50): require_once('...')
     #2 /var/www/example.com/wp-blog-header.php(13): require_once('...')
     #3 /var/www/example.com/index.php(17): require('...')
  2. بسته به منبع خطای نمایش داده شده در گزارش، مراحل رفع آن را اعمال کنید. به عنوان مثال، برای رفع خطای مجوز نمایش داده شده در خروجی بالا، فایل‌های موجود در دایرکتوری webroot وردپرس را حذف کنید تا فایل‌های جدید با مجوزهای صحیح از سرور اصلی وردپرس پس از ۲۰ ثانیه همگام‌سازی شوند.
     $ sudo rm -r /var/www/example.com/*
  3. بعد از ۲۰ ثانیه فایل‌های موجود در دایرکتوری را فهرست کنید و تأیید کنید که همه فایل‌های وردپرس با www-dataمجوزهای گروه صحیح در دسترس هستند.
     $ ls -l /var/www/example.com/
  4. برای اعمال تغییرات، Nginx را مجدداً راه‌اندازی کنید
     $ sudo systemctl restart nginx
  5. سایت وردپرس خود را در محل مورد نظر دوباره بررسی کنید و مطمئن شوید که خطا دوباره ظاهر نمی‌شود.
     https://example.com

خطا: ریدایرکت‌های زیادی وجود دارد

  1. مشاهده نسخه PHP نصب شده
     $ php -v

    خروجی:

     PHP 8.2.7 (cli) (built: Jun  9 2023 19:37:27) (NTS)
     Copyright (c) The PHP Group
     Zend Engine v4.2.7, Copyright (c) Zend Technologies
  2. تأیید کنید که نسخه PHP-FPM نصب شده فعال و در حال اجرا است
     $ sudo systemctl status php8.2-fpm
  3. فایل پیکربندی میزبان وردپرس خود را مشاهده کنید
     $ cat /etc/nginx/sites-enabled/example.com
  4. تأیید کنید که fastcgi_passدستورالعمل به نسخه صحیح PHP-FPM اشاره می‌کند
     fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;

    اگر نسخه PHP-FPM ارجاع شده اشتباه است، فایل را ویرایش کنید

     $ sudo nano /etc/nginx/sites-enabled/example.com

    factcgi_passدستورالعمل را به نسخه صحیح تغییر دهید

  5. برای اعمال تغییرات پیکربندی، Nginx را مجدداً راه‌اندازی کنید
     $ sudo systemctl restart nginx

پایگاه داده فرزند وردپرس تغییرات پایگاه داده را تشخیص نمی‌دهد

  1. دسترسی به کنسول پایگاه داده MySQL فرزند
     $ sudo mysql
  2. وضعیت تکثیر پایگاه داده Child را مشاهده کنید و خطای برگشتی را در Last_SQL_Error:ستون مشاهده کنید
     > SHOW SLAVE STATUS\G;

    خروجی:

             Seconds_Behind_Master: NULL
     Master_SSL_Verify_Server_Cert: No
                     Last_IO_Errno: 0
                     Last_IO_Error: 
                    Last_SQL_Errno: 1146
                    Last_SQL_Error: Error executing row event: 'Table 'wordpressdb.wp_options' doesn't exist'
       Replicate_Ignore_Server_Ids: 
                  Master_Server_Id: 1
                    Master_SSL_Crl: 
                Master_SSL_Crlpath: 
                        Using_Gtid: No
                       Gtid_IO_Pos: 
           Replicate_Do_Domain_Ids: 
       Replicate_Ignore_Domain_Ids: 

    برای مثال:

    • Error executing row event: 'Table 'wordpressdb.wp_options' doesn't exist'تأیید کنید که پایگاه داده وردپرس را به سرور فرزند وارد کرده‌اید. در غیر این صورت، به دایرکتوری webroot وردپرس بروید.
        $ cd /var/www/example.com/

      تأیید کنید که .sqlفایل پشتیبان پایگاه داده در دسترس است

        $ ls *.sql

      پایگاه داده وردپرس را به پایگاه داده MySQL فرزند خود وارد کنید

        $ sudo mysql wordpressdb < wpdb.sql
    • Last_SQL_Error: Could not execute Write_rows_v1 event on table wordpressdb.پایگاه داده MySQL قادر به نوشتن برخی تغییرات نیست که می‌تواند ناشی از خرابی داده‌ها باشد. خطا را حذف کنید و فرآیند تکثیر را با اجرای دستور SQL زیر مجدداً راه‌اندازی کنید.
    • Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60 maximum-retries: 1000003306تأیید کنید که آدرس سرور فرزند از طریق فایروال سرور اصلی وردپرس به پورت MySQL دسترسی دارد.
        $ sudo ufw allow from 192.0.2.100 to any port 3306

      تأیید کنید که رمز عبور کاربر را در پیکربندی پایگاه داده فرزند خود صحیح وارد کرده‌اید wpreplica. فرآیند تکثیر پایگاه داده را در سرور فرزند متوقف کنید.

        > STOP SLAVE

      جزئیات پایگاه داده اصلی را با استفاده از دستور SQL زیر تنظیم کنید

        CHANGE MASTER TO
          MASTER_HOST = '192.0.2.1',
          MASTER_USER = 'wpreplica',
          MASTER_PASSWORD = 'strong-password',
          MASTER_LOG_FILE = 'mysql-bin.000003',
          MASTER_LOG_POS = 76625;

      تأیید کنید که اطلاعات کاربر و رمز عبور پایگاه داده صحیح است. 192.0.2.1برای تکرار تغییرات پایگاه داده، آدرس سرور اصلی را جایگزین کنید.

      دوباره عملیات کپی کردن پایگاه داده وردپرس را شروع کنید

        > START SLAVE
    • Could not execute Write_rows_v1 event error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000003, end_log_posدسترسی به پایگاه داده سرور اصلی وردپرس
        $ sudo mysql

      وضعیت تکثیر پایگاه داده را مشاهده کنید و به فایل و موقعیت آن توجه کنید

        > SHOW MASTER STATUS;

      خروجی:

        +------------------+----------+--------------+------------------+
        | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
        +------------------+----------+--------------+------------------+
        | mysql-bin.000003 |   235367 | wordpressdb  |                  |
        +------------------+----------+--------------+------------------+
        1 row in set (0.000 sec)

      از کنسول MySQL خارج شوید

        > EXIT

      به سرور پایگاه داده فرزند خود دسترسی پیدا کنید

        $ sudo mysql

      توقف تکثیر پایگاه داده

        > STOP SLAVE

      اطلاعات تکثیر را با فیلدهای صحیح MASTER_LOG_FILEو MASTER_LOG_POSهمانطور که در سرور پایگاه داده اصلی نمایش داده می‌شود، تغییر دهید.

        CHANGE MASTER TO
          MASTER_HOST = '192.0.2.1',
          MASTER_USER = 'wpreplica',
          MASTER_PASSWORD = 'strong-password',
          MASTER_LOG_FILE = 'mysql-bin.000003',
          MASTER_LOG_POS = 235367;

      شروع فرآیند تکثیر پایگاه داده

        > START SLAVE

      وضعیت تکثیر را مشاهده کنید و تأیید کنید که وضعیت به … تغییر می‌کند.Waiting for master to send event

        > SHOW SLAVE STATUS\G;

      خروجی:

        *************************** 1. row ***************************
                        Slave_IO_State: Waiting for master to send event
                           Master_Host: 192.0.2.1
                           Master_User: wpreplica
                           Master_Port: 3306
                         Connect_Retry: 60
                       Master_Log_File: mysql-bin.000003

نتیجه‌گیری

شما با استفاده از چندین مکان نگارنوین، GeoDNS را برای کار با سایت وردپرس خود پیاده‌سازی کرده‌اید. این امر هنگام رسیدگی به درخواست‌های کاربران از مناطق مختلف در سراسر جهان مهم است. به جای اینکه یک سرور واحد درخواست‌ها را دریافت کند، چندین سرور افزونگی را فعال می‌کنند که باعث بهبود استفاده از منابع شما هنگام رسیدگی به درخواست‌های کاربران وردپرس می‌شود.

🖼️ تصاویر

🏷️ کلمات کلیدی

فعال سازی GeoDNS در وردپرس، وردپرس را با GeoDNS پیشرفته کنید!، مقدمه، پیش‌نیازها، خرید فعال سازی GeoDNS در وردپرس، قیمت فعال سازی GeoDNS در وردپرس، بهترین فعال سازی GeoDNS در وردپرس

🧩 JSON-LD

{"@context":"https://schema.org","@type":"WebPage","headline":"فعال سازی GeoDNS در وردپرس","url":"https://negarnovin.com/docs/bring-wordpress-to-the-edge-with-geodns/","datePublished":"2025-09-11T08:34:07+03:30","dateModified":"2025-09-11T08:34:07+03:30","author":{"@type":"Person","name":"نگارنوین"},"publisher":{"@type":"Organization","name":"نگارنوین"},"inLanguage":"fa-IR","description":"Bring WordPress to the Edge with GeoDNS فعال سازی GeoDNS در وردپرس با استفاده از GeoDNS، عملکرد وردپرس را در سطح جهانی بهینه کنید"}