Nginx-те әр түрлі қолданушылармен бірнеше VHost орналастырыңыз

Сервер болған кездегі әлемдегі ең қалыпты нәрсе - қауіпсіздік пен қауіпсіздік туралы ойлау, сіз ешқашан паранойя бола алмайсыз

Біршама кең таралған тәжірибе және ЕШТЕҢЕСІ - барлық пайдаланушыларға бірдей дерекқорлар үшін бірдей пайдаланушыны қолдану, тіпті егер root қолданылса, ол қаншалықты керемет көрінгенімен, (қаңғыбастық немесе білместік салдарынан) мұны жасаңыз, мен неге осылай әрекет етпеу керектігі туралы айтқан болатынмын басқа лауазымЕнді веб-серверді әр түрлі қолданушыларда өңдеуді қалай және неліктен бөлген дұрыс екенін түсіндірудің уақыты келді, бұл жолы ол қолданылатын болады Nginx.

DedicatedServer_SubImage

Пайдаланушылар мен веб-сервер дегеніміз не?

Мұны қысқаша және қарапайым түрде түсіндіру үшін веб-серверге (apache, nginx, кез-келген нәрсе) жүйеде процестерді, HDD-ден (суреттер, т.б.) файлдарды алатын және оларды жасайтын процестерді ашу қажет. клиенттің шолғышына қол жетімді. Веб-сервер файлдарды алып, оларды ешкім емес деп басқара алмайды, яғни мұның бәрін соңында жасайтын пайдаланушы қажет, ал мен қолданушы мен айтып отырған пайдаланушы, түсіндіңіз бе?

Бірнеше қолданушыда бөлу дегеніміз не?

Біздің серверде 2 веб-сайт бар делік, бұл біздің жеке жоба, ал тағы біреуі (бұл біздің дос қызымыз немесе бауырымыз деп елестетейік). Біз оларға бөлек дерекқорлар мен әр түрлі пайдаланушыларды қолданған кезде де, ақыр соңында екі веб-сайттың файлдарын бір қолданушы басқарады, PHP өңдеуді барлық сайттар үшін бір қолданушы басқарады (бұл әдетте www-деректер). Бұл ұсынылмаған тәжірибе, бәрін жақсы бөліп алған жөн, ескі сөзде айтылғандай, кешірім бергеннен гөрі қауіпсіз болған жақсы.

Жарайды мен түсінемін, оны Nginx көмегімен қалай жасауға болады

2000px-Nginx_logo.svg

Бірінші назар аударатын нәрсе Nginx-те PHP-ті өңдеуді Apache сияқты басқаратын өзіндік модуль жоқ, Nginx үшін біз PHP-CGI немесе PHP-FPM қолдануымыз керек, ол Apache-ге қарағанда жақсы (немесе жақсы) жұмыс істейді. PHP өңдеуді әр түрлі қолданушыларға бөлу үшін бізге Nginx емес, PHP конфигурация файлдарындағы (CGI немесе FPM) жолдарды өзгерту керек болады.

Сіз қолдандыңыз делік PHP-FPM, біз конфигурация файлын жасаймыз бассейн Белгілі бір сайт үшін, яғни бассейн PHP-өңдеуді PHP-FPM-ден бөлудің жолы болып табылады, бірақ біз бөліктерге барамыз.

1. Алдымен жүйенің қай қолданушысын қолданатынымызды білуіміз керек, бізде әлі күнге дейін бірде-бір жасалған және жақсы жоқ деп ойлаймын, оны жасайық:

Келесі командалардың барлығы тікелей артықшылықпен немесе sudo көмегімен әкімшілік артықшылықтармен орындалуы керек

adduser blog

Біз қолданушыны құрудың қалыпты процесін бастаймыз, пароль енгіземіз және т.б.

Мен қолданушыны тек біз мысалға алу үшін блог жүргіземін, біз орналастыратын бірінші сайт блог болады, солай ... қай сайтпен байланысты екенін біліп отыру керек.

1. Алдымен /etc/php5/fpm/pool.d/ сайтына өтейік:

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

2. Енді біз blog.conf деп аталатын файл жасаймыз:

touch blog.conf

3. Енді біз VHost блогы үшін пайдаланатын бассейннің конфигурациясын қоямыз:

Blog.conf файлын наномен өңдеңіз ... мысалы: sudo nano blog.conf
[блог] пайдаланушы = блог
топ = блог
тыңдау = / var / run / php5-fpm-блог.sock listen.owner = блог
тыңдау.group = блог
pm = ondemand pm.max_children = 96 chdir = /

Ескерту: Мен оларды қызылмен белгілейтінім - олар бұрын жасаған қолданушыға байланысты өзгеруі керек. Мысалы, егер олар басқа пайдаланушымен басқа VHost жасаса (мысалы форум) онда блогтың орнына әр жолға форум қойыңыз, түсінбейсіз бе?

4. Жаңа бассейннің конфигурациясы (біз жаңа жасаған және өңдеген blog.conf файлы), кезек Nginx VHost-қа сол сайт үшін басқа VHost үшін басқа шұлық қолдануын айтыңыз. Пайдаланылатын шұлық біз бұрын жариялаған болатын (/var/run/php5-fpm-blog.sock). Nginx VHost-ті өзгертейік және PHP өңдеу бөлігінде біз сол шұлықтарды қолдануды ұсынамыз. Мысалға:

location ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass unix: / var / run / php5-fpm-блог.сок;
fastcgi_params қосу; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

Көріп отырғаныңыздай, мен сол VHost-тың PHP өңделуін көрсетемін (бұл жолдар, мысалы, ішінде / etc / nginx / sites-enabled / vhost-blog) оны бұрын /etc/php5/fpm/pool.d/blog.conf ... өңдеген кезде жасаған /var/run/php5-fpm-blog.sock ... ішіндегі шұлықтармен жасаңыз. бұл түсінбеді ме?

5. Бұл жасалынғаннан кейін, біз екі қызметті (php5-fpm және nginx) және voila-ны қайта іске қосамыз, сол сайтты (vhost) өңдеуді www-data немесе root немесе оған ұқсас кез келген адам ЕМЕС, бірақ біз қолданушы бұрын анықталған.

Мұнда мен а-ның нәтижесін көрсетемін ps aux | grep fpm менің түйін серверлерімнің бірінде:

ps aux | grep fpm электронды кітабы 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: бассейн электронды кітабы 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: бассейн электронды кітабы www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm: бассейн www www 609 0.0 0.2 350600 5048 30? S Mar0 00:3 php-fpm: бассейн www tv611 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: бассейн tv3 tv615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv1818 журналы 1.7 1.7 437576 36396 09? S 55:0 46:2264 php-fpm: бассейн журналы 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: бассейн журналы оқушысы 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: бассейн оқушысы журналы 1.8 1.7 437764 36152 10? S 22:0 18:2754 php-fpm: pool gutl журналы 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 сәуір 0 16:7900 php-fpm: бассейн cgr оқушысы 0.3 2.5 457052 52444 25? S сәуір 20 23: 11021 php-fpm: бассейн оқушысы 0.4 2.5 458316 52864 28? S сәуір 5 57:11254 php-fpm: бассейн оқушысы cgr 0.0 1.0 363152 21708 28? S сәуір 0 12:13184 php-fpm: pool cgr cgr 0.0 1.0 362872 21360 28? S сәуір 0 08:XNUMX php-fpm: бассейн cgr

Көріп отырғаныңыздай ... Nginx + PHP-FPM қолданушыларының PHP өңдеуін бөлу өте оңай, онда сіз бірнеше бассейндер бар екенін көресіз, өйткені бірнеше пайдаланушылар бар.

ҚОРЫТЫНДЫ

Сервер туралы айтатын болсақ, сіз ешқашан параноид емессіз ... қауіпсіздік дегеніміз ойнауға болатын нәрсе емес, біз өз серверлеріміздің және олардың қызметтерінің қауіпсіздігін әрдайым жақсартуға тырысатын болсақ, біз (сәтті) қорқатынымыз аз болады. бұзу әрекеті немесе осыған ұқсас нәрсе 😉


Мақаланың мазмұны біздің ұстанымдарымызды ұстанады редакторлық этика. Қате туралы хабарлау үшін нұқыңыз Мұнда.

9 пікір, өз пікіріңізді қалдырыңыз

Пікіріңізді қалдырыңыз

Сіздің электрондық пошта мекен-жайы емес жарияланады. Міндетті өрістер таңбаланған *

*

