Produktív webszerver beállítása az NGINX + PHP-FPM rendszeren

PHP-FPM (gyors folyamatkezelő) - Ez a FastCGI kezelő külön megvalósítása a PHP szkriptek végrehajtására. Az NGINX webkiszolgáló-csomag (amely statikumokat dolgoz fel) és a PHP-FPM alapján gyorsabb és gyorsabb webszervert építhet web-projektjeihez, a klasszikus NGINX csomag, az Apache és a mod_php modul (LAMP verem) használatához képest..

LEMP - Nyílt forráskódú szoftverek, amelyek általában együtt vannak telepítve, hogy a kiszolgálón futtassanak webhelyeket és webes alkalmazásokat. Ez a rövidítés egy webkiszolgálót tartalmazó Linux operációs rendszer készletére utal nginx (ő helyettesíti Apache egy gyakoribb veremben LAMP), az adatbázissal MySQL (MariaDB) és c php dinamikus adatok feldolgozására.

Ebben a cikkben fontolóra vesszük a LEMP-verem telepítését és optimalizálását egy betöltött webprojekt fogadására a CentOS 7-es kiszolgálón, az NGINX + PHP-FPM + MariaDB / MySQL + csomag alapján, és telepítjük a Encrypt tanúsítványt az SSL webhelyre. .

Tartalom:

  • Repository kapcsolat, szerver frissítés
  • Az Nginx webszerver telepítése és konfigurálása
  • Telepítse a php-fpm-t és a további php-modulokat
  • Telepítse a titkosítást és csatlakoztassa a tanúsítványt
  • Telepítse a MySQL / MariaDB-t egy webszerverre
  • Az Nginx és a PHP-FPM konfigurálása nagy terhelésű projektekhez

Repository kapcsolat, szerver frissítés

Mivel a telepítést egy újonnan telepített szerverre hajtják végre a CentOS segítségével, csatlakoztatnia kell a népszerű EPEL lerakatot, és frissítenie kell a kiszolgálón lévő összes csomagot.

# yum install epel-release -y
# yum update -y

A tároló telepítve volt, de nem találtak frissítési csomagokat, mert friss CentOS-lemezkép került telepítésre.

Az Nginx webszerver telepítése és konfigurálása

A legújabb verzió telepítése nginx, csatlakoztassa a fejlesztői lerakatot a következő parancs futtatásával:

# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Vagy létrehozhat egy lerakatkonfigurációs fájlt /etc/yum.repos.d/nginx.repo a következő tartalommal:

[nginx] name = nginx repo baseurl = http: //nginx.org/packages/centos/7/$basearch/ gpgcheck = 0 engedélyezve = 1 

Ha CentOS 8-at használ, módosítsa a verziót az URL-ben.

Telepítse az Nginx webszerver-csomagot a yum (vagy dnf) csomagkezelő használatával:

# yum install nginx -y

Most már futhatsz nginx és adja hozzá az indításhoz a systemctl használatával:

# systemctl start nginx
# systemctl engedélyezze az nginx használatát

Készített symlink az /etc/systemd/system/multi-user.target.wants/nginx.service könyvtárból az /usr/lib/systemd/system/nginx.service oldalhoz.

A webszerver működésének ellenőrzéséhez nyissa meg a kiszolgáló IP-címét a böngészőben.

Ha a tesztoldal nem nyílik meg, ellenőrizze a kiszolgáló tűzfalán megengedett szolgáltatások, portok és zónák beállításait.

Állítsa be a konfigurációs fájlt egy különálló build-centos.info domainhez. Hozzon létre külön könyvtárat a webhelyhez és magát a konfigurációs fájlt:

# mkdir -p /var/www/build-centos.info && mkdir -p /var/www/build-centos.info/log

Nyissa meg a konfigurációs fájlt:

# nano /etc/nginx/conf.d/build-centos.info.conf

És adja hozzá a következő tartalmat:

szerver figyel 80; kiszolgálónév build-centos.info; root /var/www/build-centos.info; index index.php index.html index.htm; access_log /var/www/build-centos.info/log/access.log main; error_log /var/www/build-centos.info/log/error.log; hely / visszatérés 301 https: //build-centos.info$request_uri;  hely ~ * ^. +. (js | css | png | jpg | jpeg | gif | ico | woff) $ return 301 https: //build-centos.info$request_uri;  hely ~ \ .php $ visszatérés 301 https: //build-centos.info$request_uri;  location = /favicon.ico log_not_found off; access_log off;  location = /robots.txt újraírni ^ /robots.txt szünet; engedjen meg mindent; log_not_found off; access_log off;  hely ~ /\.ht mindenkit tagadni;  szerver figyelj 80; szerver_neve www.build-centos.info; újraírni ^ https: //build-centos.info$request_uri? állandó;  szerver hallgassa meg 443 ssl http2; kiszolgálónév build-centos.info; root /var/www/build-centos.info; index index.php index.html index.htm; access_log /var/www/build-centos.info/log/ssl-access.log main; error_log /var/www/build-centos.info/log/ssl-error.log; keepalive_timeout 60; ssl_certificate /etc/letsencrypt/live/build-centos.info/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/build-centos.info/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES256-GCM-838-GCM-838-GCM-838 SHA256: DHE-DSS-AES128-GCM-SHA256: kEDH + AESGCM: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA: ECDHE-ECDA RSA-AES256-SHA384: ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA: ECDHE-ECDSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA AES128-SHA256: DHE-RSA-AES256-SHA256: DHE-DSS-AES256-SHA: DHE-RSA-AES256-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES128-SHA256: AES128-SHA256: SHA: AES256-SHA: AES: KAMÁLIA: DES-CBC3-SHA:! ANULL:! ENULL:! EXPORT :! DES :! RC4:! MD5:! PSK:! AECDH:! EDH-DSS-DES-CBC3-SHA EDH-RSA-DES-CBC3-SHA: KRB5-DES-CBC3-SHA ”; add_header Szigorú szállítás-biztonság 'max-age = 604800'; hely / try_files $ uri $ uri / /index.php?$args;  hely ~ * ^. +. (js | css | png | jpg | jpeg | gif | ico | woff) $ access_log off; legfeljebb lejár;  hely ~ \ .php $ try_files $ uri = 404; fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /var/www/build-centos.info; fastcgi_param SCRIPT_FILENAME /var/www/build-centos.info/$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /var/www/build-centos.info/$fastcgi_script_name; tartalmazza a fastcgi_params; fastcgi_param QUERY_STRING $ query_string; fastcgi_param REQUEST_METHOD $ request_method; fastcgi_param CONTENT_TYPE $ content_type; fastcgi_param CONTENT_LENGTH $ content_length; fastcgi_param HTTPS bekapcsolva; fastcgi_intercept_errors on; fastcgi_ignore_client_abort ki; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k;  location = /favicon.ico log_not_found off; access_log off;  hely = /robots.txt mindet engedélyez; log_not_found off; access_log off;  hely ~ /\.ht mindenkit tagadni;  szerver hallgassa 443 ssl http2; szerver_neve www.build-centos.info; újraírni ^ https: //build-centos.info$request_uri? állandó;  

A konfigurációs fájl a biztonságos https protokollon keresztüli hozzáférés beállításait tartalmazza, mivel sok népszerű CMS alapértelmezés szerint ezen keresztül működik. A jövőben telepítünk és konfigurálunk egy ingyenes Let's Encrypt SSL tanúsítványt (hasonlóan a Let's Encrypt tanúsítvány telepítéséhez a Windows Server IIS webhelyén).

Telepítse a php-fpm-t és a további php-modulokat

Az Nginxnek nincs beépített PHP kezelője, ezért telepítenünk kell php-fpm és számos php modul, amelyeket a PHP szkriptek feldolgozására használnak.

Php-fpm Ez egy nagyon egyszerű és gyors PHP folyamatkezelő. Nem használja a HTTP protokollt (mint például az apache), és a speciális FastCGI protokollal működik. Könnyűsége és egyszerűsége miatt az FPM sokkal gyorsabban képes feldolgozni a PHP kéréseket. Ebben az esetben az apache-hoz hasonló konfigurációval összehasonlítva sokkal kevesebb memória fog felhasználni.

Az Nginx viszont jelentős haszonnal jár a statika visszatérésében. A konfigurációnkban az ngnix proxy szerverként működik (gyorsítótárazás és előtér-kiszolgáló), a php-fpm pedig háttérképként fog működni..

A php legújabb verzióinak telepítéséhez használja a REMI lerakatot:

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

A telepítés után szerkessze a fájlt /etc/yum.repos.d/remi-php74.repo:

Indítsa el a telepítést php-fpm és népszerű php modulok:

# yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-opcache php-körte php-xml php-xmlrpc php-mbstring php-snmp php-szappan php-zip

