WordPress-ийг хэрхэн суулгах талаар олон заавар байдаг бөгөөд Google-ээс "WordPress суулгах" гэж хайвал хагас сая орчим үр дүн гарах болно. Гэсэн хэдий ч үнэн хэрэгтээ тэдний дунд маш цөөхөн сайн гарын авлага байдаг бөгөөд үүний дагуу та WordPress болон үндсэн үйлдлийн системийг суулгаж, тохируулах боломжтой бөгөөд ингэснээр тэдгээрийг удаан хугацаанд дэмжих боломжтой болно. Магадгүй зөв тохиргоо нь тодорхой хэрэгцээ шаардлагаас ихээхэн хамаардаг, эсвэл энэ нь нарийвчилсан тайлбар нь нийтлэлийг уншихад хэцүү байдагтай холбоотой юм.
Энэ нийтлэлд бид WordPress-ийг Ubuntu дээр автоматаар суулгах bash скриптээр хангаж, хэсэг бүр нь юу хийдэг, мөн үүнийг хөгжүүлэх явцад хийсэн буултуудыг тайлбарлах замаар хоёр ертөнцийн шилдэгүүдийг нэгтгэхийг хичээх болно. . Хэрэв та ахисан түвшний хэрэглэгч бол нийтлэлийн текстийг алгасаж болно
NGINX нэгжийг ашиглан WordPress-ийг ашиглахад зориулсан боловсруулсан архитектурыг доор тайлбарласан болно
- WordPress CLI
- Шифрлэцгээе болон TLSSSL гэрчилгээ
- Сертификатыг автоматаар сунгах
- NGINX кэш
- NGINX шахалт
- HTTPS болон HTTP/2 дэмжлэг
- Үйл явцын автоматжуулалт
Нийтлэлд статик боловсруулалтын сервер, PHP боловсруулах сервер, мэдээллийн баазыг нэгэн зэрэг байрлуулах нэг сервер дээр суулгах талаар тайлбарлах болно. Олон тооны виртуал хост болон үйлчилгээг дэмждэг суулгац нь ирээдүйн боломжит сэдэв юм. Хэрэв та эдгээр нийтлэлд байхгүй зүйлийн талаар бичихийг хүсвэл сэтгэгдэл дээр бичээрэй.
шаардлага
- Серверийн контейнер (
LXC буюуLXD ), виртуал машин эсвэл дор хаяж 512MB RAM болон Ubuntu 18.04 буюу түүнээс дээш хувилбарыг суулгасан энгийн төмөр сервер. - Интернетэд нэвтрэх боломжтой портууд 80 ба 443
- Энэ серверийн нийтийн IP хаягтай холбоотой домайн нэр
- Root хандалт (sudo).
Архитектурын тойм
Архитектур нь тайлбарласантай ижил байна
Ерөнхий зарчим
- Скрипт дэх олон тохиргооны командууд нь идэвхгүй болох нөхцөл бүрдсэн тохиолдолд ороосон байдаг: скриптийг аль хэдийн суулгасан тохиргоог өөрчлөх эрсдэлгүйгээр олон удаа ажиллуулж болно.
- Скрипт нь хадгалах сангаас программ хангамж суулгахыг оролддог тул та системийн шинэчлэлтийг нэг тушаалаар ашиглах боломжтой (
apt upgrade
Ubuntu-д зориулсан). - Командууд нь саванд ажиллаж байгааг илрүүлэхийг оролддог бөгөөд ингэснээр тэд тохиргоогоо өөрчлөх боломжтой.
- Тохиргоонд эхлэх урсгалын процессын тоог тохируулахын тулд скрипт нь контейнер, виртуал машин, техник хангамжийн серверт ажиллах автомат тохиргоог таахыг оролддог.
- Тохиргоог тайлбарлахдаа бид үргэлж автоматжуулалтын талаар хамгийн түрүүнд боддог бөгөөд энэ нь өөрийн дэд бүтцийг код болгон бий болгох үндэс суурь болно гэж найдаж байна.
- Бүх командыг хэрэглэгчээр ажиллуулдаг эх, учир нь тэд үндсэн системийн тохиргоог өөрчилдөг боловч WordPress шууд энгийн хэрэглэгчээр ажилладаг.
Орчны хувьсагчдыг тохируулах
Скриптийг ажиллуулахын өмнө дараах орчны хувьсагчдыг тохируулна уу:
WORDPRESS_DB_PASSWORD
- WordPress мэдээллийн сангийн нууц үгWORDPRESS_ADMIN_USER
- WordPress админ нэрWORDPRESS_ADMIN_PASSWORD
- WordPress админ нууц үгWORDPRESS_ADMIN_EMAIL
- WordPress админ имэйлWORDPRESS_URL
Энэ нь WordPress сайтын бүрэн URL-аас эхэлдэгhttps://
.LETS_ENCRYPT_STAGING
- анхдагчаар хоосон боловч утгыг 1 болгосноор та тохиргоогоо шалгахдаа гэрчилгээг байнга шаардахад зайлшгүй шаардлагатай Let's Encrypt үе шатны серверүүдийг ашиглах болно, эс тэгвээс Let's Encrypt нь олон тооны хүсэлтийн улмаас таны IP хаягийг түр хааж болзошгүй. .
Скрипт нь эдгээр WordPress-тэй холбоотой хувьсагчдыг тохируулсан эсэхийг шалгаж, тохируулаагүй бол гарах болно.
Скриптийн мөр 572-576 утгыг шалгана уу LETS_ENCRYPT_STAGING
.
Үүсмэл орчны хувьсагчдыг тохируулах
55-61-р мөрөнд байгаа скрипт нь дараах орчны хувьсагчдыг хатуу кодлогдсон утгаар эсвэл өмнөх хэсэгт тохируулсан хувьсагчдаас олж авсан утгыг ашиглан тохируулна:
DEBIAN_FRONTEND="noninteractive"
- Аппликейшнүүдэд скриптээр ажиллаж байгаа бөгөөд хэрэглэгчтэй харилцах ямар ч боломж байхгүй гэдгийг хэлдэг.WORDPRESS_CLI_VERSION="2.4.0"
WordPress CLI програмын хувилбар юм.WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c"
— WordPress CLI 2.4.0 гүйцэтгэгдэх файлын хяналтын нийлбэр (хувилбарыг хувьсагчаар зааж өгсөн болно)WORDPRESS_CLI_VERSION
). 162-р мөрөнд байгаа скрипт нь зөв WordPress CLI файлыг татаж авсан эсэхийг шалгахын тулд энэ утгыг ашигладаг.UPLOAD_MAX_FILESIZE="16M"
- WordPress дээр байршуулж болох хамгийн дээд файлын хэмжээ. Энэ тохиргоог хэд хэдэн газар ашигладаг тул нэг дор тохируулах нь илүү хялбар байдаг.TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)"
- WORDPRESS_URL хувьсагчаас авсан системийн хостын нэр. Let's Encrypt-ээс зохих TLS/SSL сертификат авах, мөн WordPress дотоод баталгаажуулалтад ашигладаг.NGINX_CONF_DIR="/etc/nginx"
- үндсэн файлыг оруулаад NGINX тохиргоо бүхий лавлах руу очих замnginx.conf
.CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}"
— хувьсагчаас авсан WordPress сайтын Let's Encrypt сертификат руу очих замTLS_HOSTNAME
.
WordPress серверт хостын нэрийг оноож байна
Скрипт нь серверийн хост нэрийг сайтын домайн нэртэй тааруулахаар тохируулдаг. Энэ нь шаардлагагүй, гэхдээ скриптээр тохируулагдсаны дагуу нэг серверийг тохируулахдаа 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-д хостын нэрийг нэмж байна
Нэмэлт
скрипт код
# 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 Unit болон нээлттэй эхийн NGINX-ийг албан ёсны NGINX репозитороос суулгаж, хамгийн сүүлийн үеийн аюулгүй байдлын засварууд болон алдааны засваруудтай хувилбаруудыг ашиглаж байгаа эсэхийг шалгадаг.
Скрипт нь NGINX Unit репозиторыг, дараа нь NGINX репозиторыг нэмж, хадгалах сангийн түлхүүр болон тохиргооны файлуудыг нэмнэ. apt
, Интернэтээр дамжуулан агуулах руу нэвтрэх эрхийг тодорхойлох.
NGINX Unit болон 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 Unit, PHP MariaDB, Certbot (Let's Encrypt) болон тэдгээрийн хамаарлыг суулгаж байна
Бүх репозиторуудыг нэмсний дараа мета өгөгдлийг шинэчилж, програмуудыг суулгана уу. Скриптээр суулгасан багцууд нь WordPress.org-г ажиллуулахад санал болгож буй PHP өргөтгөлүүдийг агуулдаг
скрипт код
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 Unit болон WordPress дээр ашиглах PHP-г тохируулж байна
Скрипт нь директор дотор тохиргооны файл үүсгэдэг шүүмжил. Энэ нь PHP-д байршуулах файлын хамгийн дээд хэмжээг тогтоож, 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
WordPress-д зориулсан MariaDB мэдээллийн сангийн тохиргоог зааж өгч байна
Бид MariaDB-г MySQL-ээс илүү олон нийтийн үйл ажиллагаатай, бас байх магадлалтай тул сонгосон
Скрипт нь шинэ мэдээллийн сан үүсгэж, давталтын интерфэйсээр дамжуулан WordPress руу нэвтрэх итгэмжлэлүүдийг үүсгэдэг:
скрипт код
# 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;"
WordPress 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
WordPress-г суулгах, тохируулах
Скрипт нь WordPress-ийн хамгийн сүүлийн хувилбарыг директорт суулгадаг /var/www/wordpress
мөн тохиргоог өөрчилнө:
- Өгөгдлийн сангийн холболт нь TCP урсгалыг багасгахын тулд давталт дээрх TCP-ийн оронд unix домайн залгуур дээр ажилладаг.
- WordPress угтвар нэмдэг https:// Хэрэв үйлчлүүлэгчид HTTPS-ээр NGINX-тэй холбогдож, мөн алсын хостын нэрийг (NGINX-с өгсөн) PHP руу илгээдэг бол URL руу оруулна. Үүнийг тохируулахын тулд бид код ашигладаг.
- WordPress-д нэвтрэхийн тулд HTTPS хэрэгтэй
- Анхдагч URL бүтэц нь нөөц дээр суурилдаг
- WordPress лавлах файлын системд зөв зөвшөөрлийг тохируулна.
скрипт код
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 нэгжийг тохируулж байна
Скрипт нь NGINX нэгжийг PHP ажиллуулах, WordPress зам боловсруулах, PHP процессын нэрийн орон зайг тусгаарлаж, гүйцэтгэлийн тохиргоог оновчтой болгохоор тохируулдаг. Энд анхаарах ёстой гурван шинж чанар байна:
- Нэрийн орон зайн дэмжлэг нь скрипт нь саванд ажиллаж байгаа эсэхийг шалгах үндсэн дээр нөхцөлөөр тодорхойлогддог. Ихэнх чингэлэгийн тохиргоо нь савыг үүрлэсэн хөөргөхийг дэмждэггүй тул энэ нь зайлшгүй шаардлагатай.
- Хэрэв нэрийн талбарт дэмжлэг байгаа бол нэрийн орон зайг идэвхгүй болго сүлжээ. Энэ нь WordPress-ийг хоёр төгсгөлийн цэгүүдтэй холбож, вэб дээр нэгэн зэрэг ашиглах боломжийг олгох зорилготой юм.
- Процессын хамгийн их тоог дараах байдлаар тодорхойлно. (MariaDB болон NGINX Uniy-г ажиллуулах боломжтой санах ой)/(PHP + 5 дахь RAM-ийн хязгаар)
Энэ утгыг NGINX нэгжийн тохиргоонд тохируулсан.
Энэ утга нь мөн үргэлж дор хаяж хоёр PHP процесс ажиллаж байгааг илтгэж байгаа бөгөөд энэ нь WordPress өөрөө өөртөө маш олон асинхрон хүсэлт гаргадаг тул 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-г тохируулж байна
Дараа нь скрипт нь WordPress-ийн тохиргооны файлыг үүсгэдэг default.conf каталогид шүүмжил. Үүнийг энд тохируулсан:
- Let's Encrypt-ээс хүлээн авсан TLS сертификатуудыг Certbot-ээр идэвхжүүлж байна (түүний тохиргоог дараагийн хэсэгт хийх болно)
- Let's Encrypt-ийн зөвлөмжид үндэслэн TLS аюулгүй байдлын тохиргоог хийж байна
- Өгөгдмөлөөр 1 цагийн турш алгасах хүсэлтийг кэш хийхийг идэвхжүүлнэ
- favicon.ico болон robots.txt гэсэн хоёр нийтлэг файлын хувьд хандалтын бүртгэл, түүнчлэн файл олдоогүй бол алдааны бүртгэлийг идэвхгүй болгох
- Нууцлагдмал файлууд болон зарим файлуудад хандахаас сэргийлнэ .phpхууль бус хандалт эсвэл санамсаргүй эхлэхээс урьдчилан сэргийлэх
- Статик болон фонт файлуудын хандалтын бүртгэлийг идэвхгүй болгох
- Толгойн тохиргоо
Хандалт-Хяналт-Зөвшөөрөх-Гарал үүсэл фонтын файлуудын хувьд - 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
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-г идэвхжүүлсэн үйлдвэрлэлд бэлэн сайтад үйлчлэхээр хэрхэн тохируулдаг талаар бид дээр ярьсан. Та мөн өөрийн хэрэгцээ шаардлагаас хамааран ирээдүйд нэмж болно:
- дэмжлэг үзүүлэх
Brotli , HTTPS дээр шууд шахалтыг сайжруулсан Модны аюулгүй байдал сwordpress-ийн дүрэм таны сайтад автомат халдлагаас урьдчилан сэргийлэхНөөцлөх танд тохирсон WordPress-д зориулсанХамгаалалт тусламжтайгаарAppArmor (Ubuntu дээр)- Postfix эсвэл msmtp нь WordPress шуудан илгээх боломжтой
- Таны сайтыг шалгаж үзэхийн тулд энэ нь хэр их урсгалыг даван туулж болохыг ойлгох болно
Сайтын гүйцэтгэлийг сайжруулахын тулд бид үүнийг шинэчлэхийг зөвлөж байна
NB Өндөр ачаалалтай сайтыг дэмжихийн тулд та мэргэжилтнүүдтэй холбоо барьж болно
Саутбридж . Бид таны вэб сайт, үйлчилгээг ямар ч ачаалалд хурдан, найдвартай ажиллагааг хангах болно.
Эх сурвалж: www.habr.com