د NGINX واحد او اوبنټو سره د ورڈپریس نصب کول اتومات کول

د NGINX واحد او اوبنټو سره د ورڈپریس نصب کول اتومات کول

د ورڈپریس نصبولو څرنګوالي په اړه ډیری ټیوټوریلونه شتون لري ، د "ورډپریس انسټال" لپاره د ګوګل لټون به شاوخوا نیم ملیون پایلې رامینځته کړي. په هرصورت، په حقیقت کې، د دوی په منځ کې ډیر لږ ښه لارښودونه شتون لري، د کوم له مخې تاسو کولی شئ ورڈپریس او لاندې عملیاتي سیسټم نصب او تنظیم کړئ ترڅو دوی د اوږدې مودې لپاره د ملاتړ وړ وي. شاید سم تنظیمات خورا په ځانګړي اړتیاو پورې تړلي وي، یا دا د دې حقیقت له امله وي چې مفصل وضاحت د مقالې لوستل ستونزمن کوي.

پدې مقاله کې ، موږ به هڅه وکړو چې د بش سکریپټ چمتو کولو سره د بش سکریپټ چمتو کولو سره په اوبنټو کې په اتوماتيک ډول ورڈپریس نصب کړو ، په بیله بیا د هغې له لارې تګ ، تشریح کړو چې هره برخه څه کوي ، او همدارنګه هغه جوړجاړی چې موږ یې په پراختیا کې کړې. . که تاسو پرمختللی کاروونکي یاست، تاسو کولی شئ د مقالې متن پریږدئ او بس سکریپټ واخلئ ستاسو په چاپیریال کې د ترمیم او کارولو لپاره. د سکریپټ محصول د لیټ انکریپټ ملاتړ سره دودیز ورڈپریس نصب دی ، په NGINX واحد کې روان دی او د تولید کارولو لپاره مناسب دی.

د NGINX واحد په کارولو سره د ورڈپریس پلي کولو لپاره پرمختللی جوړښت په کې تشریح شوی پخوانۍ مقاله، اوس به موږ نور هغه شیان هم تنظیم کړو چې هلته پوښل شوي ندي (لکه څنګه چې په ډیری نورو ټیوټوریلونو کې):

  • WordPress CLI
  • راځئ چې کوډ کړئ او د TLSSSL سندونه
  • د سندونو اتوماتیک تجدید
  • د NGINX کیشینګ
  • د NGINX کمپریشن
  • HTTPS او HTTP/2 ملاتړ
  • پروسه اتومات

مقاله به په یو سرور کې نصب کول تشریح کړي، کوم چې به په ورته وخت کې د جامد پروسس کولو سرور، د پی ایچ پی پروسس کولو سرور، او ډیټابیس کوربه کړي. یو نصب چې د ډیری مجازی کوربه او خدماتو ملاتړ کوي د راتلونکي لپاره احتمالي موضوع ده. که تاسو غواړئ موږ د هغه څه په اړه ولیکئ چې پدې مقالو کې ندي ، په نظرونو کې ولیکئ.

اړتیاو

  • د کانټینر سرور (LXC او یا LXD)، یو مجازی ماشین، یا د اوسپنې منظم سرور چې لږترلږه 512MB RAM او اوبنټو 18.04 یا نوي نصب شوي.
  • د انټرنیټ لاسرسي وړ بندرونه 80 او 443
  • د ډومین نوم د دې سرور عامه IP پتې سره تړاو لري
  • د روټ لاسرسی (sudo).

د معمارۍ عمومي کتنه

جوړښت ورته دی لکه څنګه چې بیان شوی مخکې, درې درجې ویب غوښتنلیک. دا د PHP سکریپټونو څخه جوړ دی چې د PHP انجن او جامد فایلونو باندې چلیږي چې د ویب سرور لخوا پروسس کیږي.

د NGINX واحد او اوبنټو سره د ورڈپریس نصب کول اتومات کول

