
WordPressi seadistamise kohta on palju materjale, Google'i otsing fraasiga "WordPress install" annab umbkaudu pool miljonit tulemust. Siiski on neid seas tegelikult üsna vähe kvaliteetseid juhendeid, kuidas WordPressi ja alamsüsteemi õigesti seadistada ning pikaks ajaks sujuvalt toimima panna. Õige seadistus võib sõltuda tugevalt konkreetsetest vajadustest või olla põhjus, miks detailne selgitus muudab artikli raskesti loetavaks.
Selles artiklis üritame koguda kahe lähenemise parimad elemendid, pakkudes bash-skripti WordPressi automaatseks installimiseks Ubuntu süsteemile, samuti käsitleme selle osi, selgitades, mida iga tükk teeb, ning arutame kompromise, mille olime sunnitud koostamisel tegema. Kui oled kogenud kasutaja, siis võid artikli tekstist mööda vaadata ja lihtsalt muudatuste tegemiseks ja kasutamiseks oma keskkondades. Skripti väljundiks on kohandatav WordPressi installatsioon, mis toetab Lets Encrypt'i, töötab NGINX Unit'i peal ja sobib tööstuslikuks kasutamiseks.
WordPressi juurutamise arhitektuuri, kasutades NGINX Unit'i, on kirjeldatud , nüüd seadistame samuti täiendavad asjad, mida seal ei käsitletud (nagu ka paljudes teistes juhendites):
- WordPress CLI
- Let’s Encrypt ja TLS sertifikaadid
- Sertifikaatide automaatne uuendamine
- NGINX'i vahemälu
- NGINX'i tihendamine
- HTTPS ja HTTP/2 toimetamine
- Protsessi automatiseerimine
Artiklis kirjeldatakse installi ühel serveril, kus samal ajal on olemas staatiliste failide töötlemise server, PHP töötlemise server ja andmebaas. Mitme virtuaalse hosti ja teenuse toetava installi käsitlemine on potentsiaalne tuleviku teema. Kui soovid, et kirjutaksime millestki, mis selles artiklis pole kajastatud — kirjuta meile kommentaarides.
Nõuded
- Konteiner-server ( või ), virtuaalmasin või tavaline füüsiline server, millel on vähemalt 512 MB RAM-i ja installitud Ubuntu 18.04 või uuem versioon.
- Interneti kaudu ligipääsetavad portid 80 ja 443
- Domeeninimi, mis on seotud selle serveri avaliku ip-aadressiga
- Ligipääs root'i õigustega (sudo).
Arhitektuuri ülevaade
Arhitektuur on sama nagu varem kirjeldatud , kolmetasandiline web-rakendus. See koosneb PHP skriptidest, mis käitatakse PHP töötleja peal, ja staatilistest failidest, mida töödeldakse veebiserveris.