Indítsa el a szolgáltatást php-fpm és adjuk hozzá az indításhoz:

# systemctl indítsa el a php-fpm-t
# systemctl engedélyezi a php-fpm-et

Készített symlink az /etc/systemd/system/multi-user.target.wants/php-fpm.service oldalról az /usr/lib/systemd/system/php-fpm.service oldalra.

Annak ellenőrzéséhez, hogy a szolgáltatás elindult-e, futtassa a következő parancsot:

# lsof -i: 9000

COMMAND PID USER FD TÍPUS MÉRET / KIKAPCSOLÓ NEVE php-fpm 1551 root 7u IPv4 2078435 0t0 TCP localhost: cslistener (LISTEN) php-fpm 1552 apache 9u IPv4 2078435 0t0 TCP localhost: cslistener (LISTEN) php-fpm 2078435 0t0 TCP localhost: cslistener (LISTEN) php-fpm 1554 apache 9u IPv4 2078435 0t0 TCP localhost: cslistener (LISTEN) php-fpm 1555 apache 9u IPv4 2078435 0t0 TCP localhost: cslistener (LISTEN) php-fpm TCP localhost: cslistener (LISTEN)

szolgáltatás php-fpm át kell futni egy unix aljzaton. A konfigurációs fájlban /etc/php-fpm.d/www.conf törölje a meghallgatás sorát = 127.0.0.1:9000, és adja hozzá:

listen = =var/run/php-fpm/php-fpm.sock listen.mode = 0660 listen.owner = nginx listen.group = nginx

A php-fpm futtatásához nem az apache felhasználótól (alapértelmezés szerint) adja meg a következő paramétereket a konfigurációs fájlban:

felhasználó = nginx csoport = nginx

A php-fpm konfiguráció megváltoztatása után újra kell indítania a szolgáltatást:

# systemctl indítsa újra a php-fpm-t

Telepítse a titkosítást és csatlakoztassa a tanúsítványt

Ingyenes „Encrypt” tanúsítvány kiadásához telepítenie kell a szükséges certbotot.

# yum install certbot

Akkor tegye:

# certbot bizonyosan

A parancs futtatása után ki kell töltenie az összes adatot, megadva a postafiókot, a tartományt és így tovább:

# certbot bizonyosan

A hibakeresési napló mentése a /var/log/letsencrypt/letsencrypt.log mappába Hogyan szeretné hitelesíteni az ACME CA-val? -------------------------------------------------- ----------------------------- 1: Spin fel egy ideiglenes webszervert (önálló) 2: Helyezzen fájlokat a webroot könyvtárba (webroot) - -------------------------------------------------- ---------------------------- Válassza ki a megfelelő számot [1-2], majd [Enter] (nyomja meg a 'c' gombot a visszavonáshoz): 1 kiválasztott beépülő modul: önálló hitelesítő, telepítő nincs. Írja be az e-mail címet (sürgős megújításhoz és biztonsági értesítésekhez használjon) (írja be a „c” -t a visszavonáshoz): [email protected] Új HTTPS kapcsolat indítása (1): acme-v01.api.letsencrypt .org ------------------------------------------------ ------------------------------- Kérjük, olvassa el a Szolgáltatási feltételeket a https://letsencrypt.org/documents/LE- oldalon SA-v1.1.1-August-1-2016.pdf. Ahhoz, hogy regisztráljon az ACME szerveren, a https://acme-v01.api.letsencrypt.org/directory ----------------------- -------------------------------------------------- ------ (A) gree / (C) ancel: A --------------------------------- ---------------------------------------------- Ön hajlandó lenne megoszthatja e-mail címét az Electronic Frontier Foundation-vel, a Let's Encrypt projekt alapító partnerével és a Certbotot fejlesztő nonprofit szervezettel? Szeretnénk e-mailt küldeni az EFF-ről és az internet titkosításával, a felhasználók védelmével és a digitális jogok védelmével kapcsolatos munkájáról. -------------------------------------------------- ----------------------------- (Y) es / (N) o: N Kérjük, írja be domain névét (neveit) ( vesszővel és / vagy szóközzel elválasztva) (írja be a „c” -t a visszavonáshoz): build-centos.info Új tanúsítvány megszerzése A következő kihívások teljesítése: tls-sni-01 kihívás a build-centos.info számára Várás ellenőrzésre vár ... Tisztítás kihívások FONTOS MEGJEGYZÉSEK: - Gratulálunk! A tanúsítvány és a lánc mentésre került a /etc/letsencrypt/live/build-centos.info/fullchain.pem webhelyen. A kulcsfájlt a következő címre mentette: /etc/letsencrypt/live/build-centos.info/privkey.pem A tanúsítvány 2018. január 24-én hatályát veszti. A tanúsítvány új vagy módosított változatának a jövőben történő beszerzéséhez egyszerűen futtassa újra a certbot-t. A tanúsítványok * összes * * nem interaktív megújításához futtassa a "certbot atjaunítást" - A fiók hitelesítő adatait a Certbot konfigurációs könyvtárába mentettük az / etc / letsencrypt mappába. Most biztonságosan készítsen biztonsági másolatot erről a mappáról. Ez a konfigurációs könyvtár tanúsítványokat és magánkulcsokat is tartalmaz, amelyeket a Certbot kapott, így ideális a mappából rendszeres biztonsági másolatot készíteni. 