عمومي اصول

  • په سکریپټ کې د ترتیب کولو ډیری کمانډونه د ایډیمپوټینسي شرایطو په صورت کې پوښل شوي: سکریپټ څو ځله پرمخ وړل کیدی شي پرته له دې چې د تنظیماتو بدلولو خطر شتون ولري چې دمخه شتون لري.
  • سکریپټ هڅه کوي د ذخیره کولو څخه سافټویر نصب کړي، نو تاسو کولی شئ د سیسټم تازه معلومات په یوه کمانډ کې پلي کړئ (apt upgrade د اوبنټو لپاره).
  • کمانډونه هڅه کوي معلومه کړي چې دوی په کانټینر کې روان دي نو دوی کولی شي خپل تنظیمات د مطابق مطابق بدل کړي.
  • په ترتیباتو کې د پیل کولو لپاره د تار پروسې شمیر تنظیم کولو لپاره ، سکریپټ هڅه کوي په کانټینرونو ، مجازی ماشینونو ، او هارډویر سرورونو کې د کار کولو لپاره د اتوماتیک تنظیماتو اټکل وکړي.
  • کله چې د ترتیباتو تشریح کول، موږ تل د ټولو لومړی د اتوماتیک په اړه فکر کوو، کوم چې موږ هیله لرو، د کوډ په توګه ستاسو د زیربنا جوړولو بنسټ جوړ شي.
  • ټول حکمونه د کارونکي په توګه پرمخ وړل کیږي د ريښي، ځکه چې دوی د سیسټم لومړني تنظیمات بدلوي ، مګر مستقیم ورڈپریس د منظم کارونکي په توګه پرمخ ځي.

د چاپیریال تغیرات تنظیم کول

د سکریپټ چلولو دمخه لاندې چاپیریال تغیرات تنظیم کړئ:

  • WORDPRESS_DB_PASSWORD - د ورڈپریس ډیټابیس پاسورډ
  • WORDPRESS_ADMIN_USER - د ورڈپریس مدیر نوم
  • WORDPRESS_ADMIN_PASSWORD - د ورڈپریس اډمین پاسورډ
  • WORDPRESS_ADMIN_EMAIL - د ورڈپریس مدیر بریښنالیک
  • WORDPRESS_URL د ورڈپریس سایټ بشپړ URL دی، په پیل کې https://.
  • LETS_ENCRYPT_STAGING - د ډیفالټ له مخې خالي ، مګر 1 ته د ارزښت په ټاکلو سره ، تاسو به د لیټس انکریټ سټینګ سرورونه وکاروئ ، کوم چې ستاسو د تنظیماتو ازموینې پرمهال د مکرر سندونو غوښتنه کولو لپاره اړین دي ، که نه نو اجازه راکړئ کوډ کړئ ممکن ستاسو د ip ادرس د لوی شمیر غوښتنو له امله په لنډمهاله توګه بند کړي. .

سکریپټ ګوري چې دا د ورڈپریس پورې اړوند متغیرونه ټاکل شوي او بهر کیږي که نه.
د سکریپټ لینونه 572-576 ارزښت چیک کړئ LETS_ENCRYPT_STAGING.

د ترلاسه شوي چاپیریال متغیرونو تنظیم کول

د 55-61 لینونو سکریپټ لاندې چاپیریال متغیرونه ټاکي، یا هم ځینې سخت کوډ شوي ارزښت ته یا په مخکینۍ برخه کې ټاکل شوي متغیرونو څخه ترلاسه شوي ارزښت په کارولو سره:

  • DEBIAN_FRONTEND="noninteractive" - غوښتنلیکونو ته وايي چې دوی په سکریپټ کې روان دي او دا چې د کارونکي متقابل عمل امکان شتون نلري.
  • WORDPRESS_CLI_VERSION="2.4.0" د WordPress CLI غوښتنلیک نسخه ده.
  • WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c" - د ورڈپریس CLI 2.4.0 د اجرا وړ فایل چیکسم (نسخه په متغیر کې مشخص شوی WORDPRESS_CLI_VERSION). په لاین 162 کې سکریپټ دا ارزښت کاروي ترڅو وګوري چې سمه ورڈپریس CLI فایل ډاونلوډ شوی.
  • UPLOAD_MAX_FILESIZE="16M" - د فایل اعظمي اندازه چې په WordPress کې اپلوډ کیدی شي. دا ترتیب په څو ځایونو کې کارول کیږي، نو دا په یو ځای کې تنظیم کول اسانه دي.
  • TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)" - د سیسټم کوربه نوم، د WORDPRESS_URL متغیر څخه اخیستل شوی. د لیټ انکریپټ او همدارنګه د داخلي ورڈپریس تصدیق څخه د مناسب TLS/SSL سندونو ترلاسه کولو لپاره کارول کیږي.
  • NGINX_CONF_DIR="/etc/nginx" - د اصلي فایل په ګډون د NGINX تنظیماتو سره لارښود ته لاره nginx.conf.
  • CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" - د ورډپریس سایټ لپاره د لیټس کوډ کولو سندونو ته لاره ، له متغیر څخه ترلاسه شوي TLS_HOSTNAME.

د ورڈپریس سرور ته د کوربه نوم ټاکل

