Hostte viac VHosts s rôznymi používateľmi v Nginx

Najbežnejšou vecou na svete, keď máte server, je myslieť na bezpečnosť a väčšiu bezpečnosť, nikdy nemôžete byť dosť paranoidní 😉

Trochu bežnou praxou a NIČ sa neodporúča, je používať rovnakého používateľa pre všetky databázy, horšie, ak sa použije root, čo je síce neuveriteľné, ale aj takí (kvôli tuláctvu alebo nevedomosti) urob to, už som hovoril o tom, prečo by si sa takto nemal správať iný príspevokTeraz je čas vysvetliť, ako a prečo je lepšie oddeliť spracovanie webového servera od rôznych používateľov, tentokrát ich bude používať Nginx.

DedicatedServer_SubImage

Čo je to s používateľmi a webovým serverom?

Aby sme to vysvetlili stručným a jednoduchým spôsobom, musí webový server (apache, nginx, čokoľvek) otvoriť procesy v systéme, procesy, ktoré prevezmú súbory z HDD (obrázky atď.) A vytvoria ich. k dispozícii v prehliadači klienta. Webový server nemôže jednoducho brať súbory a manipulovať s nimi tak, že nie sú nikým, to znamená, že potrebuje používateľa, ktorý bude ten, kto to všetko nakoniec urobí, a tento používateľ je ten, o ktorom hovorím, chápete?

Čo je to rozdelenie u niekoľkých používateľov?

Predpokladajme, že na našom serveri máme 2 webové stránky, naše je osobný projekt a ďalšie (Poďme si predstaviť, že je to naša priateľka alebo brat). Aj keď na prístup k nim používame samostatné databázy a rôznych používateľov, na konci sú súbory oboch webových stránok manipulované rovnakým používateľom, spracovanie PHP je spravované rovnakým používateľom pre všetky stránky (sú to zvyčajne údaje www). Toto je neodporúčaná prax, je lepšie mať všetko dobre oddelené, ako hovorí staré príslovie, je lepšie byť v bezpečí, ako ľutovať.

Dobre, chápem, ako to urobím s Nginxom

2000px-Nginx_logo.svg

Prvá vec, ktorú si treba uvedomiť, je, že Nginx nemá vlastný modul, ktorý by spracovával PHP tak, ako to robí Apache, pre Nginx musíme používať PHP-CGI alebo PHP-FPM, ktoré fungujú rovnako dobre (alebo lepšie) ako Apache. Aby sme teda oddelili spracovanie PHP od rôznych používateľov, budeme musieť zmeniť riadky v konfiguračných súboroch PHP (CGI alebo FPM), nie samotný Nginx.

Predpokladajme, že používate PHP-FPM, vytvoríme konfiguračný súbor z kaluž Pre konkrétny web, to znamená, že pool je spôsob, ako oddeliť spracovanie PHP od PHP-FPM, ideme však po častiach.

1. Najprv musíme vedieť, ktorého používateľa systému budeme používať, budem predpokladať, že stále nemáme žiadneho vytvoreného a dobre, vytvorme si ho:

Všetky nasledujúce príkazy MUSIA byť vykonané s administrátorskými oprávneniami, buď s priamym rootom alebo pomocou sudo

adduser blog

Spustíme normálny proces vytvárania používateľa, zadáme heslo atď.

Používateľa blogujem, len aby som nasledoval príklad, že prvou stránkou, ktorú budeme hostiť, bude blog, teda ... poznať každého používateľa, s ktorým stránka súvisí

1. Najprv poďme na /etc/php5/fpm/pool.d/:

cd /etc/php5/fpm/pool.d/

2. Teraz vytvoríme súbor s názvom blog.conf:

touch blog.conf

3. Teraz vložíme konfiguráciu fondu, ktorú použijeme pre blog VHost:

Upravte súbor blog.conf pomocou nano ... napríklad: sudo nanoblog.conf
[blog] užívateľ = blog
skupina = blog
počúvať = / var / run / php5-fpm-blog.sock listen.owner = blog
počúvať.skupina = blog
pm = ondemand pm.max_children = 96 chdir = /

Poznámka: To, čo ich označím červenou farbou, musia upraviť v závislosti od používateľa, ktorého predtým vytvorili. Napríklad, ak vytvoria ďalší VHost s iným používateľom (napríklad fórum) potom namiesto blogu jednoducho vložte fórum do každého z riadkov, je to pochopené?

4. Akonáhle je konfigurácia nového fondu (súbor blog.conf, ktorý sme práve vytvorili a upravili), je na rade povedať spoločnosti Nginx VHost, aby pre túto stránku VHost použila inú ponožku. Ponožka, ktorá sa použije, bude tá, ktorú sme predtým deklarovali (/var/run/php5-fpm-blog.sock). Upravme Nginx VHost a v časti spracovania PHP označíme použitie týchto ponožiek. Napríklad:

umiestnenie ~ \ .php $ {if (! -f $ request_filename) {návrat 404; }
fastcgi_pass unix: / var / run / php5-fpm-blog.ponožka;
zahrnúť fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

Ako vidíte, naznačujem, že PHP spracovanie tohto VHost (tieto riadky sú napríklad vo vnútri / etc / nginx / sites-enabled / vhost-blog) urobte to s ponožkami nachádzajúcimi sa v /var/run/php5-fpm-blog.sock ... čo je ten, ktorý sme predtým vytvorili pri úprave /etc/php5/fpm/pool.d/blog.conf ... is nerozumel?

5. Akonáhle je to hotové, reštartujeme obe služby (php5-fpm a nginx) a voila, uvidíme, že spracovanie tohto webu (vhost) NEROBÍ www-data alebo root alebo ktokoľvek podobný, ale používateľ, ktorého sme predtým definované.

Tu vám ukážem výstup a ps aux | grep fpm na jednom zo serverov môjho uzla:

ps aux | grep fpm ebook 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: pool ebook ebook 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: pool ebook www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm: bazén www www 609 0.0 0.2 350600 5048 30? S Mar0 00:3 php-fpm: bazén www tv611 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: bazén tv3 tv615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv1818 magazín 1.7 1.7 437576 36396 09? S 55:0 46:2264 php-fpm: časopis časopisu pool 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: žiak časopisu pool 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: pool pupil magazine 1.8 1.7 437764 36152 10? S 22:0 18:2754 php-fpm: zásobník na gutl bazéna 3.5 1.3 356724 27164 10? S 38:0 00:5624 php-fpm: bazén gutl cgr 0.0 1.0 365168 22696 28? S apr0 16:7900 php-fpm: kalkulačka cgr bazénu 0.3 2.5 457052 52444 25? S 20. apríla 23:11021 php-fpm: bazén žiak žiak 0.4 2.5 458316 52864 28? S Apr5 57:11254 php-fpm: pool pupil cgr 0.0 1.0 363152 21708 28? S Apr0 12:13184 php-fpm: pool cgr cgr 0.0 1.0 362872 21360 28? S apr0 08:XNUMX php-fpm: bazéna cgr

Ako vidíte ... oddelenie spracovania PHP používateľmi pomocou Nginx + PHP-FPM je naozaj jednoduché, vidíte, že existuje niekoľko združení, pretože existuje niekoľko používateľov.

Závery

Pokiaľ ide o servery, nikdy nie ste dosť paranoidní ... bezpečnosť nie je nič, s čím by sme sa mali hrať, čím viac sa vždy snažíme vylepšiť bezpečnosť našich serverov a ich služieb, tým menšia je pravdepodobnosť, že sa nás (úspešný) bude báť. pokus o hack alebo niečo podobné 😉


9 komentáre, nechajte svoj

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   lovec dijo

    Gaara, v súčasnej dobe by tieto veci mali byť čo najviac automatizované, odporúčam ti vyskúšať Ansible. Bez agenta potrebujete na vzdialenom hostiteľovi iba python, ktorý sa veľmi ľahko konfiguruje, súbory yaml, šablóny Jinja.

    https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx

    1.    KZKG ^ Gaara dijo

      Uvidíme, to nie je vždy len pre WordPress stránky, a ... haha ​​možno Ansible klikne volao, ale radšej viem presne, ako to na serveri všetko funguje, aj keď musím 1 minútu venovať tvorbe nových ponožiek a nový VHost 😀

      1.    lovec dijo

        S programom Ansible všetko automatizujete, robíte prakticky čokoľvek chcete. Výhodou tejto metódy je, že zapuzdríte postup a potom ho ľubovoľne spustíte, predstavíte si, že máte veľmi zaťažené stránky a chcete vykonať vyrovnávanie záťaže medzi aplikačnými servermi, tieto musíte byť nakonfigurovaní úplne rovnako, nemôžete preskočiť krok alebo urobiť niečo iné v jednom z nich, viete si predstaviť, že by ste postup robili krok za krokom 4-krát? S Ansible je to také jednoduché ako pridať názov hostiteľa do súboru inventára a Voilá !!

        http://www.ansible.com/how-ansible-works

      2.    lovec dijo

        Prepáčte za kult Ansible, ale je to jedna z týchto technológií, ktorú objavíte a chcete, aby ju teraz používal každý, pretože je tak skvelá a praktická, ako keby ste objavili NGINX a chcete, aby všetci vaši priatelia okamžite opustili Apache.

        https://speakerdeck.com/slok/ansible-all-the-things

  2.   mstaaravin dijo
  3.   Hnije87 dijo

    Som (alebo sa budem študovať) vývojár a s NGIX som mal veľa problémov pri konfigurácii nginx + php-fpm. Viem, že archlinuxové distro nie je najlepšie robiť to ako server, ale vždy, keď som aktualizoval verziu ngix alebo php, vždy všetko havarovalo, takže som pokus vzdal lol ... Dnes zostávam pri klasickom Apache + PHP, ale uvidím, či znova obídem NGIX ... možno na virtuálnom stroji

    1.    lovec dijo

      Mentalita sa trochu zmení, nginx slúži statickému obsahu a slúži ako reverzný proxy server pre php-fpm, ktorý riadi skutočné PHP, musíte začať po častiach a dosiahnuť nasadenie krok za krokom, hľadať sprievodcu nasadením rámec, s ktorým pracujete, každý z nich má svoje podrobnosti podľa mien verejnosti, statiky, zdrojov atď.

  4.   Anonymný dijo

    Doprajte komunite veľkú priazeň, aby sa vzdalo slova „hostear“, ktoré neexistuje. Preboha, je také ťažké povedať „hostiteľ“?

  5.   Chce dijo

    Zdravím, po vašom príklade by ma zaujímalo, či by bolo možné vytvoriť fond iba pre wordpress backen, teda pre wp-admin, ktorý vytvorí nový socket pre prichádzajúce spojenia do backendu

    umiestnenie / wp-admin {
    root /var/www/yoursite.com/wp-admin;
    index index.php index.html index.htm;
    umiestnenie ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    root /var/www/yoursite.com/wp-admin;
    zahrnúť / etc / nginx / fastcgi_params;

    fastcgi_pass server unix:/run/php5-fpm2.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 4k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_read_timeout 1240;
    }
    location ~* ^/wp-admin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    root /var/www/tusitio.com/wp-admin/;
    }
    }