A tanúsítvány helyes kiállítása érdekében a domainnek létezőnek kell lennie, és a megfelelő webkiszolgálóra kell irányítania.

A tanúsítvány kiadása után indítsa újra az nginx webszervert és ellenőrizze az eredményt.

# systemctl indítsa újra az nginx fájlt

A kapcsolat a böngészőben biztonságos.!

A tanúsítványok automatikus megújításához módosítsa a konfigurációs fájlt /etc/letsencrypt/renewal/build-centos.info.conf az alábbiak szerint:

# atjaun_before_expiry = 30 nap
verzió = 0.18.1
archive_dir = / etc / letsencrypt / archive / build-centos.info
cert = /etc/letsencrypt/live/build-centos.info/cert.pem
privkey = /etc/letsencrypt/live/build-centos.info/privkey.pem
lánc = /etc/letsencrypt/live/build-centos.info/chain.pem
fullchain = /etc/letsencrypt/live/build-centos.info/fullchain.pem

# A megújítási folyamat során használt opciók
[Renewalparams]
hitelesítő = webroot
telepítő = Nincs
számla = e9c86e6aa57b45f9614bc7c0015927a5
post_hook = nginx-újratöltés
[[Webroot_map]]
www.build-centos.info = /var/www/build-centos.info
build-centos.info = /var/www/build-centos.info

A fájl megváltoztatása után adja hozzá a feladatot a koronához:

30 2 * * * root / usr / bin / certbot megújítás - post-hook "nginx -s reload"

Hogy igazoljam, hogy az nginx működik-e a php-vel, létrehoztam egy index.php fájlt és hozzáadtam hozzá:

Telepítse a MySQL / MariaDB-t egy webszerverre

Ezt a lépést teljesen kihagyjuk, mivel az oldalon már található egy cikk a telepítésről és a hangolásról MariaDB. Használd ki őt.

Az Nginx és a PHP-FPM konfigurálása nagy terhelésű projektekhez

Annak érdekében, hogy webszervere nagy teljesítményű legyen, és nagyszámú ügyféltől érkező kérést tudjon feldolgozni, egy hardver nem elegendő. Fontos a művelet megfelelő konfigurálása nginx és php-fpm.

Nginx beállítása

Nyissa meg a fájlt /etc/nginx/nginx.conf és az alábbiak szerint módosítsa az Nginx konfigurációját:

  • 2. munkafolyamat; - állítsa be a munkafolyamatok számát a kiszolgálón lévő magok számával.
  • worker_connections 1024; - meghatározza a kapcsolatok számát egy munkafolyamatban. Állítsa be az értékeket 1024 és 4096 között.
  • használja az epoll-t; - optimális csatlakozási módszer Linuxhoz.
  • multi_accep on; - Az nginx elfogadja a kapcsolatok maximális számát.

Http blokk:

  • tcp_nodelay on; - fejléceket és a fájl elejét egy kötegben küldi el.
  • tcp_nopush be;

Nagyon sok statikus fájlt tartalmazó projekteknél ügyeljen arra, hogy engedélyezze a gzip tömörítést:

gzip tovább;