سکریپټ د سایټ د ډومین نوم سره سمون لپاره د سرور کوربه نوم ټاکي. دا اړینه نه ده، مګر دا د SMTP له لارې بهر ته لیږلو لپاره خورا اسانه دی کله چې یو واحد سرور ترتیب کړئ، لکه څنګه چې د سکریپټ لخوا ترتیب شوی.

سکریپټ کوډ

# Change the hostname to be the same as the WordPress hostname
if [ ! "$(hostname)" == "${TLS_HOSTNAME}" ]; then
  echo " Changing hostname to ${TLS_HOSTNAME}"
  hostnamectl set-hostname "${TLS_HOSTNAME}"
fi

/etc/hosts ته د کوربه نوم اضافه کول

بشپړ کول WP-Cron د دورې دندو چلولو لپاره کارول کیږي، ورڈپریس ته اړتیا لري چې د HTTP له لارې ځان ته لاسرسی ولري. د ډاډ ترلاسه کولو لپاره چې WP-Cron په ټولو چاپیریالونو کې په سمه توګه کار کوي، سکریپټ فایل ته یو کرښه اضافه کوي / etc / hostنو ورڈپریس کولی شي د لوپ بیک انٹرفیس له لارې ځان ته لاسرسی ومومي:

سکریپټ کوډ

# Add the hostname to /etc/hosts
if [ "$(grep -m1 "${TLS_HOSTNAME}" /etc/hosts)" = "" ]; then
  echo " Adding hostname ${TLS_HOSTNAME} to /etc/hosts so that WordPress can ping itself"
  printf "::1 %sn127.0.0.1 %sn" "${TLS_HOSTNAME}" "${TLS_HOSTNAME}" >> /etc/hosts
fi

د راتلونکو ګامونو لپاره اړین وسایل نصب کول

د سکریپټ پاتې برخه ځینې برنامو ته اړتیا لري او ګومان کوي ​​چې ذخیره تازه ده. موږ د ذخیره کولو لیست تازه کوو، وروسته لدې چې موږ اړین وسایل نصب کړو:

سکریپټ کوډ

# Make sure tools needed for install are present
echo " Installing prerequisite tools"
apt-get -qq update
apt-get -qq install -y 
  bc 
  ca-certificates 
  coreutils 
  curl 
  gnupg2 
  lsb-release

د NGINX واحد او NGINX ذخیره اضافه کول

سکریپټ د NGINX واحد او خلاص سرچینه NGINX د رسمي NGINX ذخیره کولو څخه نصبوي ترڅو ډاډ ترلاسه کړي چې نسخې د وروستي امنیت پیچونو او بګ فکسونو سره کارول کیږي.

سکریپټ د NGINX واحد ذخیره او بیا د NGINX ذخیره اضافه کوي، د ذخیره کولو کلیدي او ترتیب فایلونه اضافه کوي aptد انټرنیټ له لارې ذخیره کولو ته د لاسرسي تعریف کول.

د NGINX واحد او NGINX اصلي نصب په راتلونکې برخه کې پیښیږي. موږ دمخه ذخیره اضافه کوو نو موږ اړتیا نلرو څو ځله میټاډاټا تازه کړو ، کوم چې نصب کول ګړندي کوي.

سکریپټ کوډ

# Install the NGINX Unit repository
if [ ! -f /etc/apt/sources.list.d/unit.list ]; then
  echo " Installing NGINX Unit repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" > /etc/apt/sources.list.d/unit.list
fi

# Install the NGINX repository
if [ ! -f /etc/apt/sources.list.d/nginx.list ]; then
  echo " Installing NGINX repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
fi

د NGINX، NGINX واحد، PHP ماریاDB، Certbot (راځئ چې کوډ کړئ) او د دوی انحصار نصب کړئ

یوځل چې ټول ذخیره اضافه شي ، میټاډاټا تازه کړئ او غوښتنلیکونه نصب کړئ. د سکریپټ لخوا نصب شوي کڅوړې کې د PHP توسیع هم شامل دي کله چې WordPress.org چلول وړاندیز شوي

سکریپټ کوډ

echo " Updating repository metadata"
apt-get -qq update

# Install PHP with dependencies and NGINX Unit
echo " Installing PHP, NGINX Unit, NGINX, Certbot, and MariaDB"
apt-get -qq install -y --no-install-recommends 
  certbot 
  python3-certbot-nginx 
  php-cli 
  php-common 
  php-bcmath 
  php-curl 
  php-gd 
  php-imagick 
  php-mbstring 
  php-mysql 
  php-opcache 
  php-xml 
  php-zip 
  ghostscript 
  nginx 
  unit 
  unit-php 
  mariadb-server

