← شروع آموزش

WIUNIX ACADEMY

آموزش نصب وردپرس با Nginx و کش FastCGI در اوبونتو و دبیان

صفحهٔ 3 از 8؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu 26.10بررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من4 مقدار قابل‌تغییر
09

قدم بعدی

کنترل نحو و مجوزها

این کنترل‌ها محتوای خصوصی تنظیمات را چاپ نمی‌کنند.

Bash

ترمینال Bash سرور وردپرس، حساب مدیر دارای sudo.

(
set -euo pipefail
sudo php8.5 -l /var/www/wordpress/wp-config.php
if sudo grep -q REPLACE_ /var/www/wordpress/wp-config.php; then
  echo 'Replace all configuration placeholders first' >&2; exit 1
fi
sudo -u wp-php test -r /var/www/wordpress/wp-config.php
sudo -u wp-php test ! -w /var/www/wordpress/wp-config.php
sudo -u wp-php test -w /var/www/wordpress/wp-content/uploads
)
از کجا بدانم درست انجام شد؟

PHP تنظیمات را می‌خواند اما نمی‌نویسد؛ uploads قابل‌نوشتن است و جایگاه خالی باقی نمانده.

آماده‌سازی پوشه و سیاست کش

پوشه در اختیار worker است. تنظیم پیش‌فرض توزیع، conf.d را داخل http وارد می‌کند؛ آزمون کامل این فرض را بررسی می‌کند. map را داخل server نگذارید.

Bash

ترمینال Bash سرور وردپرس، حساب مدیر دارای sudo.

sudo install -d -o www-data -g www-data -m 0700 /var/cache/nginx/wordpress
sudo nano /etc/nginx/conf.d/wordpress-cache.conf
از کجا بدانم درست انجام شد؟

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

10

قدم بعدی

کش فقط برای صفحات عمومیِ مشخص

تنها صفحهٔ نخست و sample-page مجازند. تمام مسیرهای دیگر، از جمله ورود و مدیریت، پیش‌نمایش، API، cron، خرید و حساب، خوراک، جست‌وجو و برگهٔ رمزدار خارج از فهرست‌اند. هر کوکی، Authorization، پارامتر، روش غیر از GET یا مسیر percent-encoded هم خواندن و هم نوشتن کش را متوقف می‌کند. کوکی ورود، رمز نوشته، دیدگاه و نشست ناشناختهٔ افزونه نیز پوشش داده می‌شود. پیش از خصوصی یا رمزدارکردن صفحه، آن را از فهرست بردارید و نسل کلید را عوض کنید. محتوای وابسته به مکان، دستگاه یا کاربر را بدون بررسی جداگانهٔ کلید و هدرها اضافه نکنید. حتی UTM عمداً bypass می‌شود؛ نادیده‌گرفتن آن نیازمند بررسی برنامه است.

Nginx · /etc/nginx/conf.d/wordpress-cache.conf

محتوای فایل؛ در فایل مشخص‌شده ذخیره شود، نه در پوسته.

# http context: included by the stock Debian/Ubuntu nginx.conf
fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=WORDPRESS:20m
    max_size=512m inactive=10m use_temp_path=off;
map $request_method $wp_skip_method { default 1; GET 0; }
# Every cookie is private until separately assessed, including WordPress,
# wp-postpass, comment_author, WooCommerce and plugin session cookies.
map $http_cookie $wp_skip_cookie { default 1; "" 0; }
map $http_authorization $wp_skip_auth { default 1; "" 0; }
map $args $wp_skip_args { default 1; "" 0; }
# Opt in ONLY known public HTML URLs. Everything else stays dynamic.
map $request_uri $wp_skip_route {
    default 1;
    "/" 0;
    "/sample-page/" 0;
}
# Defense in depth for the standard private/dynamic endpoints.
map $request_uri $wp_private_path {
    default 0;
    ~*^/(wp-admin|wp-login\.php|wp-cron\.php|wp-json|xmlrpc\.php|cart|checkout|my-account|account)(/|\?|$) 1;
    ~*% 1;
}
از کجا بدانم درست انجام شد؟

سقف کش ۵۱۲ و ناحیهٔ کلید ۲۰ مگابایت تعریف شده؛ کش سایت هنوز خاموش است.

آماده‌سازی HTTP فقط برای چالش

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

Bash

ترمینال Bash سرور وردپرس، حساب مدیر دارای sudo.

sudo install -d -o root -g root -m 0755 /var/lib/letsencrypt/.well-known/acme-challenge
sudo nano /etc/nginx/sites-available/wordpress
از کجا بدانم درست انجام شد؟

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

11

قدم بعدی

نوشتن سایت موقت HTTP

دامنه را عوض کنید. در HTTP فقط چالش ACME ارائه می‌شود و وردپرس در دسترس عمومی نیست.

Nginx · /etc/nginx/sites-available/wordpress

محتوای فایل؛ در فایل مشخص‌شده ذخیره شود، نه در پوسته.

server {
    listen 80;
    listen [::]:80;
    server_name blog.example.com;
    location ^~ /.well-known/acme-challenge/ {
        root /var/lib/letsencrypt;
        default_type text/plain;
        try_files $uri =404;
    }
    location / { return 404; }
}
از کجا بدانم درست انجام شد؟

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

12

قدم بعدی

فعال‌سازی و آزمون چالش

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

Bash

ترمینال Bash سرور وردپرس، حساب مدیر دارای sudo.

(
set -euo pipefail
sudo test ! -e /etc/nginx/sites-enabled/wordpress
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress
sudo nginx -t
sudo systemctl reload nginx
printf 'acme-path-check\n' | sudo tee /var/lib/letsencrypt/.well-known/acme-challenge/academy-check >/dev/null
curl -fsS --connect-timeout 5 --max-time 15 http://blog.example.com/.well-known/acme-challenge/academy-check | grep -Fx acme-path-check
)
از کجا بدانم درست انجام شد؟

اعتبارسنجی موفق است و بدنه دقیقاً acme-path-check است.

همهٔ آموزش‌های آکادمی ↗