ProHoster > Блог > басқарма > NGINX Unit және Ubuntu көмегімен WordPress орнатуды автоматтандыру
NGINX Unit және Ubuntu көмегімен WordPress орнатуды автоматтандыру
WordPress орнату туралы көптеген оқулықтар бар, Google-дан «WordPress орнату» деп іздеу жарты миллионға жуық нәтиже береді. Дегенмен, шын мәнінде, олардың арасында өте аз жақсы нұсқаулықтар бар, оларға сәйкес WordPress және негізгі операциялық жүйені ұзақ уақыт бойы қолдау көрсетуге қабілетті етіп орнатуға және конфигурациялауға болады. Мүмкін дұрыс параметрлер нақты қажеттіліктерге байланысты болуы мүмкін немесе бұл егжей-тегжейлі түсініктеме мақаланы оқуды қиындататындығына байланысты.
Бұл мақалада біз WordPress-ті Ubuntu жүйесіне автоматты түрде орнату үшін bash сценарийін ұсына отырып, екі дүниенің де ең жақсысын біріктіруге тырысамыз және біз оны қарастырамыз, әр бөліктің не істейтінін және дизайнда жасаған тиімділіктерді түсіндіреміз. ол. Егер сіз тәжірибелі пайдаланушы болсаңыз, мақаланың мәтінін өткізіп жібере аласыз және жай ғана сценарийді алыңыз орталарыңызда өзгерту және пайдалану үшін. Сценарийдің нәтижесі - NGINX құрылғысында жұмыс істейтін және өнеркәсіптік пайдалануға жарамды Lets Encrypt қолдауы бар теңшелетін WordPress қондырғысы.
NGINX Unit көмегімен WordPress-ті орналастыруға арналған әзірленген архитектура мына бөлімде сипатталған ескі мақала, біз енді онда қарастырылмаған нәрселерді одан әрі конфигурациялаймыз (көптеген басқа оқулықтардағы сияқты):
WordPress CLI
Шифрлайық және TLSSSL сертификаттары
Сертификатты автоматты түрде жаңарту
NGINX кэштеу
NGINX қысу
HTTPS және HTTP/2 қолдауы
Процесті автоматтандыру
Мақалада статикалық өңдеу сервері, PHP өңдеу сервері және дерекқор бір уақытта орналасатын бір сервердегі орнату сипатталады. Бірнеше виртуалды хосттар мен қызметтерді қолдайтын орнату болашақтағы ықтимал тақырып болып табылады. Егер сіз осы мақалаларда жоқ нәрсе туралы жазғанымызды қаласаңыз, түсініктемелерде жазыңыз.
талаптар
Сервер контейнері (LXC немесе LXD), виртуалды машина немесе кемінде 512 Мбайт жедел жады және Ubuntu 18.04 немесе одан да соңғы нұсқасы орнатылған кәдімгі аппараттық сервер.
Интернетке қол жетімді порттар 80 және 443
Осы сервердің жалпы IP мекенжайымен байланысты домен атауы
Түбірлік қатынас (sudo).
Архитектураға шолу
Архитектура сипатталғандай бұрын, үш деңгейлі веб-қосымша. Ол PHP қозғалтқышында орындалатын PHP сценарийлерінен және веб-сервер өңдейтін статикалық файлдардан тұрады.
Жалпы принциптер
Сценарийдегі көптеген конфигурация пәрмендері импотенттік жағдайлар болған жағдайда оралады: сценарий бұрыннан бар параметрлерді өзгерту қаупінсіз бірнеше рет іске қосылуы мүмкін.
Сценарий бағдарламалық құралды репозиторийлерден орнатуға тырысады, осылайша жүйе жаңартуларын бір пәрменде қолдана аласыз (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 ішіне хост атауын қосу
Қосымша WP-Cron мерзімді тапсырмаларды орындау үшін пайдаланылады, WordPress HTTP арқылы өзіне қол жеткізуді талап етеді. WP-Cron барлық орталарда дұрыс жұмыс істейтініне көз жеткізу үшін сценарий файлға жол қосады / etc / hostsWordPress кері интерфейс арқылы өзіне қол жеткізе алады:
сценарий коды
# 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 Unit және ашық бастапқы NGINX орнатады.
Сценарий NGINX Unit репозиторийін, содан кейін 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 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 орнату
Сценарий каталогта параметрлер файлын жасайды conf.d. Бұл 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 дерекқорының параметрлерін көрсету
Біз MySQL-ге қарағанда 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 бағдарламасын орнату
Бұл қадамда сценарий бағдарламаны орнатады WP-CLI. Оның көмегімен сіз файлдарды қолмен өңдеусіз, дерекқорды жаңартусыз немесе басқару тақтасына кірмей-ақ WordPress параметрлерін орнатуға және басқаруға болады. Оны тақырыптар мен қондырмаларды орнату және WordPress жаңарту үшін де пайдалануға болады.
сценарий коды
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 құрылғысын орнату
Сценарий PHP процесінің аттар кеңістігін оқшаулап, өнімділік параметрлерін оңтайландыра отырып, PHP іске қосу және WordPress жолдарын өңдеу үшін NGINX бірлігін конфигурациялайды. Мұнда назар аудару керек үш мүмкіндік бар:
Атау кеңістігіне қолдау сценарийдің контейнерде жұмыс істеп тұрғанын тексеруге негізделген шарт бойынша анықталады. Бұл қажет, себебі көптеген контейнер орнатулары контейнерлерді кірістірілген іске қосуды қолдамайды.
Егер аттар кеңістігіне қолдау болса, аттар кеңістігін өшіріңіз желі. Бұл 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. Өңдеуші процестерінің санына және жүктеп салу үшін ең үлкен файл өлшемін орнатуға назар аударыңыз. Сондай-ақ келесі бөлімде анықталған қысу параметрлері файлын, одан кейін кэштеу параметрлерін қамтитын жол бар.
Клиенттерге жібермес бұрын мазмұнды жылдам қысу торап өнімділігін жақсартудың тамаша тәсілі болып табылады, бірақ қысу дұрыс конфигурацияланған жағдайда ғана. Сценарийдің бұл бөлімі параметрлерге негізделген мұнда.
сценарий коды
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 каталогта conf.d. Ол мына жерде конфигурацияланған:
Let's Encrypt арқылы Certbot арқылы алынған TLS сертификаттарын белсендіру (оны орнату келесі бөлімде болады)
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 орнату және оларды автоматты түрде жаңарту
Certbot Let's Encrypt жүйесінен TLS сертификаттарын алуға және автоматты түрде жаңартуға мүмкіндік беретін Electronic Frontier Foundation (EFF) тегін құралы болып табылады. 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
Сайтыңызды қосымша теңшеу
Жоғарыда біз TLSSSL қосылған өндіріске дайын сайтқа қызмет көрсету үшін NGINX және NGINX бірлігін сценарий қалай конфигурациялайтыны туралы айттық. Сондай-ақ, қажеттіліктеріңізге байланысты болашақта мыналарды қосуға болады:
Қолдау Бротли, HTTPS арқылы жылдам қысу жақсартылған
Postfix немесе msmtp, сондықтан WordPress поштаны жібере алады
Сіздің сайтыңызды тексеріп, оның қаншалықты трафикті көтере алатынын түсінуіңіз керек
Торап өнімділігі одан да жақсырақ болуы үшін жаңартуды ұсынамыз NGINX Plus, ашық бастапқы NGINX негізіндегі кәсіпорын деңгейіндегі коммерциялық өніміміз. Оның абоненттері динамикалық жүктелген Brotli модулін, сондай-ақ (қосымша ақыға) алады. NGINX ModSecurity WAF. Біз де ұсынамыз NGINX App Protect, NGINX Plus үшін WAF модулі F5-тен саладағы жетекші қауіпсіздік технологиясына негізделген.
NB Жоғары жүктелген сайтты қолдау үшін мамандарға хабарласуға болады Саутбридж. Біз кез келген жүктеме кезінде веб-сайтыңыздың немесе қызметіңіздің жылдам және сенімді жұмысын қамтамасыз етеміз.