د NGINX واحد او WordPress سره کارولو لپاره د پی ایچ پی تنظیم کول

سکریپټ په لارښود کې د ترتیباتو فایل رامینځته کوي موندل. دا د PHP اپلوډونو لپاره اعظمي اندازه ټاکي، د پی ایچ پی غلطی تولید STDERR ته بدلوي نو دوی به د NGINX واحد لاګ ته ولیکل شي، او د NGINX واحد بیا پیل کړي.

سکریپټ کوډ

# Find the major and minor PHP version so that we can write to its conf.d directory
PHP_MAJOR_MINOR_VERSION="$(php -v | head -n1 | cut -d' ' -f2 | cut -d'.' -f1,2)"

if [ ! -f "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" ]; then
  echo " Configuring PHP for use with NGINX Unit and WordPress"
  # Add PHP configuration overrides
  cat > "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" << EOM
; Set a larger maximum upload size so that WordPress can handle
; bigger media files.
upload_max_filesize=${UPLOAD_MAX_FILESIZE}
post_max_size=${UPLOAD_MAX_FILESIZE}
; Write error log to STDERR so that error messages show up in the NGINX Unit log
error_log=/dev/stderr
EOM
fi

# Restart NGINX Unit because we have reconfigured PHP
echo " Restarting NGINX Unit"
service unit restart

د ورډپریس لپاره د ماریا ډی بی ډیټابیس تنظیمات مشخص کول

موږ د MySQL په اړه ماریا ډی بی غوره کړی ځکه چې دا د ټولنې ډیر فعالیت لري او احتمال هم لري د ډیفالټ لخوا غوره فعالیت چمتو کوي (شاید، دلته هرڅه ساده دي: د MySQL نصبولو لپاره، تاسو اړتیا لرئ یو بل ذخیره اضافه کړئ، نږدې ژباړن).

سکریپټ یو نوی ډیټابیس رامینځته کوي او د لوپ بیک انٹرفیس له لارې ورڈپریس ته لاسرسي لپاره اسناد رامینځته کوي:

سکریپټ کوډ

# Set up the WordPress database
echo " Configuring MariaDB for WordPress"
mysqladmin create wordpress || echo "Ignoring above error because database may already exist"
mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"localhost" IDENTIFIED BY "$WORDPRESS_DB_PASSWORD"; FLUSH PRIVILEGES;"

د ورڈپریس CLI برنامه نصب کول

پدې مرحله کې ، سکریپټ برنامه نصبوي WP CLI. د دې سره ، تاسو کولی شئ پرته له دې چې په لاسي ډول فایلونه ایډیټ کړئ ، ډیټابیس تازه کړئ ، یا د کنټرول پینل ته ننوځئ د ورډپریس تنظیمات نصب او اداره کړئ. دا د موضوعاتو او اضافو نصبولو او ورڈپریس تازه کولو لپاره هم کارول کیدی شي.

سکریپټ کوډ

if [ ! -f /usr/local/bin/wp ]; then
  # Install the WordPress CLI
  echo " Installing the WordPress CLI tool"
  curl --retry 6 -Ls "https://github.com/wp-cli/wp-cli/releases/download/v${WORDPRESS_CLI_VERSION}/wp-cli-${WORDPRESS_CLI_VERSION}.phar" > /usr/local/bin/wp
  echo "$WORDPRESS_CLI_MD5 /usr/local/bin/wp" | md5sum -c -
  chmod +x /usr/local/bin/wp
fi

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

سکریپټ په لارښود کې د ورډپریس وروستۍ نسخه نصبوي /var/www/wordpressاو تنظیمات هم بدلوي:

  • د ډیټابیس اتصال د TCP پر ځای د یونیکس ډومین ساکټ څخه کار کوي ترڅو د TCP ترافیک کم کړي.
  • ورڈپریس یو مخکینۍ اضافه کوي https:// URL ته که چیرې پیرودونکي د HTTPS له لارې NGINX سره وصل وي، او همدارنګه د لیرې کوربه نوم (لکه څنګه چې د NGINX لخوا چمتو شوی) PHP ته لیږي. موږ د دې تنظیم کولو لپاره د کوډ یوه ټوټه کاروو.
  • ورڈپریس د ننوتلو لپاره HTTPS ته اړتیا لري
  • د ډیفالټ URL جوړښت د سرچینو پراساس دی
  • د ورڈپریس لارښود لپاره د فایل سیسټم کې سم اجازې تنظیموي.

سکریپټ کوډ

