Värd flera VHosts med olika användare i Nginx

Det mest normala i världen när du har en server är att tänka på säkerhet och mer säkerhet, du kan aldrig vara paranoid nog 😉

En något vanlig praxis och INGENTING rekommenderas är att använda samma användare för alla databaser, värre om root används, vilket så otroligt som det kan tyckas, det finns de som (på grund av vagvans eller okunnighet) gör detta, jag har redan pratat om varför du INTE ska göra så här i ett annat inläggNu är det dags att förklara hur och varför det är bättre att separera webbserverbearbetningen hos olika användare, den här gången kommer den att användas nginx.

DedicatedServer_SubImage

Vad är det för användare och webbserver?

För att förklara det på ett kort och enkelt sätt måste webbservern (apache, nginx, vad som helst) öppna processer i systemet, processer som kommer att vara de som tar filerna från hårddisken (bilder etc.) och gör dem tillgängliga för klientens webbläsare . Webbservern kan inte helt enkelt ta filerna och manipulera dem så att de inte är någon, det vill säga den behöver en användare som kommer att vara den som kommer att göra allt detta till slut, och den användaren är den jag pratar om, förstår du?

Vad är det för att separera i flera användare?

Anta att vi på vår server har två webbplatser, våra som är ett personligt projekt och en annan (låt oss föreställa oss att det är vår flickvän eller bror). Även när vi använder separata databaser och olika användare för att komma åt dem, i slutändan manipuleras filerna på båda webbplatserna av samma användare, hanteras PHP-behandlingen av samma användare för alla webbplatser (det är vanligtvis www-data). Detta är en icke-rekommenderad metod, det är bättre att ha allt väl åtskilt, som ett gammalt ordspråk säger, det är bättre att vara säker än ledsen.

Ok, jag förstår, hur gör jag det med Nginx

2000px-Nginx_logo.svg

Det första att notera är att Nginx inte har en egen modul som hanterar PHP-bearbetning som Apache gör, för Nginx behöver vi använda PHP-CGI eller PHP-FPM, vilket fungerar lika bra (eller bättre) än Apache. Så för att separera PHP-bearbetning mellan olika användare, måste vi ändra rader i PHP-konfigurationsfiler (CGI eller FPM), inte Nginx själv.

Anta att du använder PHP-FPM, vi skapar en konfigurationsfil av poolen för en specifik webbplats, det vill säga, en pool är sättet att separera PHP-bearbetning från PHP-FPM, men vi går i delar.

1. Först måste vi veta vilken användare av systemet vi kommer att använda, jag antar att vi fortfarande inte har några skapade och väl, låt oss skapa det:

Alla följande kommandon MÅSTE köras med administrativa behörigheter, antingen med direkt root eller med sudo

adduser blog

Vi startar den normala processen att skapa en användare, ange lösenordet etc.

Jag bloggar användaren bara för att följa exemplet, att den första webbplatsen som vi kommer att vara värd kommer att vara en blogg, ja att ... att känna till varje användare som webbplatsen är relaterad till

1. Låt oss först gå till /etc/php5/fpm/pool.d/:

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

2. Nu skapar vi en fil som heter blog.conf:

touch blog.conf

3. Nu lägger vi konfigurationen av poolen som vi kommer att använda för VHost-bloggen:

Redigera blog.conf-filen med nano ... till exempel: sudo nanoblog.conf
[blogg] användare = blogg
grupp = blogg
lyssna = / var / kör / php5-fpm-blogg.sock listen.owner = blogg
lyssna.grupp = blogg
pm = efterfrågan pm.max_children = 96 chdir = /

Obs: Vad jag markerar dem i rött är vad de måste ändra beroende på användaren de tidigare skapade. Till exempel om de skapar en annan VHost med en annan användare (forum till exempel) förstås det istället för att blogga helt enkelt forum i var och en av raderna?

4. När konfigurationen av den nya poolen (blog.conf-filen som vi just skapade och redigerade), är det turen att berätta för Nginx VHost att använda en annan strumpa för den VHost, för den här webbplatsen. Strumpan som kommer att användas är den som vi tidigare deklarerade (/var/run/php5-fpm-blog.sock). Låt oss redigera Nginx VHost och i PHP-bearbetningsdelen anger vi att vi använder strumporna. Till exempel:

plats ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass unix: / var / run / php5-fpm-blogg.strumpa;
inkluderar fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

Som du kan se anger jag att PHP-bearbetningen av den VHost (dessa rader finns till exempel inuti / etc / nginx / sites-enabled / vhost-blog) gör det med strumporna som finns i /var/run/php5-fpm-blog.sock ... vilket är den vi tidigare skapade när vi redigerade /etc/php5/fpm/pool.d/blog.conf ... är det inte förstått ?

