Mag-host ng maraming VHost na may iba't ibang mga gumagamit sa Nginx

Ang pinaka-normal na bagay sa mundo kapag mayroon kang isang server ay mag-isip tungkol sa seguridad at mas maraming seguridad, hindi ka maaaring maging sapat na paranoid 😉

Ang isang medyo pangkaraniwang kasanayan at WALA nang inirerekumenda, ay ang paggamit ng parehong gumagamit para sa lahat ng mga database, mas masahol kung ginamit ang ugat, na hindi kapani-paniwala na tila, may mga (dahil sa pamamasyal o kamangmangan) gawin ito, napag-usapan ko na kung bakit HINDI ka dapat kumilos ng ganito isa pang postNgayon ay oras na upang ipaliwanag kung paano at bakit mas mahusay na paghiwalayin ang pagproseso ng web server sa iba't ibang mga gumagamit, sa oras na ito ay gagamitin ito Nginx.

DedicatedServer_SubImage

Ano iyon ng mga gumagamit at web server?

Upang ipaliwanag ito sa isang maikling at simpleng paraan, ang web server (apache, nginx, anupaman) ay kailangang magbukas ng mga proseso sa system, mga proseso na ang kukuha ng mga file mula sa HDD (mga imahe, atbp.) At gawin ang mga ito magagamit sa browser ng client. Ang web server ay hindi maaaring kunin ang mga file at manipulahin ang mga ito bilang walang tao, iyon ay, kailangan nito ng isang gumagamit na ang gagawa ng lahat ng ito sa huli, at ang gumagamit na iyon ang pinag-uusapan ko, naiintindihan ba?

Ano iyon sa paghihiwalay sa maraming mga gumagamit?

Ipagpalagay na sa aming server mayroon kaming 2 mga website, ang amin ay isang personal na proyekto, at isa pa (isipin natin ang ating kasintahan o kapatid). Kahit na gumagamit kami ng magkakahiwalay na mga database at iba't ibang mga gumagamit upang ma-access ang mga ito, sa huli ang mga file ng parehong mga website ay manipulahin ng parehong gumagamit, ang pagpoproseso ng PHP ay pinamamahalaan ng parehong gumagamit para sa lahat ng mga site (ito ay karaniwang www-data). Ito ay isang hindi inirerekumendang kasanayan, mas mahusay na paghihiwalayin ang lahat nang maayos, tulad ng isang lumang kasabihan, mas mabuti na maging ligtas kaysa humihingi ng paumanhin.

Ok naiintindihan ko, paano ko ito gagawin sa Nginx

2000px-Nginx_logo.svg

Ang unang bagay na dapat tandaan ay ang Nginx ay walang sariling module na humahawak sa pagpoproseso ng PHP tulad ng ginagawa ng Apache, para sa Nginx kailangan nating gumamit ng PHP-CGI o PHP-FPM, na gumagana rin (o mas mahusay) kaysa sa Apache. Kaya upang paghiwalayin ang pagproseso ng PHP sa iba't ibang mga gumagamit, kakailanganin naming baguhin ang mga linya sa mga file ng pagsasaayos ng PHP (CGI o FPM), hindi sa Nginx mismo.

Ipagpalagay na ginagamit mo Ang PHP-FPM, lilikha kami ng isang file ng pagsasaayos ng pul Para sa isang tukoy na site, iyon ay, ang isang pool ay ang paraan upang paghiwalayin ang pagpoproseso ng PHP mula sa PHP-FPM, ngunit pumupunta kami sa mga bahagi.

1. Una dapat nating malaman kung aling gumagamit ng system ang gagamitin natin, ipalagay ko na wala pa rin tayong nilikha at mahusay, likhain natin ito:

Ang lahat ng mga sumusunod na utos ay DAPAT na maisagawa sa mga pribilehiyong pang-administratibo, alinman sa direktang ugat o paggamit ng sudo

adduser blog

Sisimulan namin ang normal na proseso ng paglikha ng isang gumagamit, ipasok ang password, atbp.

Binlog ko ang gumagamit upang sundin lamang ang halimbawa, na ang unang site na mai-host namin ay isang blog, mabuti na ... upang malaman ang bawat gumagamit na may aling site ang nauugnay

1. Pumunta muna tayo sa /etc/php5/fpm/pool.d/:

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

2. Ngayon, lilikha kami ng isang file na tinatawag na blog.conf:

touch blog.conf

3. Ngayon ay ilalagay namin ang pagsasaayos ng pool na gagamitin namin para sa VHost blog:

I-edit ang file ng blog.conf gamit ang nano ... halimbawa: sudo nano blog.conf
[Blog] gumagamit = Blog
pangkat = Blog
makinig = / var / run / php5-fpm-Blog.sock makinig.ong may-ari = Blog
makinig.grupo = Blog
pm = ondemand pm.max_teen = 96 chdir = /

Tandaan: Ang marka ko sa kanila sa pula ay kung ano ang dapat nilang baguhin depende sa gumagamit na dati nilang nilikha. Halimbawa, kung lumikha sila ng isa pang VHost sa ibang gumagamit (forum halimbawa) pagkatapos sa halip na blog ay simpleng maglagay ng forum sa bawat linya, naiintindihan ba?

4. Kapag ang pagsasaayos ng bagong pool (ang file ng blog.conf na nilikha namin at na-edit lamang), turn naman upang sabihin sa Nginx VHost na gumamit ng ibang medyas para sa VHost na iyon, para sa site na ito. Ang sock na gagamitin ay ang dati naming idineklara (/var/run/php5-fpm-blog.sock). I-edit natin ang Nginx VHost at sa bahagi ng pagpoproseso ng PHP, ipinapahiwatig namin na gamitin ang mga medyas. Halimbawa:

lokasyon ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass unix: / var / run / php5-fpm-Blog.sock;
isama ang fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

Tulad ng nakikita mo, ipinapahiwatig ko na ang pagpoproseso ng PHP ng VHost na iyon (ang mga linya na iyon ay halimbawa sa loob / etc / nginx / mga site-pinagana / vhost-blog) gawin ito sa mga medyas na matatagpuan sa /var/run/php5-fpm-blog.sock ... na kung saan ay nilikha namin dati kapag nag-e-edit /etc/php5/fpm/pool.d/blog.conf ... ay hindi nito naintindihan?

5. Kapag tapos na ito, i-restart namin ang parehong serbisyo (php5-fpm at nginx) at voila, makikita namin na ang pagproseso ng site na iyon (vhost) ay HINDI ginagawa ng www-data o root o sinumang katulad, ngunit ng gumagamit na namin dating tinukoy.

Narito ipakita ko sa iyo ang output ng a ps aux | grep fpm sa isa sa mga server ng aking node:

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: pool magazine magazine 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: pool magazine pupil 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: 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 Apr20 23:11021 php-fpm: pool pupil pupil 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

Tulad ng nakikita mo ... ang paghihiwalay sa pagproseso ng PHP ng mga gumagamit na gumagamit ng Nginx + PHP-FPM ay talagang madali, doon mo nakikita na maraming mga pool, dahil maraming mga gumagamit.

Konklusyon

Pagdating sa mga server, hindi ka sapat na paranoid ... ang seguridad ay hindi isang bagay upang mapaglaruan, mas palaging sinusubukan nating mapabuti ang seguridad ng aming mga server at kanilang mga serbisyo, mas malamang na matakot tayo ng isang (matagumpay) hack pagtatangka o anumang katulad 😉


Ang nilalaman ng artikulo ay sumusunod sa aming mga prinsipyo ng etika ng editoryal. Upang mag-ulat ng isang pag-click sa error dito.

9 na puna, iwan mo na ang iyo

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   dhunter dijo

    Gaara, sa kasalukuyang mga oras na ang mga bagay na ito ay dapat na awtomatiko hangga't maaari, inirerekumenda kong subukan mo ang Ansible. Nang walang ahente, kailangan mo lamang ng sawa sa remote host, napakasimpleng i-configure, mga yaml file, mga template ng Jinja.

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

    1.    KZKG ^ Gaara dijo

      Tingnan natin, hindi lamang iyon palaging para sa mga site ng WordPress, at ... haha ​​marahil ay Ansible click volao, ngunit mas gusto kong malaman nang eksakto kung paano gumagana ang lahat sa server, kahit na gumugol ako ng 1 minuto sa paglikha ng isang bagong medyas at isang bagong VHost 😀

      1.    dhunter dijo

        Sa Ansible i-automate mo ang lahat, gagawin mo halos kahit anong gusto mo, ang bentahe ng pamamaraang ito ay na-encapsulate mo ang kasanayan at pagkatapos ay naisakatuparan sa kalooban, isipin na mayroon kang isang mabibigat na nai-load na site at nais mong gawin ang pagbabalanse ng load sa pagitan ng mga server ng application, ang mga ito kailangang mai-configure nang eksakto sa parehong hindi mo maaaring laktawan ang isang hakbang o gumawa ng anumang naiiba sa isa sa mga ito, maaari mong isipin ang paggawa ng pamamaraan ng hakbang-hakbang na 4 na beses? Sa Ansible kasing simple ng pagdaragdag ng hostname sa file ng imbentaryo at Voilá !!

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

      2.    dhunter dijo

        Paumanhin tungkol sa kulturang Ansible, ngunit ito ay isa sa mga teknolohiyang ito na natuklasan mo at nais mong gamitin ito ng lahat ngayon dahil napakagaling at praktikal, tulad ng kapag natuklasan mo ang NGINX at nais mong ang lahat ng iyong mga kaibigan ay umalis kaagad sa Apache.

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

  2.   Mstaaravin dijo
  3.   Rots87 dijo

    Ako (o pag-aaral na maging) isang developer at kasama ang NGIX Nagkaroon ako ng maraming mga problema kapag nag-configure nginx + php-fpm. Alam ko na ang archlinux distro ay hindi ang pinakamahusay na gawin ito bilang isang server, ngunit sa tuwing nag-a-update ako ng isang bersyon ng ngix o php lahat ng bagay ay palaging nag-crash kaya binigay ko ang pagtatangka lol ... Para sa ngayon mananatili ako sa klasikong Apache + PHP ngunit makikita ko kung lilibot ulit ako sa NGIX ... marahil sa isang virtual machine

    1.    dhunter dijo

      Ang mentalidad ay nagbago nang kaunti, ang nginx ay nagsisilbi ng static na nilalaman at nagsisilbing isang reverse proxy para sa php-fpm na siyang nagpapatakbo ng totoong PHP, kailangan mong magsimula sa mga bahagi at makamit ang pag-deploy nang paunti-unti, maghanap ng isang gabay na mai-deploy ang balangkas na nagtatrabaho sa iyo, ang bawat isa ay may detalye nito sa pamamagitan ng mga pangalan ng publiko, static, mapagkukunan, atbp.

  4.   Hindi kilala dijo

    Ginagawa ba ng pamayanan ang malaking pabor sa pag-abandona sa salitang "hostear", na wala. Sa Diyos, napakahirap bang sabihin na "host"?

  5.   Gusto ni Upang dijo

    Mga pagbati, pagsunod sa iyong halimbawa nais kong malaman kung ang pool ay maaaring gawin lamang para sa backpress ng wordpress, iyon ay, para sa wp-admin na gumagawa ng isang bagong socket para sa mga papasok na koneksyon sa backend

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