if [ ! -d /var/www/wordpress ]; then
  # Create WordPress directories
  mkdir -p /var/www/wordpress
  chown -R www-data:www-data /var/www

  # Download WordPress using the WordPress CLI
  echo " Installing WordPress"
  su -s /bin/sh -c 'wp --path=/var/www/wordpress core download' www-data

  WP_CONFIG_CREATE_CMD="wp --path=/var/www/wordpress config create --extra-php --dbname=wordpress --dbuser=wordpress --dbhost="localhost:/var/run/mysqld/mysqld.sock" --dbpass="${WORDPRESS_DB_PASSWORD}""

  # This snippet is injected into the wp-config.php file when it is created;
  # it informs WordPress that we are behind a reverse proxy and as such
  # allows it to generate links using HTTPS
  cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
EOM

  # Create WordPress configuration
  su -s /bin/sh -p -c "cat /tmp/wp_forwarded_for.php | ${WP_CONFIG_CREATE_CMD}" www-data
  rm /tmp/wp_forwarded_for.php
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress config set 'FORCE_SSL_ADMIN' 'true'" www-data

  # Install WordPress
  WP_SITE_INSTALL_CMD="wp --path=/var/www/wordpress core install --url="${WORDPRESS_URL}" --title="${WORDPRESS_SITE_TITLE}" --admin_user="${WORDPRESS_ADMIN_USER}" --admin_password="${WORDPRESS_ADMIN_PASSWORD}" --admin_email="${WORDPRESS_ADMIN_EMAIL}" --skip-email"
  su -s /bin/sh -p -c "${WP_SITE_INSTALL_CMD}" www-data

  # Set permalink structure to a sensible default that isn't in the UI
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data

  # Remove sample file because it is cruft and could be a security problem
  rm /var/www/wordpress/wp-config-sample.php

  # Ensure that WordPress permissions are correct
  find /var/www/wordpress -type d -exec chmod g+s {} ;
  chmod g+w /var/www/wordpress/wp-content
  chmod -R g+w /var/www/wordpress/wp-content/themes
  chmod -R g+w /var/www/wordpress/wp-content/plugins
fi

د NGINX واحد تنظیم کول

سکریپټ د PHP چلولو او د ورڈپریس لارې پروسس کولو لپاره د NGINX واحد تنظیموي، د PHP پروسې نوم ځای جلا کوي او د فعالیت ترتیبات غوره کوي. دلته د لیدلو لپاره درې ځانګړتیاوې شتون لري:

  • د نوم ځایونو لپاره ملاتړ د شرایطو له مخې ټاکل کیږي، د دې چک کولو پر بنسټ چې سکریپټ په کانتینر کې روان دی. دا اړینه ده ځکه چې ډیری کانټینر تنظیمات د کانټینرونو د نیست شوي لانچ ملاتړ نه کوي.
  • که د نوم ځای لپاره ملاتړ شتون ولري، د نوم ځای غیر فعال کړئ شبکه. دا د دې لپاره دی چې WordPress ته اجازه ورکړي چې دواړه پای ټکي سره وصل شي او په ورته وخت کې په ویب کې شتون ولري.
  • د پروسې اعظمي شمیر په لاندې ډول تعریف شوی: (د MariaDB او NGINX Uniy چلولو لپاره موجود حافظه) / (په پی ایچ پی + 5 کې د رام حد)
    دا ارزښت د NGINX واحد ترتیباتو کې ټاکل شوی.

دا ارزښت دا هم په ګوته کوي چې تل لږترلږه دوه د پی ایچ پی پروسې پرمخ ځي، کوم چې مهم دي ځکه چې ورڈپریس ځان ته ډیری غیر متناسب غوښتنې کوي، او د اضافي پروسو پرته، د مثال په توګه د WP-Cron چلول به مات شي. تاسو ممکن د خپلو محلي ترتیباتو پراساس دا محدودیتونه زیات یا کم کړئ، ځکه چې دلته رامینځته شوي ترتیبات محافظه کار دي. په ډیری تولید سیسټمونو کې، ترتیبات د 10 او 100 ترمنځ دي.

سکریپټ کوډ

if [ "${container:-unknown}" != "lxc" ] && [ "$(grep -m1 -a container=lxc /proc/1/environ | tr -d '')" == "" ]; then
  NAMESPACES='"namespaces": {
        "cgroup": true,
        "credential": true,
        "mount": true,
        "network": false,
        "pid": true,
        "uname": true
    }'
else
  NAMESPACES='"namespaces": {}'
fi