5. När detta är klart startar vi om båda tjänsterna (php5-fpm och nginx) och voila, vi kommer att se att behandlingen av den webbplatsen (vhost) INTE görs av www-data eller root eller någon liknande, utan av användaren som vi tidigare definierade .

Här visar jag resultatet av en ps aux | grep fpm på en av min nods servrar:

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: pool www www 609 0.0 0.2 350600 5048 30? S Mar0 00:3 php-fpm: pool www tv611 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv3 tv615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv1818 magazine 1.7 1.7 437576 36396 09? S 55:0 46:2264 php-fpm: poolmagasin 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: pooltidskrift elev 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: pool pupill magazine 1.8 1.7 437764 36152 10? S 22:0 18:2754 php-fpm: pool gutl magazine 3.5 1.3 356724 27164 10? S 38:0 00:5624 php-fpm: pool gutl cgr 0.0 1.0 365168 22696 28? S Apr0 16:7900 php-fpm: pool cgr pupil 0.3 2.5 457052 52444 25? S Apr 20 23:11021 php-fpm: pool pupill pupill 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: pool cgr

Som du kan se ... att separera PHP-bearbetning av användare som använder Nginx + PHP-FPM är väldigt enkelt, där ser du att det finns flera pooler, eftersom det finns flera användare.

Slutsatser

När det gäller servrar är du aldrig tillräckligt paranoid ... säkerhet är inte något att spela med, ju mer vi alltid försöker förbättra säkerheten för våra servrar och deras tjänster, desto mindre sannolikt kommer vi att vara rädda av ett (framgångsrikt) hackförsök eller något liknande 😉


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   djägare sade

    Gaara, i nuvarande tider bör dessa saker automatiseras så mycket som möjligt, jag rekommenderar att du försöker Ansible. Utan agent behöver du bara python på fjärrvärden, mycket enkelt att konfigurera, yaml-filer, Jinja-mallar.

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

    1.    KZKG ^ Gaara sade

      Låt oss se, det är inte alltid bara för WordPress-webbplatser, och ... haha ​​kanske Ansible klickar på volao, men jag föredrar att veta exakt hur allt fungerar på servern, även om jag måste spendera en minut på att skapa nya strumpor och en nya VHost 😀

      1.    djägare sade

        Med Ansible automatiserar du allt, du gör praktiskt taget vad du vill, fördelen med den här metoden är att du inkapslar övningen och sedan utför efter behag, föreställ dig att du har en tungt laddad webbplats och du vill göra belastningsbalansering mellan applikationsservrar, dessa måste konfigurerad exakt samma kan du inte hoppa över ett steg eller göra något annat i en av dem, kan du tänka dig att göra proceduren steg för steg fyra gånger? Med Ansible är det så enkelt som att lägga till värdnamnet i inventeringsfilen och Voilá !!

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

      2.    djägare sade

        Ledsen för Ansible-kulten, men det är en av dessa tekniker som du upptäcker och du vill att alla ska använda den nu eftersom den är så cool och praktisk, det är som när du upptäcker NGINX och du vill att alla dina vänner ska lämna Apache omedelbart.

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

  2.   mstaaravin sade

    Jag är säker på att mitt inlägg kompletterar detta ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   Rötter87 sade

    Jag är (eller studerar för att vara) utvecklare och med NGIX hade jag många problem när jag konfigurerade nginx + php-fpm. Jag vet att archlinux distro inte är det bästa för att göra det som en server, men varje gång jag uppdaterade en version av ngix eller php kraschade allt alltid så jag gav upp försöket lol ... För idag stannar jag kvar med den klassiska Apache + PHP men Jag får se om jag går runt NGIX igen ... kanske i en virtuell maskin

    1.    djägare sade

      Mentaliteten förändras lite, nginx serverar det statiska innehållet och fungerar som en omvänd proxy för php-fpm som är vem som kör den verkliga PHP, du måste börja i delar och uppnå distribuering steg för steg, leta efter en guide för att distribuera ramverk som du arbetar med, var och en har sin detalj med namnen på allmänheten, statisk, resurser, etc ...

  4.   anonym sade

    Gör samhället den stora förmånen att överge ordet "hostear", som inte finns. Av Gud, är det så svårt att säga "värd"?

  5.   Vill att sade

    Hälsningar, efter ditt exempel skulle jag vilja veta om en pool bara kunde göras för wordpress backen, det vill säga för wp-admin att skapa ett nytt uttag för inkommande anslutningar till backend

    plats / wp-admin {
    root /var/www/yoursite.com/wp-admin;
    index index.php index.html index.htm;
    plats ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    root /var/www/yoursite.com/wp-admin;
    inkludera / 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/;
    }
    }