
Rengeteg anyag található a WordPress telepítéséről, a Google keresése a "WordPress install" kulcsszavakkal körülbelül félmillió találatot ad. Ennek ellenére ténylegesen nagyon kevés érdemi útmutató van, amelyek segítségével telepíthetjük és konfigurálhatjuk a WordPress-t, valamint az alatta lévő operációs rendszert, hogy azok hosszú távon fenntarthatóak legyenek. Lehet, hogy a helyes beállítások nagymértékben függenek a konkrét igényektől, vagy ennek az az oka, hogy a részletes magyarázatok megnehezítik az olvasást.
Ebben a cikkben megpróbáljuk összehozni a két megközelítés legjobbjait, biztosítva egy bash scriptet a WordPress automatikus telepítéséhez Ubuntu alatt, és végigmegyünk rajta, magyarázva, hogy mit csinál minden egyes darab, valamint milyen kompromisszumokra jutottunk a fejlesztése során. Ha tapasztalt felhasználó vagy, átugorhatod a cikk szövegét és egyszerűen a testreszabásra és a saját környezetedben való használatra. A script kimeneteként egy testreszabható WordPress telepítést kapunk, amely támogatja a Lets Encrypt-et, és működik az NGINX Unit-on, ipari alkalmazásra alkalmas.
A WordPress NGINX Unit-tal történő telepítésére kifejlesztett architektúra a lett leírva, most pedig kiegészítő beállításokat végzünk, amelyeket ott nem érintettek (és sok más útmutatóban sem):
- WordPress CLI
- Let’s Encrypt és TLS/SSL tanúsítványok
- Tanúsítványok automatikus frissítése
- NGINX gyorsítótárazás
- NGINX tömörítés
- HTTPS és HTTP/2 támogatás
- A folyamat automatizálása
A cikk egy olyan szerveren történő telepítést ír le, amely egyidejűleg statikus fájlokat, PHP-t és egy adatbázist kezel. Az olyan telepítések, amelyek többszörös virtuális hostokat és szolgáltatásokat is támogatnak - potenciális téma a jövőre nézve. Ha szeretnéd, hogy írjunk valamiről, ami nincs benne ezekben a cikkekben - írj a megjegyzésekbe.
Követelmények
- Konténer szerver ( vagy ), virtuális gép vagy hagyományos fizikai szerver, legalább 512 MB RAM-mal és telepített Ubuntu 18.04 vagy újabb verzióval.
- Nyilvános internetes 80-as és 443-as portok elérhetősége
- A domain név, amely a szerver nyilvános IP-címéhez kapcsolódik
- Root jogosultsággal (sudo) való hozzáférés.
Az architektúra áttekintése
Az architektúra ugyanaz, mint amit , háromszintű webalkalmazás. PHP szkriptekből áll, amelyeket a PHP feldolgozó hajt végre, és statikus fájlokból, amelyeket a webszerver kezel.