Adjon hozzá nagy számú fájltípust, hogy minden googlespeed ellenőrzés sikeres legyen:
gzip_types alkalmazás / atom + xml alkalmazás / javascript szöveg / javascript alkalmazás / json alkalmazás / ld + json alkalmazás / manifest + json alkalmazás / rss + xml alkalmazás / vnd.geo + json font / ttf alkalmazás / x-font-ttf alkalmazás / vnd .ms-fontobject alkalmazás / font-woff alkalmazás / font-woff2 alkalmazás / x-web-app-manifest + json alkalmazás / xhtml + xml alkalmazás / xml font / opentype kép / bmp image / svg + xml kép / x-icon text / gyorsítótár-manifeszt szöveg / css szöveg / egyszerű szöveg / vcard szöveg / vnd.rim.location.xloc text / vnd.wap.wml text / vtt text / x-komponens text / x-cross-domain-policy;

A tömörítés beállítása felgyorsítja a projektet.

  • keepalive_timeout 30; - a webszerver 30 másodpercet vár, mielőtt bezárja a tartós kapcsolatot
  • keepalive_requests 100; - egy ügyféltől megtartott kérések maximális száma
  • reset_timedout_connection be; - engedélyezze ezt a beállítást, ha nem akarja, hogy a válaszadást leállító ügyfél kapcsolatát visszaállítsa.
  • kliens_test_idő 10; - a webszerver 10 másodpercet vár a kliens kérésének visszaigazolására, ezután a kapcsolat visszaáll.
  • send_timeout 2; - Ha az ügyfél leállítja a válasz olvasását a webszerverről, az nginx visszaállítja a vele fennálló kapcsolatot.

Ha webhelye nem rendelkezik nagy fájlok letöltéséről, korlátozza ezt az nginx értékre:

  • client_max_body_size 2m; - a szerver nem fogad el 2 MB-nál nagyobb kéréseket.

Ha a projekt tartalma nem változik olyan gyakran, használhatja a gyorsítótárazás "legfeljebb lejár;"Vagy adja hozzá a megfelelő beállítást a gazdagép konfigurációs fájljához a kívánt fájltípushoz, például:

hely ~ * ^. +. (js | css | png | jpg | jpeg | gif | ico | woff) $
lejár 7d;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A megadott fájltípusok gyorsítótára 7 napig tárolódik. A gyorsítótárat ezzel a funkcióval vezérelheti. Az összes módosítás után ne felejtse el újraindítani az nginx-et:

# systemctl indítsa újra az nginx fájlt

Php-fpm beállítás

A php-fpm telepítésekor azonnal átvitte egy unix aljzatba. Ez jelentősen növeli a termelékenységet. Becslések szerint a termelékenység 2-3-szor növekszik. A többi php-fpm paramétert külön-külön konfigurálni kell az egyes projektekhez. Fontolja meg a 1024 MB memóriájú kiszolgáló beállításának példáját..

A php-fpm-hez kb. 512 mb-ot tudunk elkülöníteni, a többit az adatbázis és az nginx alatt hagyjuk.

A konfigurációs fájlhoz /etc/php-fpm/www.conf, add:

  • pm.max_children = 18 - a gyermekfolyamatok maximális száma
  • pm.start_servers = 6 - az indításkor létrehozott gyermekfolyamatok száma
  • pm.min_spare_servers = 4 - az inaktív szerverfolyamatok minimális száma
  • pm.max_spare_servers = 16 - inaktív szerverfolyamatok maximális száma
  • pm.max_requests = 400 - a gyermekfolyamat kéréseinek száma, amely után a folyamatot újraindítják.

A projekt terhelésének elemzésekor minden paramétert meg kell változtatni, ezek az értékek elméletiek.

A jelenlegi szerveren azonnal telepítettem a CMS Bitrix legújabb verzióját a teljesítmény tesztelésére. Véleményem szerint ez a leginkább erőforrás-igényes CMS, és az eredmények nem rosszak, tekintve, hogy ez egy KVM virtuális gép, egy maggal (vCPU) és 1024 RAM-mal:

Nem festettem a MariaDB beállítások optimalizálását, mivel van egy megfelelő cikk az oldalon. A cikk szerint megfogalmaztam a my.cnf paramétereit, és az adatbázis kiváló eredményeket mutatott.

A webhely elindításakor szabad szemmel észreveszi, hogy az nginx + php-fpm sokkal gyorsabban dolgozza fel kéréseit, és sokkal gyorsabban adja vissza az oldalakat, mint az apache2 + mod_php. Ha lehetősége van stressztesztek elvégzésére a szerver beállítása során, akkor ez kétségtelenül plusz, de ha ez nem lehetséges, megváltoztathatja az erőforrások beállításait a kézikönyv alapján.