ProHoster > Blog > Adminisztráció > A WordPress telepítésének automatizálása NGINX Unit és Ubuntu segítségével
A WordPress telepítésének automatizálása NGINX Unit és Ubuntu segítségével
Sok oktatóanyag található a WordPress telepítésével kapcsolatban, a Google keresése a "WordPress install" kifejezésre körülbelül félmillió találatot eredményez. Valójában azonban nagyon kevés jó útmutató található közöttük, amelyek szerint a WordPress és az alapul szolgáló operációs rendszer úgy telepíthető és konfigurálható, hogy azok hosszú ideig képesek legyenek a támogatásra. Lehet, hogy a helyes beállítások nagymértékben függnek az egyedi igényektől, vagy ennek az az oka, hogy a részletes magyarázat miatt a cikk nehezen olvasható.
Ebben a cikkben megpróbáljuk kombinálni a két világ legjavát egy bash szkript biztosításával, amely automatikusan telepíti a WordPress-t Ubuntun, valamint végigjárjuk azt, elmagyarázva az egyes darabok működését, valamint a fejlesztés során tett kompromisszumokat. . Ha Ön haladó felhasználó, kihagyhatja a cikk szövegét, és csak vedd a forgatókönyvet módosítására és a környezetében való használatra. A szkript kimenete egy egyedi WordPress-telepítés Lets Encrypt támogatással, amely NGINX egységen fut, és alkalmas éles használatra.
A WordPress NGINX egység használatával történő üzembe helyezéséhez kifejlesztett architektúra leírása itt található régebbi cikk, most tovább konfiguráljuk azokat a dolgokat is, amelyekről ott nem volt szó (mint sok más oktatóanyagban):
WordPress CLI
Titkosítsuk a TLSSSL-tanúsítványokat
A tanúsítványok automatikus megújítása
NGINX gyorsítótár
NGINX tömörítés
HTTPS és HTTP/2 támogatás
Folyamatautomatizálás
A cikk leírja a telepítést egy kiszolgálóra, amely egyidejűleg egy statikus feldolgozó szervert, egy PHP feldolgozó szervert és egy adatbázist tartalmaz. A több virtuális gazdagépet és szolgáltatást támogató telepítés a jövő potenciális témája. Ha azt szeretné, hogy olyasmiről írjunk, ami nem szerepel ezekben a cikkekben, írja meg a megjegyzésekben.
Követelmények
Tárolószerver (évi LXC vagy LXD), egy virtuális gép vagy egy normál vaskiszolgáló legalább 512 MB RAM-mal, és telepítve van az Ubuntu 18.04 vagy újabb verziója.
Internet elérhető 80-as és 443-as portok
A kiszolgáló nyilvános IP-címéhez társított tartománynév
Root hozzáférés (sudo).
Építészeti áttekintés
Az architektúra megegyezik a leírtakkal korábban, egy háromszintű webalkalmazás. A PHP-motoron futó PHP szkriptekből és a webszerver által feldolgozott statikus fájlokból áll.
Általános elvek
A szkriptben lévő számos konfigurációs parancs be van csomagolva, ha az idempotencia feltételei vannak: a szkript többször is futtatható anélkül, hogy fennállna a már meglévő beállítások megváltoztatásának veszélye.
A szkript megpróbál szoftvert telepíteni tárolókból, így a rendszerfrissítéseket egyetlen paranccsal alkalmazhatja (apt upgrade Ubuntu számára).
A parancsok megpróbálják észlelni, hogy egy tárolóban futnak, így ennek megfelelően módosíthatják beállításaikat.
Annak érdekében, hogy a beállításokban beállítsa az induló szálfolyamatok számát, a szkript megpróbálja kitalálni a konténerekben, virtuális gépekben és hardverkiszolgálókban végzett munka automatikus beállításait.
A beállítások leírásánál mindenekelőtt az automatizálásra gondolunk, amely reményeink szerint az alapja lesz a saját infrastruktúra kódként történő létrehozásának.
Minden parancs felhasználóként fut gyökér, mert megváltoztatják az alapvető rendszerbeállításokat, de közvetlenül a WordPress normál felhasználóként fut.
Környezeti változók beállítása
A szkript futtatása előtt állítsa be a következő környezeti változókat:
WORDPRESS_URL a WordPress webhely teljes URL-címe, kezdve a https://.
LETS_ENCRYPT_STAGING - alapértelmezés szerint üres, de az érték 1-re állításával a Let's Encrypt staging szervereket fogod használni, amelyek a beállítások tesztelésekor szükségesek a gyakori tanúsítványkéréshez, ellenkező esetben a Let's Encrypt ideiglenesen blokkolhatja az ip-címedet a sok kérés miatt .
A szkript ellenőrzi, hogy ezek a WordPress-hez kapcsolódó változók be vannak-e állítva, és kilép, ha nem.
Az 572-576. szkriptsorok ellenőrzik az értéket LETS_ENCRYPT_STAGING.
Származtatott környezeti változók beállítása
Az 55-61. sorok szkriptje a következő környezeti változókat állítja be, akár valamilyen keményen kódolt értékre, akár az előző szakaszban beállított változókból kapott érték felhasználásával:
DEBIAN_FRONTEND="noninteractive" - Közli az alkalmazásokkal, hogy szkriptben futnak, és nincs lehetőség a felhasználói 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 változóban van megadva WORDPRESS_CLI_VERSION). A 162. sorban található szkript ezt az értéket használja annak ellenőrzésére, hogy a megfelelő WordPress CLI fájl lett-e letöltve.
UPLOAD_MAX_FILESIZE="16M" - a WordPressben feltölthető maximális fájlméret. Ezt a beállítást több helyen használják, így egyszerűbb egy helyen beállítani.
TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)" - a rendszer gazdagépneve, a WORDPRESS_URL változóból leolvasva. A megfelelő TLS/SSL-tanúsítványok beszerzésére szolgál a Let's Encrypt-től, valamint belső WordPress-ellenőrzés.
NGINX_CONF_DIR="/etc/nginx" - az NGINX beállításokkal rendelkező könyvtár elérési útja, beleértve a fő fájlt nginx.conf.
CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" — a változóból nyert Let's Encrypt tanúsítványok elérési útja a WordPress webhelyhez TLS_HOSTNAME.
Gazdanév hozzárendelése WordPress szerverhez
A szkript úgy állítja be a szerver gazdagépnevét, hogy megegyezzen a webhely tartománynevével. Ez nem kötelező, de kényelmesebb a kimenő levelek küldése SMTP-n keresztül, ha egyetlen szervert állít be, a parancsfájl szerint.
script kódot
# 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
Gazdanév hozzáadása az /etc/hosts fájlhoz
Kiegészítés WP-Cron időszakos feladatok futtatására használják, megköveteli, hogy a WordPress hozzáférjen önmagához HTTP-n keresztül. Annak érdekében, hogy a WP-Cron minden környezetben megfelelően működjön, a szkript hozzáad egy sort a fájlhoz / Etc / hostshogy a WordPress hozzáférjen önmagához a loopback felületen keresztül:
script kódot
# 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
A következő lépésekhez szükséges eszközök beszerelése
A szkript többi részének szüksége van néhány programra, és feltételezi, hogy a tárolók naprakészek. Frissítjük a tárolók listáját, majd telepítjük a szükséges eszközöket:
script kódot
# 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 egység és NGINX adattárak hozzáadása
A szkript telepíti az NGINX egységet és a nyílt forráskódú NGINX-et a hivatalos NGINX tárolókból, hogy megbizonyosodjon arról, hogy a legújabb biztonsági javításokat és hibajavításokat tartalmazó verziókat használja.
A szkript hozzáadja az NGINX egység tárat, majd az NGINX lerakat, hozzáadva a tárolókulcsot és a konfigurációs fájlokat apt, amely meghatározza a tárolókhoz való hozzáférést az interneten keresztül.
Az NGINX egység és az NGINX tényleges telepítése a következő részben történik. Előre hozzáadjuk a tárolókat, hogy ne kelljen többször frissítenünk a metaadatokat, ami gyorsabbá teszi a telepítést.
script kódot
# 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
Az NGINX, NGINX Unit, PHP MariaDB, Certbot (Titkosítsuk) és függőségeik telepítése
Az összes adattár hozzáadása után frissítse a metaadatokat, és telepítse az alkalmazásokat. A szkript által telepített csomagok a WordPress.org futtatásakor javasolt PHP-bővítményeket is tartalmazzák
script kódot
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
A PHP beállítása az NGINX Unit és a WordPress használatához
A szkript létrehoz egy beállítási fájlt a könyvtárban konf.d. Ez beállítja a PHP-feltöltések maximális méretét, bekapcsolja a PHP hibakimenetét STDERR-re, így azok az NGINX egység naplójába kerülnek, és újraindítja az NGINX egységet.
script kódot
# 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
A MariaDB-t választottuk a MySQL helyett, mivel több közösségi aktivitással rendelkezik, és valószínűleg ez is lesz alapértelmezés szerint jobb teljesítményt biztosít (valószínűleg itt minden egyszerűbb: a MySQL telepítéséhez hozzá kell adni egy másik tárolót, kb. fordító).
A szkript létrehoz egy új adatbázist, és hitelesítő adatokat hoz létre a WordPress eléréséhez a loopback felületen keresztül:
script kódot
# 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 program telepítése
Ebben a lépésben a szkript telepíti a programot WP-CLI. Ezzel telepítheti és kezelheti a WordPress beállításait anélkül, hogy manuálisan szerkesztené a fájlokat, frissítené az adatbázist, vagy be kellene lépnie a vezérlőpultra. Témák és kiegészítők telepítésére, valamint a WordPress frissítésére is használható.
script kódot
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
A WordPress telepítése és konfigurálása
A szkript a WordPress legújabb verzióját telepíti egy könyvtárba /var/www/wordpressés módosítja a beállításokat is:
Az adatbázis-kapcsolat Unix tartományi socket-en keresztül működik TCP helyett visszahurkolt állapotban, hogy csökkentse a TCP-forgalmat.
A WordPress előtagot ad hozzá https:// az URL-re, ha az ügyfelek HTTPS-en keresztül csatlakoznak az NGINX-hez, és elküldi a távoli gazdagép nevét (az NGINX által biztosított) PHP-nek. Ennek beállításához egy kódrészletet használunk.
A WordPressnek HTTPS-re van szüksége a bejelentkezéshez
Az alapértelmezett URL-struktúra erőforrásokon alapul
Beállítja a megfelelő engedélyeket a WordPress könyvtár fájlrendszerében.
script kódot
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
Az NGINX egység beállítása
A szkript úgy konfigurálja az NGINX egységet, hogy futtassa a PHP-t és feldolgozza a WordPress útvonalait, elkülönítve a PHP folyamat névterét és optimalizálja a teljesítménybeállításokat. Itt három funkcióra kell figyelni:
A névterek támogatását feltétel határozza meg, annak ellenőrzése alapján, hogy a szkript fut-e egy tárolóban. Erre azért van szükség, mert a legtöbb tárolóbeállítás nem támogatja a tárolók beágyazott indítását.
Ha a névterek támogatottak, tiltsa le a névteret hálózat. Ez lehetővé teszi a WordPress számára, hogy mindkét végponthoz csatlakozzon, és egyszerre legyen elérhető az interneten.
A folyamatok maximális számát a következőképpen határozzuk meg: (Elérhető memória a MariaDB és az NGINX Uniy futtatásához)/(RAM-korlát PHP + 5-ben)
Ez az érték az NGINX egység beállításaiban állítható be.
Ez az érték azt is jelenti, hogy mindig legalább két PHP-folyamat fut, ami azért fontos, mert a WordPress sok aszinkron kérést küld magának, és további folyamatok nélkül a futás pl. a WP-Cron megszakad. Érdemes lehet növelni vagy csökkenteni ezeket a korlátokat a helyi beállítások alapján, mert az itt létrehozott beállítások konzervatívak. A legtöbb éles rendszeren a beállítások 10 és 100 között vannak.
script kódot
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
Az NGINX beállítása
Alapvető NGINX beállítások konfigurálása
A szkript létrehoz egy könyvtárat az NGINX gyorsítótár számára, majd létrehozza a fő konfigurációs fájlt nginx.conf. Ügyeljen a kezelői folyamatok számára és a feltöltés maximális fájlméretének beállítására. Van egy sor is, amely tartalmazza a következő részben meghatározott tömörítési beállításokat, majd a gyorsítótárazási beállításokat.
A tartalom menet közbeni tömörítése az ügyfeleknek való elküldés előtt nagyszerű módja a webhely teljesítményének javításának, de csak akkor, ha a tömörítés megfelelően van beállítva. A szkript ezen része a beállításokon alapul ezért.
script kódot
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
Az NGINX beállítása WordPresshez
Ezután a szkript létrehoz egy konfigurációs fájlt a WordPress számára default.conf a katalógusban konf.d. Itt van beállítva:
A Let's Encrypttől Certboton keresztül kapott TLS-tanúsítványok aktiválása (beállítása a következő részben lesz)
TLS biztonsági beállítások konfigurálása a Let's Encrypt ajánlásai alapján
Alapértelmezés szerint engedélyezze a kérések gyorsítótárazását 1 órára
Tiltsa le a hozzáférési naplózást, valamint a hibanaplózást, ha a fájl nem található, két gyakran kért fájlnál: favicon.ico és robots.txt
A rejtett fájlokhoz és egyes fájlokhoz való hozzáférés megakadályozása . Phpaz illegális hozzáférés vagy a nem szándékos indítás megakadályozása érdekében
A statikus és betűtípusfájlok hozzáférési naplózásának letiltása
Útválasztás hozzáadása az index.php-hez és egyéb statikához.
script kódot
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
A Certbot beállítása a Let's Encrypt tanúsítványaihoz és azok automatikus megújítása
certbot az Electronic Frontier Foundation (EFF) ingyenes eszköze, amely lehetővé teszi a Let's Encrypt TLS-tanúsítványok beszerzését és automatikus megújítását. A szkript a következőket teszi a Certbot konfigurálásához a Let's Encrypt tanúsítványok NGINX-ben történő feldolgozására:
Leállítja az NGINX-et
Letölti az ajánlott TLS-beállításokat
A Certbotot futtatja a webhely tanúsítványainak beszerzéséhez
A tanúsítványok használatához újraindítja az NGINX-et
Úgy konfigurálja a Certbotot, hogy naponta 3:24-kor fusson, hogy ellenőrizze, nem kell-e megújítani a tanúsítványokat, és ha szükséges, töltse le az új tanúsítványokat, és indítsa újra az NGINX-et.
script kódot
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
A webhely további testreszabása
Fentebb már beszéltünk arról, hogy a szkriptünk hogyan konfigurálja az NGINX-et és az NGINX-egységet úgy, hogy a TLSSSL-t engedélyező termelésre kész webhelyet szolgáltasson. Igényeitől függően a jövőben a következőket is hozzáadhatja:
Támogatás brotli, továbbfejlesztett on-the-fly tömörítés HTTPS-en keresztül
Postfix vagy msmtp, hogy a WordPress leveleket küldhessen
Ellenőrizze webhelyét, hogy megértse, mekkora forgalmat képes kezelni
A webhely még jobb teljesítménye érdekében javasoljuk, hogy frissítsen a következőre NGINX Plus, nyílt forráskódú NGINX alapú kereskedelmi, vállalati szintű termékünk. Előfizetői dinamikusan feltöltött Brotli modult kapnak, valamint (felár ellenében) NGINX ModSecurity WAF. mi is kínálunk NGINX App Protect, egy WAF-modul az NGINX Plus-hoz, amely az F5 iparágvezető biztonsági technológiáján alapul.
NB A nagy terhelésű webhely támogatásához forduljon szakértőhöz Southbridge. Biztosítjuk weboldala vagy szolgáltatása gyors és megbízható működését bármilyen terhelés mellett.