Általános elvek
- Számos parancs a szkriptekben feltételekbe (if) van csomagolva az idempotencia érdekében: a szkript többször is futtatható anélkül, hogy kockáztatná a már konfigurált beállítások megváltoztatását.
- A szkript igyekszik szoftvereket telepíteni a tárolókból, így egy parancs segítségével frissítheti a rendszert (
apt upgradeaz Ubuntu esetében). - A parancsok próbálják meghatározni, hogy konténerben futnak-e, hogy ennek megfelelően módosítsák a beállításaikat.
- A beállítások során mindig az automatizálásra gondoljunk először, amely reményeink szerint az alapja lesz a saját infrastruktúrája kialakításának kód formájában.
- Minden parancs a
- root , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik.Környezeti változók beállítása
Állítsa be az alábbi környezeti változókat a szkript indítása előtt:
WORDPRESS_DB_PASSWORD
— a WordPress adatbázis jelszavaWORDPRESS_ADMIN_USER— a WordPress adminisztrátor neveWORDPRESS_ADMIN_PASSWORD— a WordPress adminisztrátor jelszavaWORDPRESS_ADMIN_EMAIL— a WordPress adminisztrátor e-mail címeWORDPRESS_URL— a WordPress webhely teljes URL-je, kezdve ahttps://LETS_ENCRYPT_STAGING.— alapértelmezetten üres, de ha értéket ad meg, 1-re állítva, a Let’s Encrypt staging szervereit fogja használni, amelyek szükségesek a tanúsítványok gyakori kérelmezéséhez a beállítások tesztelése közben, különben a Let’s Encrypt ideiglenesen blokkolhatja az IP-címét a sok kérelem miatt.A szkript ellenőrzi, hogy ezek a WordPress-hez kapcsolódó változók be vannak állítva, és leáll, ha nem.
A szkript 572-576 sorai ellenőrzik az értéket
Környezeti változók származtatásának beállítása — alapértelmezetten üres, de ha értéket ad meg, 1-re állítva, a Let’s Encrypt staging szervereit fogja használni, amelyek szükségesek a tanúsítványok gyakori kérelmezéséhez a beállítások tesztelése közben, különben a Let’s Encrypt ideiglenesen blokkolhatja az IP-címét a sok kérelem miatt..
A szkript 55-61 sorai az alábbi környezeti változókat állítják be, vagy egy fix értékre, vagy a korábbi szakaszban beállított változókból származtatott értékekkel:
DEBIAN_FRONTEND="noninteractive"
DEBIAN_FRONTEND="noninteractive"— tájékoztatja az alkalmazásokat, hogy ők szkriptben futnak és nincs lehetőségük a felhasználóval való interakcióra.WORDPRESS_CLI_VERSION="2.4.0"— a WordPress CLI alkalmazás verziója.WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c"— a WordPress CLI 2.4.0 futtatható fájl ellenőrző összege (a verzió a "WORDPRESS_CLI_VERSION" változóban található),WORDPRESS_CLI_VERSION). A szkript 162. sorában használja ezt az értéket annak ellenőrzésére, hogy a WordPress CLI megfelelő fájl került letöltésre.UPLOAD_MAX_FILESIZE="16M"— a maximális fájlméret, amely feltölthető a WordPressbe. Ezt a beállítást több helyen használják, ezért egyszerűbb egy helyen megadni.TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'\/ ' -f3)"— a rendszer hostname-ja, amely a WORDPRESS_URL változóból vonható le. Ez a Let’s Encrypt-től származó megfelelő TLS/SSL tanúsítványok megszerzésére, valamint a WordPress belső ellenőrzésére szolgál.NGINX_CONF_DIR="\/etc\/nginx"— az NGINX beállítások könyvtárának elérési útja, beleértve a fő fájlt,nginx.conf.CERT_DIR="\/etc\/letsencrypt\/live\/${TLS_HOSTNAME}"— a Let’s Encrypt tanúsítványok elérési útja a WordPress webhelyhez, a "TLS_HOSTNAME" változóból származik.TLS_HOSTNAME.
A WordPress szerver hostname-jának beállítása.
A szkript beállítja a szerver hostname-ját, hogy az érték megfeleljen a webhely domain nevének. Ez nem kötelező, de kényelmesebb az SMTP-n keresztül kiinduló levelek küldésére, amikor egyetlen szervert állítanak be, ahogyan azt a szkript is beállítja.
a szkript kódja
# 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}"
fiHostname hozzáadása a \/etc\/hosts fájlhoz.
Kiegészítés a rendszeres feladatok futtatására szolgál, megköveteli, hogy a WordPress HTTP-n keresztül hozzáférjen önmagához. Annak biztosítása érdekében, hogy a WP-Cron minden környezetben megfelelően működjön, a szkript egy sort ad hozzá a fájlhoz, /etc/hosts, így a WordPress hozzáférhet önmagához a loopback interfészen keresztül:
a szkript kódja
# 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
fiA következő lépésekhez szükséges eszközök telepítése.
A szkript többi része néhány programot igényel és azt feltételezi, hogy a tárolók aktuálisak. Frissítjük a tárolók listáját, majd telepítjük a szükséges eszközöket:
a szkript kódja
# 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 és NGINX tárolók hozzáadása.
A szkript az NGINX hivatalos tárolóiból telepíti az NGINX Unit-ot és az NGINX-et, hogy biztosítsa, hogy a legfrissebb biztonsági frissítésekkel és hibajavításokkal rendelkező verziókat használják.
A szkript hozzáadja az NGINX Unit tárolót, majd a NGINX tárolót, hozzáadva a tárolók kulcsát és a beállító fájlokat. apt, amelyek az interneten keresztül biztosítják a tárolóhoz való hozzáférést.
A NGINX Unit és NGINX valódi telepítése a következő szakaszban történik. Először hozzáadjuk a tárolókat, hogy ne frissítsük a metadatokat többször, ami gyorsabbá teszi a telepítést.
a szkript kódja
# 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, NGINX Unit, PHP MariaDB, Certbot (Let’s Encrypt) és ezek függőségeinek telepítése
Miután minden tároló hozzá lett adva, frissítjük a metadatokat és telepítjük az alkalmazásokat. A szkripttel telepített csomagok között szerepelnek a PHP kiterjesztések is, amelyek ajánlottak a WordPress.org telepítéséhez.
a szkript kódja
echo " A tárolók metaadatai frissítése"
apt-get -qq update
# Telepítsd a PHP-t a függőségekkel és az NGINX Unit-tal
echo " PHP, NGINX Unit, NGINX, Certbot és MariaDB telepítése"
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-serverA PHP beállítása az NGINX Unit és a WordPress használatához
A szkript létrehozza a beállítási fájlt a könyvtárban conf.d. Itt a PHP által feltölthető fájlok maximális méretét állítjuk be, engedélyezzük a PHP hibák STDERR-be való kiírását, így azok rögzítésre kerülnek az NGINX Unit naplóban, és újraindítjuk az NGINX Unit-ot.
a szkript kódja
# 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 restartA MariaDB adatbázis beállítása a WordPress számára
A MariaDB-t választottuk a MySQL helyett, mivel ennek nagyobb közösségi aktivitása van, ráadásul valószínűleg (valószínűleg itt minden egyszerűbb: ha MySQL-t szeretnénk telepíteni, még egy tárolót kell hozzáadnunk, ford. megj.
A szkript létrehoz egy új adatbázist és generálja a WordPress hozzáférési adatait a loopback interfészen keresztül:
a szkript kódja
# 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;"A WordPress CLI telepítése
Ez a lépés a szkript telepíti a . Ezzel telepíthetjük és kezelhetjük a WordPress beállításait, anélkül hogy manuálisan kellene módosítanunk a fájlokat, frissítenünk a databázist vagy belépnünk a vezérlőpultba. Ezen kívül telepíthetjük a témákat és bővítményeket, és végrehajthatjuk a WordPress frissítéseit is.
a szkript kódja
if [ ! -f /usr/local/bin/wp ]; then
# Telepítsd a WordPress CLI-t
echo " A WordPress CLI eszköz telepítése"
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
fiA WordPress telepítése és beállítása
A szkript a legújabb WordPress verziót telepíti a könyvtárba /var/www/wordpress, és megváltoztatja a beállításokat:
- Az adatbázishoz való csatlakozás unix domain socket-en keresztül történik a loopback-en, hogy csökkentse a TCP forgalmat.
- A WordPress prefixet ad hozzá LETS_ENCRYPT_STAGING A URL, if clients connect to NGINX over HTTPS protocol and also sends the remote hostname (as provided by NGINX) to PHP. We apply a piece of code to set this up.
- WordPress requires HTTPS for login
- The default URL structure is based on resources
- The correct permissions are set on the file system for the WordPress directory.
a szkript kódja
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
fiNGINX Unit Configuration
The script configures NGINX Unit to run PHP and manage WordPress paths, isolating the PHP process namespace and optimizing performance settings. There are three functions worth noting here:
- Namespace support is determined by a condition based on checking if the script is running in a container. This is necessary since most container settings do not support nested container launches.
- If namespace support is enabled, the namespace is disabled network. This is needed to allow WordPress to connect to both endpoints simultaneously and be accessible on the internet.
- A maximális folyamatok számát a következő módon határozzák meg: (A futó MariaDB és NGINX Uniy számára elérhető memória) / (PHP maximális memóriahatára + 5)
Ez az érték az NGINX Unit beállításainál van megadva.
Ez az érték azt is jelenti, hogy mindig legalább két futó PHP folyamat van, ami fontos, mivel a WordPress sok aszinkron kérést indít el önmaga felé, és ha nem áll rendelkezésre további folyamat, például a WP-Cron futása megszakadhat. Érdemes lehet ezeket a korlátokat növelni vagy csökkenteni a helyi beállítások alapján, mivel az itt megadott beállítások konzervatívak. A legtöbb éles rendszer esetében a beállítások 10 és 100 között mozognak.
a szkript kódja
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 " A PHP folyamatok maximális számát ${MAX_PHP_PROCESSES} értékre számítottuk. Érdemes lehet ezt az értéket finomhangolni a konfigurációnak megfelelően. Nem szokatlan, ha a termelési konfigurációk között értékek 10-100 között mozognak."
echo " NGINX Unit konfigurálása PHP és WordPress használatához"
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 beállítása
NGINX alapvető paraméterek beállítása
A skript létrehozza a NGINX gyorsítótárhoz szükséges könyvtárat, majd létrehozza az alapvető konfigurációs fájlt nginx.confKérjük, vegye figyelembe a folyamatok számát és a maximális feltöltési fájlméret beállítását. Továbbá van egy sor, amely a tömörítési beállító fájlt kapcsolja be, amelyet a következő szakaszban határozunk meg, majd jönnek a gyorsítótárazási beállítások.
a szkript kódja
# 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 tömörítési beállítás
A tartalom valós idejű tömörítése a klienseknek való elküldés előtt nagyszerű módja a weboldal teljesítményének javítására, de csak akkor, ha a tömörítés megfelelően van beállítva. Ez a szkript szakasz a beállításokon alapul. .
a szkript kódja
cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Hitel: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Tömörítés |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Engedélyezze a gzip tömörítést.
# Alapértelmezett: ki
gzip on;
# Tömörítési szint (1-9).
# Az 5 a méret és a CPU-használat tökéletes kompromisszuma, a legtöbb ASCII fájl esetén körülbelül 75%-os csökkentést kínál (majdnem azonos a 9-es szinttel).
# Alapértelmezett: 1
gzip_comp_level 6;
# Ne tömörítsen semmit, ami már kicsi, és valószínűleg nem fog sokat zsugorodni,
# (az alapértelmezett 20 bájt, ami rossz, mivel ez általában nagyobb fájlokhoz vezet a gzip használatával).
# Alapértelmezett: 20
gzip_min_length 256;
# Tömörítse az adatokat akkor is, ha a kliensek proxikon keresztül csatlakoznak hozzánk,
# az "Via" fejléc alapján azonosítva (CloudFront számára szükséges).
# Alapértelmezett: ki
gzip_proxied any;
# Mondja el a proxiknak, hogy tárolják mind a gzippelt, mind a normál verzióját az erőforrásnak,
# valahányszor a kliens Accept-Encoding képességi fejléc változik;
# Megakadályozza azt a problémát, amikor egy nem gzip képes kliens (ami ma rendkívül ritka)
# zavaros szöveget jelenít meg, ha a proxija a gzippelt verziót adta nekik.
# Alapértelmezett: ki
gzip_vary on;
# Tömörítse az összes kimenetet, amelyet az alábbi MIME-típusok egyike jelöl.
# A `text/html` mindig a gzip modul által van tömörítve.
# Alapértelmezett: 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 beállítása WordPresshez
A szkript most létrehoz egy beállító fájlt a WordPress számára default.conf a könyvtárban conf.d. Itt a következőket állítjuk be:
- A TLS tanúsítványok aktiválása, amelyeket a Let’s Encrypt biztosít a Certbottal (a beállítása a következő szakaszban lesz)
- A TLS biztonsági beállításainak konfigurálása, amely a Let’s Encrypt ajánlásain alapul
- Alapértelmezetten a kihagyott kérések gyorsítótárazása 1 órára
- A hozzáférési naplózás, valamint a hibák naplózásának letiltása, ha a fájl nem található, a két leggyakrabban kért fájlra: favicon.ico és robots.txt
- A hozzáférés megakadályozása rejtett fájlokhoz és néhány fájlhoz .php, hogy megakadályozza a jogosulatlan hozzáférést vagy a véletlen indítást
- A statikus fájlok és betűtípusok hozzáférési naplózásának letiltása
- Fejléc beállítása betűtípusokhoz
- Útvonal leképezése az index.php és egyéb statikus fájlokhoz.
a szkript kódja
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, amelyet a Certbot használ a Let's Encrypt-hez
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 konfiguráció
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;
}
# Minden kísérlet letiltása rejtett fájlok, például .htaccess, .htpasswd,
# .DS_Store (Mac)
# Naplózza a kéréseket későbbi feldolgozásra (vagy ha tűzfal utility-knek
# mint a fail2ban)
location ~ \/. {
deny all;
}
# Minden olyan fájl letiltása, amelynek kiterjesztése .php az uploads könyvtárban;
# működik almappa telepítésekben és többhelyi hálózatban is.
# Naplózza a kéréseket későbbi feldolgozásra (vagy ha tűzfal utility-nek
# mint a fail2ban).
location ~* \/(?:uploads|files)\/.php$ {
deny all;
}
# WordPress: a wp-content, wp-includes PHP fájlokhoz való hozzáférés letiltása
location ~* ^\/(?:(?:wp-content|wp-includes)\/.php)$ {
deny all;
}
# Nyilvános hozzáférés letiltása a wp-config.php fájlhoz
location ~* wp-config.php {
deny all;
}
# A statikus eszközök, média hozzáférésének naplózásának letiltása
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;
}
}
EOMA Certbot beállítása a Let’s Encrypt tanúsítványokhoz és azok automatikus megújítása
– egy ingyenes eszköz az Electronic Frontier Foundation (EFF) részéről, amellyel TLS tanúsítványokat szerezhetünk és automatikusan megújíthatunk a Let’s Encrypttől. A skript a következő lépéseket hajtja végre, amelyek beállítják a Certbotot, hogy kezelje a Let’s Encrypt tanúsítványait az NGINX-ben:
- Leállítja az NGINX-et
- Letölti az ajánlott TLS paramétereket
- Elindítja a Certbotot, hogy tanúsítványokat szerezzen a webhelyhez
- Újraindítja az NGINX-et a tanúsítványok használatára
- Beállítja a Certbot napi futtatását hajnali 3:24-kor a tanúsítványok megújításának ellenőrzésére, valamint szükség esetén új tanúsítványok letöltésére és az NGINX újraindítására.
a szkript kódja
echo " Az NGINX leállítása a Let's Encrypt beállítása érdekében"
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 " Az ajánlott TLS paraméterek letöltése"
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 "Nem sikerült letölteni a legfrissebb options-ssl-nginx.conf fájlt"
fi
if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
echo " Az ajánlott TLS DH paraméterek letöltése"
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 "Nem sikerült letölteni a legfrissebb ssl-dhparams.pem fájlt"
fi
# Ha a tls_certs_init.sh még nem futott, távolítsa el az önaláírt tanúsítványokat
if [ ! -d "/etc/letsencrypt/accounts" ]; then
echo " Az önaláírt tanúsítványok eltávolítása"
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 " Tanúsítványok generálása a Let's Encrypt segítségével"
certbot certonly --standalone
-m "${WORDPRESS_ADMIN_EMAIL}"
${CERTBOT_STAGING_FLAG}
--agree-tos --force-renewal --non-interactive
-d "${TLS_HOSTNAME}"
fi
echo " Az NGINX indítása az új konfiguráció használatához"
service nginx start
# Crontab írása a Let's Encrypt tanúsítványok időszakos megújítása érdekében
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
echo " Certbot hozzáadása a crontabhoz az automatikus Let's Encrypt megújításhoz"
(crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fiTovábbi beállítások az Ön webhelyéhez
Fentiekben beszéltünk arról, hogyan állítja be a szkriptünk az NGINX-t és az NGINX Unitot, hogy működőképes TLS/SSL-el rendelkező webhelyet szolgáljon ki. Ezen kívül, az Ön igényeitől függően, a jövőben hozzáadhatja:
- Támogatás , amely javított tömörítést biztosít HTTPS-en keresztül
- a , hogy megakadályozza a webhelyével szembeni automatizált támadásokat
- WordPresshez, ami Önnek megfelelő
- segítségével (Ubuntuon)
- Postfix vagy msmtp, hogy a WordPress képes legyen e-mailt küldeni
- A webhely ellenőrzései, hogy megértsd, mennyi forgalmat képes elviselni
A weboldalad még jobb teljesítménye érdekében javasoljuk, hogy frissíts , a kereskedelmi szintű, NGINX nyílt forráskódú alapú termékünk. Előfizetőink dinamikusan betölthető Brotli modult kapnak, valamint (további díj ellenében) . Ezenkívül kínálunk , WAF modul az NGINX Plus számára, iparágvezető biztonsági technológiával az F5-től.
Figyelem. A nagy terhelésű webhely támogatásáért keresd a szakértőinket . Gyors és megbízható működést biztosítunk a webhelyednek vagy szolgáltatásodnak bármilyen terhelés alatt.
Forrás: habr.com