PHP_MEM_LIMIT="$(grep 'memory_limit' /etc/php/7.4/embed/php.ini | tr -d ' ' | cut -f2 -d= | numfmt --from=iec)"
AVAIL_MEM="$(grep MemAvailable /proc/meminfo | tr -d ' kB' | cut -f2 -d: | numfmt --from-unit=K)"
MAX_PHP_PROCESSES="$(echo "${AVAIL_MEM}/${PHP_MEM_LIMIT}+5" | bc)"
echo " Calculated the maximum number of PHP processes as ${MAX_PHP_PROCESSES}. You may want to tune this value due to variations in your configuration. It is not unusual to see values between 10-100 in production configurations."

echo " Configuring NGINX Unit to use PHP and WordPress"
cat > /tmp/wordpress.json << EOM
{
  "settings": {
    "http": {
      "header_read_timeout": 30,
      "body_read_timeout": 30,
      "send_timeout": 30,
      "idle_timeout": 180,
      "max_body_size": $(numfmt --from=iec ${UPLOAD_MAX_FILESIZE})
    }
  },
  "listeners": {
    "127.0.0.1:8080": {
      "pass": "routes/wordpress"
    }
  },
  "routes": {
    "wordpress": [
      {
        "match": {
          "uri": [
            "*.php",
            "*.php/*",
            "/wp-admin/"
          ]
        },
        "action": {
          "pass": "applications/wordpress/direct"
        }
      },
      {
        "action": {
          "share": "/var/www/wordpress",
          "fallback": {
            "pass": "applications/wordpress/index"
          }
        }
      }
    ]
  },
  "applications": {
    "wordpress": {
      "type": "php",
      "user": "www-data",
      "group": "www-data",
      "processes": {
        "max": ${MAX_PHP_PROCESSES},
        "spare": 1
      },
      "isolation": {
        ${NAMESPACES}
      },
      "targets": {
        "direct": {
          "root": "/var/www/wordpress/"
        },
        "index": {
          "root": "/var/www/wordpress/",
          "script": "index.php"
        }
      }
    }
  }
}
EOM

curl -X PUT --data-binary @/tmp/wordpress.json --unix-socket /run/control.unit.sock http://localhost/config

د NGINX تنظیم کول

د بنسټیز NGINX ترتیبات ترتیب کول

سکریپټ د NGINX کیچ لپاره لارښود رامینځته کوي او بیا د اصلي ترتیب کولو فایل رامینځته کوي nginx.conf. د سمبالونکي پروسو شمیر او د اپلوډ لپاره د اعظمي فایل اندازې ترتیب ته پام وکړئ. دلته یو کرښه هم شتون لري چې پکې د کمپریشن ترتیبات فایل شامل دي چې په راتلونکې برخه کې تعریف شوي، د کیچ کولو ترتیبات تعقیبوي.

سکریپټ کوډ

# Make directory for NGINX cache
mkdir -p /var/cache/nginx/proxy