*

  1. Деректерге жауапты: Мигель Анхель Гатан
  2. Деректердің мақсаты: СПАМ-ны басқару, түсініктемелерді басқару.
  3. Заңдылық: Сіздің келісіміңіз
  4. Деректер туралы ақпарат: заңды міндеттемелерді қоспағанда, деректер үшінші тұлғаларға жіберілмейді.
  5. Деректерді сақтау: Occentus Networks (ЕО) орналастырған мәліметтер базасы
  6. Құқықтар: Сіз кез-келген уақытта ақпаратты шектей, қалпына келтіре және жоя аласыз.

  1.   мылжың дижо

    Гара, қазіргі уақытта бұл заттар мүмкіндігінше автоматтандырылуы керек, мен сізге Ansible қолданбасын ұсынып отырмын. Агентсіз сізге қашықтағы хостта python, конфигурациясы өте қарапайым, yaml файлдары, Jinja шаблоны қажет.

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

    1.    KZKG ^ Гаара дижо

      Қарастырайық, бұл әрдайым тек WordPress сайттары үшін ғана емес, және ... хаха, мүмкін «volao» дегенді басатын шығар, бірақ мен бәрін серверде қалай жұмыс істейтінін білгім келеді, тіпті 1 минут жаңа шұлық және жаңа VHost 😀

      1.    мылжың дижо

        Ansible көмегімен сіз бәрін автоматтандырасыз, іс жүзінде өзіңіз қалаған нәрсені жасайсыз, бұл әдістің артықшылығы - тәжірибені жинақтап, содан кейін өз қалауыңыз бойынша орындайсыз, сізде жүктелген сайт бар деп елестетіңіз және қолданбалы серверлер арасында жүктеме теңгерімін жасағыңыз келеді. дәл сол күйінде конфигурациялануы керек, сіз бір қадамды өткізіп жібере алмайсыз немесе біреуінде басқаша жасай алмайсыз, процедураны 4 рет біртіндеп жасап жатқаныңызды елестете аласыз ба? Ansible-дің көмегімен инвентарь файлына хост атын қосу және Voilá сияқты қарапайым !!

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

      2.    мылжың дижо

        Жауапты культ туралы кешіріңіз, бірақ ол сіз тапқан технологиялардың бірі, сондықтан сіз оны барлығының дәл қазір қолданғанын қалайсыз, өйткені ол өте керемет және практикалық, дәл сіз NGINX-ті ашқан кезде және сіздің барлық достарыңыздың Apache-ден дереу кетуін қалайсыз.

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

  2.   Мстааравин дижо

    Менің жазбам осыны толықтыратынына сенімдімін ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   87 дижо

    Мен әзірлеушімін (немесе оқимын) және NGIX-те nginx + php-fpm теңшеу кезінде көптеген қиындықтар болды. Archlinux дистрибьюторы оны сервер ретінде жасаудың ең жақсы тәсілі емес екенін білемін, бірақ ngix немесе php нұсқаларын жаңартқан сайын әрқашан бәрі апатқа ұшырады, сондықтан мен бұл әрекеттен бас тарттым, lol… Бүгін мен классикалық Apache + PHP-де қалдым, бірақ Мен NGIX-ті тағы бір айналып өтетінімді көремін ... мүмкін виртуалды машинада

    1.    мылжың дижо

      Менталитет сәл өзгереді, nginx статикалық мазмұнға қызмет етеді және нақты PHP-ді басқаратын php-fpm үшін кері прокси ретінде қызмет етеді, сіз бөліктерден бастаңыз және орналастыруға біртіндеп қол жеткізіңіз, орналастыру үшін нұсқаулық іздеңіз сіз жұмыс істейтін шеңбер, әрқайсысы көпшіліктің аттары, статикалық, ресурстар және т.с.с. егжей-тегжейлі.

  4.   аноним дижо

    Жұртшылықта жоқ «дұшпан» сөзінен бас тартудың үлкен пайдасын көріңіз. Құдайға ант етемін, «үй иесі» деп айту соншалықты қиын ба?

  5.   Уил дижо

    Сәлемдесу, сіздердің мысалдарыңыз бойынша бассейнді тек wordpress backen үшін жасауға болатындығын білгім келеді, яғни wp-admin backend-ке кіретін қосылыстар үшін жаңа розетка жасайды

    location / wp-admin {
    root /var/www/yoursite.com/wp-admin;
    индекс index.php index.html index.htm;
    location ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    root /var/www/yoursite.com/wp-admin;
    include / 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/;
    }
    }