WIUNIX ACADEMY
آموزش نصب وردپرس با Nginx و کش FastCGI در اوبونتو و دبیان
صفحهٔ 3 از 8؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من4 مقدار قابلتغییر
قدم بعدی
کنترل نحو و مجوزها
این کنترلها محتوای خصوصی تنظیمات را چاپ نمیکنند.
ترمینال 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 سرور وردپرس، حساب مدیر دارای 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
بررسی موفق است؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
قدم بعدی
کش فقط برای صفحات عمومیِ مشخص
تنها صفحهٔ نخست و sample-page مجازند. تمام مسیرهای دیگر، از جمله ورود و مدیریت، پیشنمایش، API، cron، خرید و حساب، خوراک، جستوجو و برگهٔ رمزدار خارج از فهرستاند. هر کوکی، Authorization، پارامتر، روش غیر از GET یا مسیر percent-encoded هم خواندن و هم نوشتن کش را متوقف میکند. کوکی ورود، رمز نوشته، دیدگاه و نشست ناشناختهٔ افزونه نیز پوشش داده میشود. پیش از خصوصی یا رمزدارکردن صفحه، آن را از فهرست بردارید و نسل کلید را عوض کنید. محتوای وابسته به مکان، دستگاه یا کاربر را بدون بررسی جداگانهٔ کلید و هدرها اضافه نکنید. حتی UTM عمداً bypass میشود؛ نادیدهگرفتن آن نیازمند بررسی برنامه است.
محتوای فایل؛ در فایل مشخصشده ذخیره شود، نه در پوسته.
# 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 سرور وردپرس، حساب مدیر دارای sudo.
sudo install -d -o root -g root -m 0755 /var/lib/letsencrypt/.well-known/acme-challenge
sudo nano /etc/nginx/sites-available/wordpress
بررسی موفق است؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
قدم بعدی
نوشتن سایت موقت HTTP
دامنه را عوض کنید. در HTTP فقط چالش ACME ارائه میشود و وردپرس در دسترس عمومی نیست.
محتوای فایل؛ در فایل مشخصشده ذخیره شود، نه در پوسته.
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; }
}
بررسی موفق است؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
قدم بعدی
فعالسازی و آزمون چالش
اگر لینک سایت از قبل وجود دارد، علت را بررسی کنید. reload فقط پس از اعتبارسنجی انجام میشود. پاسخ چالش را از بیرون سرور هم ببینید؛ دسترسی محلی برای اثبات دسترسی CA کافی نیست.
ترمینال 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 است.