Üldpõhimõtted
- Paljud skripti seadistamise käsud on ümbritsetud tingimustega (if) idempotentsuse tagamiseks: skripti saab käitada mitu korda ilma riskita muuta juba seadistatud seadeid.
- Skript püüab installida tarkvara repodega, et saaksite süsteemi uuendusi käivitada ühe käsklusega (
apt upgradeUbuntu jaoks). - Käsud üritavad tuvastada, et nad käivitatakse konteineris, et vastavalt oma seadeid muuta.
- Seoses käivitatavate protsesside / lõimede arvu määramisega seades proovib skript ära arvata automaatse seadistuse parameetreid konteinerites, virtuaalmasinates ja füüsilistes serverites töötamiseks.
- Seadistuste kirjeldamisel mõtleme esmalt automatiseerimisele, mis, nagu me loodame, saab teie enda infrastruktuuri nagu koodi loomise aluseks.
- Kõik käsud käivitatakse kasutaja poolt root, sest need muudavad põhiosüsteemi seadeid, kuid WordPress töötab tavakasutaja alt.
Keskkonnamuutujate seadistamine
Seadistage järgmised keskkonnamuutujad enne skripti käivitamist:
WORDPRESS_DB_PASSWORD— WordPress andmebaasi paroolWORDPRESS_ADMIN_USER— WordPress administraatori nimiWORDPRESS_ADMIN_PASSWORD— WordPress administraatori paroolWORDPRESS_ADMIN_EMAIL— WordPress administraatori e-posti aadressWORDPRESS_URL— WordPress saidi täielik URL, alustadeshttps://.LETS_ENCRYPT_STAGING— vaikimisi tühi, kuid kui seate väärtuseks 1, siis kasutate Let’s Encrypt staging servereid, mis on vajalikud sertifikaatide sagedaseks taotlemiseks teie seadeid testides, vastasel juhul võib Let’s Encrypt ajutiselt blokeerida teie IP-aadressi suure arvu taotluste tõttu.
Skript kontrollib, et need WordPress-iga seotud muutujad on seadistatud, ja lõpetab töö, kui see nii ei ole.
Skripti read 572-576 kontrollivad väärtust LETS_ENCRYPT_STAGING.
Tuletatud keskkonnamuutujate seadistamine
Skript ridades 55-61 seab järgmised keskkonnamuutujad kas mõnele kindlale väärtusele või kasutades väärtust, mis on saadud eelnevas osas loodud muutujatest:
DEBIAN_FRONTEND="noninteractive"— teavitab rakendusi, et need käivituvad skripti sees ja kasutajaga suhtlemine ei ole võimalik.WORDPRESS_CLI_VERSION="2.4.0"— WordPress CLI rakenduse versioon.WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c"— WordPress CLI 2.4.0 käivitatava faili MD5 kontrollsummat (versioon on määratud muutujaWORDPRESS_CLI_VERSION). Skripti 162. real kasutatakse seda väärtust, et kontrollida, kas WordPress CLI õige fail on alla laaditud.UPLOAD_MAX_FILESIZE="16M"— maksimaalne failisuurus, mida saab WordPressi üles laadida. Seda seadet kasutatakse mitmetes kohtades, seega on mugavam määrata see ühes kohas.TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'\/ ' -f3)"— süsteemi hostinimi, mis ekstraheeritakse muutuja WORDPRESS_URL-st. Kasutatakse sobivate TLS/SSL sertifikaatide saamiseks Let’s Encryptilt ja samuti WordPressi siseseks kontrollimiseks.NGINX_CONF_DIR="\/etc\/nginx"— NGINX seadete katalooge, sealhulgas peamine fail.nginx.conf.CERT_DIR="\/etc\/letsencrypt\/live\/${TLS_HOSTNAME}"— Let’s Encrypt sertifikaatide tee WordPressi saidile, saadud muutujaTLS_HOSTNAME.
WordPress serveri hostinime määramine.
Skripts määrab serverile hostinime, et väärtus vastaks saidi domeeninimele. See ei ole kohustuslik, kuid see muudab SMTP kaudu väliste e-kirjade saatmise mugavamaks, kui seadistada üksi serverit, nagu see skriptis seadistatakse.
skripti kood
# 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}"
fiHostinime lisamine \/etc\/hosts
Täiendav kasutatakse perioodiliste ülesannete käivitamiseks ja eeldab, et WordPress suudab iseendale HTTP kaudu juurde pääseda. Selleks, et veenduda, et WP-Cron töötab kõigis keskkondades korrektselt, lisab skript faili real /etc/hosts, et WordPress saaks iseendale juurdepääsu loopback liidese kaudu:
skripti kood
# 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
fiNõutud tööriistade seadistamine järgmiste sammude jaoks.
Skripti ülejäänud osa vajab mõningaid programme ja eeldab, et hoidlad on ajakohased. Uuendame hoidlate nimekirja, seejärel installime vajalikud tööriistad:
skripti kood
# 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-releaseNGINX Unit ja NGINX hoidlate lisamine.
Skript paigaldab NGINX Unit ja NGINX avatud lähtekoodiga ametlikest NGINX hoidlatest, et tagada, et kasutataks turvaparanduste ja bugifiksaatorite uusimaid versioone.
Skript lisab NGINX Unit hoidla ning seejärel — NGINX hoidla, lisades hoidlate võtmed ja seadistusfailid. apt, mis määravad juurdepääsu hoidlatele interneti kaudu.
Reaalse NGINX Unita ja NGINX-i installatsioon toimub järgnevates osades. Lisame eelnevalt hoidlad, et mitte uuendada metainf oma mitu korda, mis teeb installatsiooni kiiremaks.
skripti kood
# 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
fiNGINX-i, NGINX Unita, PHP MariaDB, Certboti (Let’s Encrypt) ja nende sõltuvuste installatsioon
Kui kõik hoidlad on lisatud, uuendame metainf ja installime rakendused. Skripti kaudu installitavad paketid sisaldavad ka PHP laiendusi, mis on soovitatavad WordPress.org-i käivitamisel.
skripti kood
echo " Uuendame hoidlate metainf"
apt-get -qq update
# Installi PHP koos sõltuvustega ja NGINX Unit
echo " Installime PHP, NGINX Unita, NGINX-i, Certboti ja 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-serverPHP seadistamine NGINX Uniti ja WordPressiga kasutamiseks
Skript loob seadistuste faili katalooge conf.d. Siin määratakse PHP jaoks üleslaadimise maksimaalne failisuurus, lubatakse PHP veateadete väljastamine STDERR-i, nii et need salvestatakse NGINX Uniti logisse, ja seejärel taaskäivitades NGINX Uniti.
skripti kood
# 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 restartSeadistame MariaDB andmebaasi WordPressi jaoks
Valisime MariaDB MySQL-i asemel, kuna sellel on aktiivsem kogukond ning lisaks sellele, (tõenäoliselt on see palju lihtsam: MySQL-i installimiseks tuleb lisada veel üks hoidla, tlk. tõlkija).
Skript loob uue andmebaasi ja loob WordPressi juurdepääsuandmed loopback-liidese kaudu:
skripti kood
# 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 installimine
Sel samal sammul installib skript programmi . Selle abil saab installida ja hallata WordPressi seadistusi ilma failide käsitsi muutmiseta, andmebaasi uuendamiseta või juhtpaneeli sisselogimiseta. Samuti saab selle kaudu installida teemasid ja lisandeid ning teostada WordPressi uuendusi.
skripti kood
if [ ! -f /usr/local/bin/wp ]; then
# Installi WordPressi CLI
echo " Installime WordPressi CLI tööriista"
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
fiWordPressi installimine ja seadistamine
Skript installib viimase WordPressi versiooni katalooge /var/www/wordpress, samuti muudab seadistusi:
- Andmebaasiühendus töötab kaudu unix domain socket, mitte TCP lõpp-punkti juures, et vähendada TCP liiklust.
- WordPress lisab eesliite https:// URL-le, kui kliendid ühendavad NGINX-i HTTPS-protokolli kaudu, ja edastab kaug-hostnime (nagu NGINX-i poolt pakkuda) PHP-sse. Kasutame selle seadistamiseks koodilõik.
- WordPress vajab sisselogimiseks HTTPS-i
- URL-i struktuur põhineb vaikimisi ressurssidest
- WordPressi kaustale on määratud õiged failisüsteemi õigused.
skripti kood
if [ ! -d /var/www/wordpress ]; then
# Loo WordPressi kataloogid
mkdir -p /var/www/wordpress
chown -R www-data:www-data /var/www
# Laadi WordPress alla WordPress CLI abil
echo " Paigaldamine 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}'"
# See koodilõik sisestatakse wp-config.php faili, kui see luuakse;
# see teatab WordPressile, et oleme vastupidise proxy taga ja seega
# võimaldab tal generaata linke kasutades HTTPS-i
cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Lülita HTTPS 'sisse', kui HTTP_X_FORWARDED_PROTO vastab '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
# Loo WordPressi seadistus
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
# Paigalda 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
# Sea permalink struktuur mõistlikuks vaikeseisundiks, mis ei ole UI-s
su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data
# Eemalda näidistfail, kuna see on tarbetu ja võib olla turvarisk
rm /var/www/wordpress/wp-config-sample.php
# Veendu, et WordPressi õigused on õiged
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
fiNGINX Unit seadistamine
Skript seadistab NGINX Unit PHP käitamiseks ja WordPressi teede töötlemiseks, eraldades PHP protsesside nimede ruumi ja optimeerides jõudluseseadeid. Tasub tähelepanu pöörata kolmele funktsioonile:
- Nimede ruumi tugi määratakse tingimuse alusel, tuginedes skripti käitamise kontrollimisele konteineris. See on vajalik, kuna enamik konteineriseadeid ei toeta sisemiste konteinerite käitamisele.
- Kui nimede ruumi tugi on olemas, siis keelatakse nimede ruum network. See on vajalik, et võimaldada WordPressil samal ajal ühenduda ja olla kergesti juurdepääsetav internetis.
- Maksimaalne protsesside arv määratakse järgmiselt: (Saadaval mälu MariaDB ja NGINX Uniy jaoks) / (PHP piirangud + 5)
See väärtus määratakse NGINX Uniti seadetes.
Samuti tähendab see, et alati on vähemalt kaks aktiveeritud PHP protsessi, mis on oluline, kuna WordPress teeb palju asünkroonseid päringuid ise endale, ja ilma lisaprotsessideta võib näiteks WP-Cron peatuda. Võib-olla soovite neid piiranguid suurendada või vähendada vastavalt oma kohandatud seadetele, kuna siin loodud seaded on konservatiivsed. Enamikus tootmis süsteemides on seadistus vahemikus 10–100.
skripti kood
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 " Arvutatud maksimaalne PHP protsesside arv on ${MAX_PHP_PROCESSES}. Soovitatav on seda väärtust kohandada vastavalt konfiguratsiooni erinevustele. Tootmis konfiguratsioonides on tavaline näha väärtusi vahemikus 10-100."
echo " Konfigureerimine NGINX Uniti, et kasutada PHP ja WordPressi"
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/configNGINX seadistamine
NGINX põhiseadete seadistamine
Skript loob NGINXi vahemälu katalooge ja seejärel loob peamise seadistuse faili nginx.confPöörake tähelepanu töötlejate protsesside arvule ja ülesande maksimaalsele failisuurusele, mille saab laadida. Samuti on olemas rida, kus laaditakse sisse konfiguratsioonifail, mida määratletakse järgmises osas, seejärel järgnevad vahemäcache seaded.
skripti kood
# 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;
}
EOMNGINX kompressiooni seadistamine
Sisu kompressimine reaalajas enne selle saatmist klientidele on suurepärane viis saidi jõudluse parandamiseks, kuid ainult juhul, kui kompressioon on õigesti seadistatud. See skripti osa põhineb seadistustel .
skripti kood
cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Autor: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Kompressioon |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Aktiveeri gzip kompressioon.
# Vaikimisi: off
gzip on;
# Kompressiooni tase (1-9).
# 5 on ideaalne kompromiss suuruse ja CPU kasutamise vahel, pakkudes umbes 75%
# vähendamist enamikus ASCII failides (peaaegu identne tasemega 9).
# Vaikimisi: 1
gzip_comp_level 6;
# Ära kompressi midagi, mis on juba väike ja ei pruugi palju kokku suruda,
# (vaikimisi on see 20 baiti, mis on halb, kuna see viib tavaliselt suuremate
# failide tekkeni pärast gzippingut).
# Vaikimisi: 20
gzip_min_length 256;
# Kompressi andmeid isegi klientide jaoks, kes ühenduvad meiega kaudu volikirju,
# tuvastatud "Via" päises (kui vajalik CloudFronti jaoks).
# Vaikimisi: off
gzip_proxied any;
# Ütle vahe-Serveritele, et salvestada nii gzipped kui ka tavaline versioon ressursist
# igal korral, kui kliendi Accept-Encoding võimed päis erinevad;
# Vältige probleemi, kus mitte-gzip võimekusega klient (mis on äärmiselt haruldane
# täna) kuvab segadust, kui nende vahe-Server annab neile gzipped versiooni.
# Vaikimisi: off
gzip_vary on;
# Kompressi kogu väljund, millel on üks järgmistest MIME-tüüpidest.
# `text/html` on alati gzip mooduli poolt kompressitud.
# Vaikimisi: 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;
EOMNGINX seadistamine WordPress'i jaoks
Seejärel loob skript WordPress'i seadistusfaili default.conf kaustas conf.d. Siin seadistatakse:
- TLS sertifikaatide aktiveerimine, mis on saadud Let’s Encrypt kaudu Certboti kaudu (selle seadistamine tuleb järgmises osas)
- TLS turvaseadete seadistamine, mis põhineb Let’s Encrypt'i soovitustel
- Vahemälu seadistamine vahele jäetud päringutele 1 tunni jooksul vaikimisi
- Ligipääsu logimise keelamine, samuti vealogimise, kui faili ei leita, kahe üldiselt nõutud faili jaoks: favicon.ico ja robots.txt
- Keelata ligipääs peidetud failidele ja mõningatele failidele .php, et vältida ebaseaduslikku juurdepääsu või tahtmatut käivitamist
- Logimise keelamine staatiliste ja fontifailide jaoks
- Pealkirja määramine fontifailide jaoks
- Ruuterite lisamine index.php ja teiste staatiliste failide jaoks.
skripti kood
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, mida Certbot kasutab Let's Encrypti jaoks
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 Encrypti konfiguratsioon
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;
# Vahe-teeninduse cache
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;
}
# Keela kõik katsed juurdepääsu saada peidetud failidele, nagu .htaccess, .htpasswd,
# .DS_Store (Mac)
# Hoia logimisprotsessid hilisemaks analüüsimiseks (või edasta tulemüüritarkvarale
# nagu fail2ban)
location ~ \/. {
deny all;
}
# Keela juurdepääs mis tahes .php laiendiga failidele üleslaadimise kataloogis;
# töötab alamkataloogide installides ja ka multisettevõtte võrgus.
# Hoia logimisprotsessid hilisemaks analüüsimiseks (või edasta tulemüüritarkvarale
# nagu fail2ban).
location ~* \/(?:uploads|files)\/.*.php$ {
deny all;
}
# WordPress: keela juurdepääs wp-content, wp-includes PHP failidele
location ~* ^\/(?:wp-content|wp-includes)\/.*.php$ {
deny all;
}
# Keela avalik juurdepääs wp-config.php-le
location ~* wp-config.php {
deny all;
}
# Ära logi juurdepääsu staatilistele varadele, meediale
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;
}
}
EOMCertboti seadistamine Let's Encrypti sertifikaatide jaoks ja automatiseeritud uuendamine
on tasuta tööriist, mille on välja töötanud Electronic Frontier Foundation (EFF), mille abil saab saada ja automaatselt uuendada TLS-sertifikaate Let's Encryptilt. Skript sooritab järgmised toimingud, et seadistada Certbot Let's Encrypti sertifikaatide töötlemiseks NGINX-is:
- Peatab NGINX-i
- Laeb soovitatud TLS-i parameetreid
- Käivitab Certboti, et hankida sertifikaate saidi jaoks
- Taaskäivitab NGINX-i, et kasutada sertifikaate
- Seadistab Certboti igapäevase käivitamise kell 3:24 öösel, et kontrollida sertifikaatide uuendamise vajadust, samuti vajadusel uute sertifikaatide hankimist ja NGINX-i taaskäivitamist.
skripti kood
echo " Peatame NGINX-i Let's Encrypti seadistamiseks"
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 " Laeme soovitatud TLS-i parameetrid"
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 "Ei suutnud alla laadida viimast options-ssl-nginx.conf"
fi
if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
echo " Laeme soovitatud TLS-i DH parameetrid"
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 "Ei suutnud alla laadida viimast ssl-dhparams.pem"
fi
# Kui tls_certs_init.sh ei ole varem käivitatud, eemaldame iseallkirjastatud sertifikaadid
if [ ! -d "/etc/letsencrypt/accounts" ]; then
echo " Eemaldame iseallkirjastatud sertifikaadid"
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 " Generatsioon sertifikaatide Let's Encryptiga"
certbot certonly --standalone
-m "${WORDPRESS_ADMIN_EMAIL}"
${CERTBOT_STAGING_FLAG}
--agree-tos --force-renewal --non-interactive
-d "${TLS_HOSTNAME}"
fi
echo " Käivitame NGINX-i, et kasutada uut konfiguratsiooni"
service nginx start
# Kirjutame crontabi perioodilise Let's Encrypti sertifikaadi uuendamise jaoks
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
echo " Lisame certboti crontabi automaatseks Let's Encrypti uuendamiseks"
(crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fiTeie saidi täiendav seadistamine
Oleme eelnevalt rääkinud sellest, kuidas meie skript seadistab NGINX-i ja NGINX Unit'i valmis tööstuslikuks veebisaidiks, millel on TLS/SSL aktiivne. Saate ka sõltuvalt teie vajadustest tulevikus lisada:
- Tugevdus , täiustatud surumine HTTPS-i kaudu
- jot , et takistada automatiseeritud rünnakuid teie saidile
- WordPressile, mis teile sobib
- kasutades (Ubuntu-s)
- Postfix või msmtp, et WordPress saaks e-kirju saata
- Teie saidi testimised, et mõista, kui palju liiklust see talub
Veelgi parema saidi jõudluse saavutamiseks soovitame uuendada , meie kommertsiettevõtte tasemel toode, mis põhineb avatud lähtekoodiga NGINX-il. Selle tellijad saavad dünaamiliselt laaditava Brotli mooduli, samuti (lisatasu eest) . Me pakume ka , WAF moodulit NGINX Plus jaoks, mis põhineb valdkonna juhtivatel turvatehnoloogiatel F5-lt.
Märkus. Kõrge koormusega saidi toetamiseks võite pöörduda spetsialistide poole . Tagame teie saidi või teenuse kiire ja usaldusväärse toimimise igasuguste koormuste all.
Allikas: habr.com