echo " Configuring NGINX"
cat > ${NGINX_CONF_DIR}/nginx.conf << EOM
user nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       ${NGINX_CONF_DIR}/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    client_max_body_size ${UPLOAD_MAX_FILESIZE};
    keepalive_timeout  65;
    # gzip settings
    include ${NGINX_CONF_DIR}/gzip_compression.conf;
    # Cache settings
    proxy_cache_path /var/cache/nginx/proxy
        levels=1:2
        keys_zone=wp_cache:10m
        max_size=10g
        inactive=60m
        use_temp_path=off;
    include ${NGINX_CONF_DIR}/conf.d/*.conf;
}
EOM

د NGINX کمپریشن تنظیم کول

مراجعینو ته د لیږلو دمخه په الوتنه کې د مینځپانګې فشارول د سایټ فعالیت ښه کولو عالي لاره ده ، مګر یوازې هغه وخت چې کمپریشن په سمه توګه تنظیم شوی وي. د سکریپټ دا برخه د ترتیباتو پراساس ده له دې ځایه.

سکریپټ کوډ

cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Credit: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Compression                                                        |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Enable gzip compression.
# Default: off
gzip on;
# Compression level (1-9).
# 5 is a perfect compromise between size and CPU usage, offering about 75%
# reduction for most ASCII files (almost identical to level 9).
# Default: 1
gzip_comp_level 6;
# Don't compress anything that's already small and unlikely to shrink much if at
# all (the default is 20 bytes, which is bad as that usually leads to larger
# files after gzipping).
# Default: 20
gzip_min_length 256;
# Compress data even for clients that are connecting to us via proxies,
# identified by the "Via" header (required for CloudFront).
# Default: off
gzip_proxied any;
# Tell proxies to cache both the gzipped and regular version of a resource
# whenever the client's Accept-Encoding capabilities header varies;
# Avoids the issue where a non-gzip capable client (which is extremely rare
# today) would display gibberish if their proxy gave them the gzipped version.
# Default: off
gzip_vary on;
# Compress all output labeled with one of the following MIME-types.
# `text/html` is always compressed by gzip module.
# Default: text/html
gzip_types
  application/atom+xml
  application/geo+json
  application/javascript
  application/x-javascript
  application/json
  application/ld+json
  application/manifest+json
  application/rdf+xml
  application/rss+xml
  application/vnd.ms-fontobject
  application/wasm
  application/x-web-app-manifest+json
  application/xhtml+xml
  application/xml
  font/eot
  font/otf
  font/ttf
  image/bmp
  image/svg+xml
  text/cache-manifest
  text/calendar
  text/css
  text/javascript
  text/markdown
  text/plain
  text/xml
  text/vcard
  text/vnd.rim.location.xloc
  text/vtt
  text/x-component
  text/x-cross-domain-policy;
EOM

د WordPress لپاره د NGINX تنظیم کول

بیا، سکریپټ د ورڈپریس لپاره د ترتیب کولو فایل جوړوي default.conf په کتالګو کې موندل. دا دلته ترتیب شوی دی:

  • د لیټس انکریپټ څخه د Certbot له لارې ترلاسه شوي د TLS سندونو فعالول (د دې تنظیم کول به په راتلونکي برخه کې وي)
  • د لیټ انکریپټ وړاندیزونو پراساس د TLS امنیت تنظیمات تنظیم کول
  • د ډیفالټ لخوا د 1 ساعت لپاره د کیچ کولو سکیپ غوښتنې فعال کړئ
  • د لاسرسي لاګنګ غیر فعال کړئ ، په بیله بیا د غلطو ننوتلو که چیرې فایل ونه موندل شو ، د دوه عام غوښتل شوي فایلونو لپاره: favicon.ico او robots.txt
  • پټو فایلونو او ځینې فایلونو ته د لاسرسي مخه ونیسئ .ppد غیرقانوني لاسرسي یا غیر ارادي پیل مخه نیولو لپاره
  • د جامد او فونټ فایلونو لپاره د لاسرسي لاګنګ غیر فعال کړئ
  • د سرلیک ترتیب لاسرسي-کنټرول-اجازه-اصلي د فونټ فایلونو لپاره
  • د index.php او نورو احصایو لپاره روټینګ اضافه کول.

سکریپټ کوډ

cat > ${NGINX_CONF_DIR}/conf.d/default.conf << EOM
upstream unit_php_upstream {
    server 127.0.0.1:8080;
    keepalive 32;
}
server {
    listen 80;
    listen [::]:80;
    # ACME-challenge used by Certbot for Let's Encrypt
    location ^~ /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }
    location / {
      return 301 https://${TLS_HOSTNAME}$request_uri;
    }
}
server {
    listen      443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ${TLS_HOSTNAME};
    root        /var/www/wordpress/;
    # Let's Encrypt configuration
    ssl_certificate         ${CERT_DIR}/fullchain.pem;
    ssl_certificate_key     ${CERT_DIR}/privkey.pem;
    ssl_trusted_certificate ${CERT_DIR}/chain.pem;
    include ${NGINX_CONF_DIR}/options-ssl-nginx.conf;
    ssl_dhparam ${NGINX_CONF_DIR}/ssl-dhparams.pem;
    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    # Proxy caching
    proxy_cache wp_cache;
    proxy_cache_valid 200 302 1h;
    proxy_cache_valid 404 1m;
    proxy_cache_revalidate on;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd,
    # .DS_Store (Mac)
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban)
    location ~ /. {
        deny all;
    }
    # Deny access to any files with a .php extension in the uploads directory;
    # works in subdirectory installs and also in multi-site network.
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban).
    location ~* /(?:uploads|files)/.*.php$ {
        deny all;
    }
    # WordPress: deny access to wp-content, wp-includes PHP files
    location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
        deny all;
    }
    # Deny public access to wp-config.php
    location ~* wp-config.php {
        deny all;
    }
    # Do not log access for static assets, media
    location ~* .(?:css(.map)?|js(.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        access_log off;
    }
    location ~* .(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
        add_header Access-Control-Allow-Origin "*";
        access_log off;
    }
    location / {
        try_files $uri @index_php;
    }
    location @index_php {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass       http://unit_php_upstream;
    }
    location ~* .php$ {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        try_files        $uri =404;
        proxy_pass       http://unit_php_upstream;
    }
}
EOM

د لیټز کوډ کولو او اتوماتیک نوي کولو څخه د سندونو لپاره د سرټبوټ تنظیم کول

سند د بریښنایی فرنټیر فاونډیشن (EFF) څخه وړیا وسیله ده چې تاسو ته اجازه درکوي د لیټس انکریپټ څخه د TLS سندونه ترلاسه او په اوتومات ډول نوي کړئ. سکریپټ په NGINX کې د Let's Encrypt څخه د سندونو پروسس کولو لپاره د Certbot تنظیم کولو لپاره لاندې کار کوي:

  • NGINX ودروي
  • د وړاندیز شوي TLS ترتیبات ډاونلوډ کړئ
  • د سایټ لپاره سندونو ترلاسه کولو لپاره Certbot چلوي
  • د سندونو کارولو لپاره NGINX بیا پیل کوي
  • Certbot ترتیبوي چې هره ورځ د سهار په 3:24 بجو چلوي ترڅو وګوري چې ایا سندونه نوي کولو ته اړتیا لري، او که اړتیا وي، نوي سندونه ډاونلوډ کړئ او NGINX بیا پیل کړئ.

سکریپټ کوډ

echo " Stopping NGINX in order to set up Let's Encrypt"
service nginx stop

mkdir -p /var/www/certbot
chown www-data:www-data /var/www/certbot
chmod g+s /var/www/certbot

if [ ! -f ${NGINX_CONF_DIR}/options-ssl-nginx.conf ]; then
  echo " Downloading recommended TLS parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:36:07 GMT" 
    -o "${NGINX_CONF_DIR}/options-ssl-nginx.conf" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf" 
    || echo "Couldn't download latest options-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Downloading recommended TLS DH parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:49:18 GMT" 
    -o "${NGINX_CONF_DIR}/ssl-dhparams.pem" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem" 
    || echo "Couldn't download latest ssl-dhparams.pem"
fi

# If tls_certs_init.sh hasn't been run before, remove the self-signed certs
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " Removing self-signed certificates"
  rm -rf "${CERT_DIR}"
fi

if [ "" = "${LETS_ENCRYPT_STAGING:-}" ] || [ "0" = "${LETS_ENCRYPT_STAGING}" ]; then
  CERTBOT_STAGING_FLAG=""
else
  CERTBOT_STAGING_FLAG="--staging"
fi

if [ ! -f "${CERT_DIR}/fullchain.pem" ]; then
  echo " Generating certificates with Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Starting NGINX in order to use new configuration"
service nginx start

# Write crontab for periodic Let's Encrypt cert renewal
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " Adding certbot to crontab for automatic Let's Encrypt renewal"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

ستاسو د سایټ اضافي تخصیص

موږ پورته خبرې وکړې چې څنګه زموږ سکریپټ د NGINX او NGINX واحد تنظیموي ترڅو د تولید لپاره چمتو شوي سایټ ته خدمت وکړي چې د TLSSSL فعال شوي. تاسو کولی شئ، ستاسو د اړتیاوو پر بنسټ، په راتلونکي کې اضافه کړئ:

  • ملاتړ بروټليد HTTPS په اړه د الوتنې پر مهال کمپریشن ښه شوی
  • د ModSec امنیت с د ورڈپریس لپاره قواعدستاسو په سایټ کې د اتوماتیک بریدونو مخنیوي لپاره
  • شاتړ د ورڈپریس لپاره چې تاسو سره مناسب وي
  • ساتنه له لارې اپارمور (په اوبنټو کې)
  • پوسټ فکس یا msmtp نو ورڈپریس کولی شي بریښنالیک واستوي
  • ستاسو سایټ چیک کول نو تاسو پوهیږئ چې دا څومره ترافیک اداره کولی شي

د حتی غوره سایټ فعالیت لپاره، موږ د لوړولو وړاندیز کوو NGINX Plusزموږ سوداګریز، د تصدۍ درجې محصول د خلاصې سرچینې NGINX پر بنسټ. د دې پیرودونکي به په متحرک ډول بار شوي بروټلي ماډل ترلاسه کړي ، او همدارنګه (د اضافي فیس لپاره) د NGINX ModSecurity WAF. موږ هم وړاندیز کوو د NGINX ایپ محافظت، د NGINX پلس لپاره د WAF ماډل د F5 څخه د صنعت مخکښ امنیت ټیکنالوژۍ پراساس.

NB د لوړ بار شوي سایټ ملاتړ لپاره، تاسو کولی شئ د متخصصینو سره اړیکه ونیسئ ساوتریج. موږ به د هر ډول بار لاندې ستاسو د ویب پا orې یا خدمت ګړندي او د باور وړ عملیات تضمین کړو.

سرچینه: www.habr.com