โฮสต์ VHost หลายตัวกับผู้ใช้ที่แตกต่างกันใน Nginx

สิ่งปกติที่สุดในโลกเมื่อคุณมีเซิร์ฟเวอร์คือการคิดถึงความปลอดภัยและความปลอดภัยที่มากขึ้นคุณจะไม่หวาดระแวงมากพอ😉

แนวทางปฏิบัติที่ค่อนข้างธรรมดาและไม่มีอะไรแนะนำคือการใช้ผู้ใช้คนเดียวกันสำหรับฐานข้อมูลทั้งหมดแย่กว่านั้นถ้ามีการใช้รูทซึ่งอาจดูเหมือนไม่น่าเชื่อมีผู้ที่ (เนื่องจากความไม่แน่นอนหรือความไม่รู้) ทำสิ่งนี้ฉันได้พูดคุยแล้วว่าทำไมคุณไม่ควรทำเช่นนี้ใน โพสต์อื่นตอนนี้ถึงเวลาอธิบายว่าทำไมจึงดีกว่าที่จะแยกการประมวลผลเว็บเซิร์ฟเวอร์ในผู้ใช้ที่แตกต่างกันคราวนี้จะใช้ Nginx.

เซิร์ฟเวอร์เฉพาะ_SubImage

ผู้ใช้และเว็บเซิร์ฟเวอร์คืออะไร?

เพื่ออธิบายโดยย่อและง่าย ๆ เว็บเซิร์ฟเวอร์ (apache, nginx อะไรก็ได้) จำเป็นต้องเปิดกระบวนการในระบบกระบวนการที่จะเป็นผู้ที่นำไฟล์จาก HDD (รูปภาพ ฯลฯ ) และสร้างขึ้น ใช้ได้กับเบราว์เซอร์ของลูกค้า เว็บเซิร์ฟเวอร์ไม่สามารถใช้ไฟล์และจัดการไฟล์ได้โดยไม่มีใครกล่าวคือมันต้องการผู้ใช้ที่จะเป็นคนที่จะทำสิ่งเหล่านี้ในตอนท้ายและผู้ใช้คนนั้นคือคนที่ฉันพูดถึงคุณเข้าใจไหม

อะไรคือการแยกผู้ใช้หลายคน?

สมมติว่าบนเซิร์ฟเวอร์ของเราเรามีเว็บไซต์ 2 แห่งซึ่งเป็นโครงการส่วนตัวและอีกเว็บไซต์หนึ่ง (ลองจินตนาการว่าเป็นแฟนหรือพี่ชายของเรา). แม้ว่าเราจะใช้ฐานข้อมูลที่แยกจากกันและผู้ใช้ที่แตกต่างกันเพื่อเข้าถึงในท้ายที่สุดไฟล์ของทั้งสองเว็บไซต์จะถูกจัดการโดยผู้ใช้คนเดียวกันการประมวลผล PHP ได้รับการจัดการโดยผู้ใช้คนเดียวกันสำหรับทุกไซต์ (โดยปกติจะเป็น www-data). นี่เป็นวิธีปฏิบัติที่ไม่แนะนำเป็นการดีกว่าถ้าแยกทุกอย่างออกจากกันอย่างที่เคยพูดไปจะดีกว่าปลอดภัยดีกว่าเสียใจ

ตกลงฉันเข้าใจวิธีที่ฉันทำกับ Nginx

2000px-Nginx_logo.svg

สิ่งแรกที่ควรทราบคือ Nginx ไม่มีโมดูลของตัวเองที่จัดการการประมวลผล PHP เหมือนที่ Apache ทำสำหรับ Nginx เราจำเป็นต้องใช้ PHP-CGI หรือ PHP-FPM ซึ่งทำงานได้ดี (หรือดีกว่า) มากกว่า Apache ดังนั้นเพื่อแยกการประมวลผล PHP ระหว่างผู้ใช้ที่แตกต่างกันเราจะต้องเปลี่ยนบรรทัดในไฟล์การกำหนดค่า PHP (CGI หรือ FPM) ไม่ใช่ Nginx เอง

สมมติว่าคุณใช้ 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 ด้วย nano ... ตัวอย่างเช่น: sudo nanoblog.conf
[บล็อก] ผู้ใช้ = บล็อก
กลุ่ม = บล็อก
ฟัง = / var / run / php5-fpm-บล็อก.sock listen.owner = บล็อก
Listen.group = บล็อก
pm = ondemand pm.max_children = 96 chdir = /

หมายเหตุ: สิ่งที่ฉันทำเครื่องหมายเป็นสีแดงคือสิ่งที่ต้องแก้ไขขึ้นอยู่กับผู้ใช้ที่พวกเขาสร้างไว้ก่อนหน้านี้ ตัวอย่างเช่นหากพวกเขาสร้าง VHost อื่นกับผู้ใช้รายอื่น (ตัวอย่างเช่น) จากนั้นแทนที่จะใส่บล็อกเพียงแค่ใส่ฟอรัมในแต่ละบรรทัดเข้าใจหรือไม่?

4. เมื่อกำหนดค่าพูลใหม่ (ไฟล์ blog.conf ที่เราเพิ่งสร้างและแก้ไข) ถึงคราวที่ต้องบอก Nginx VHost ให้ใช้ถุงเท้าอื่นสำหรับ VHost สำหรับไซต์นี้ ถุงเท้าที่จะใช้จะเป็นถุงเท้าที่เราประกาศไว้ก่อนหน้านี้ (/var/run/php5-fpm-blog.sock) มาแก้ไข Nginx VHost และในส่วนการประมวลผล PHP เราระบุให้ใช้ถุงเท้านั้น ตัวอย่างเช่น:

ตำแหน่ง ~ \ .php $ {if (! -f $ request_filename) {กลับ 404; }
fastcgi_pass ยูนิกซ์: / var / run / php5-fpm-บล็อก.ถุงเท้า;
รวม fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

อย่างที่คุณเห็นฉันระบุว่าการประมวลผล PHP ของ VHost นั้น (บรรทัดเหล่านี้เป็นตัวอย่างภายใน / etc / nginx / sites-enabled / vhost-blog) ทำกับถุงเท้าที่พบใน /var/run/php5-fpm-blog.sock ... ซึ่งเป็นสิ่งที่เราสร้างไว้ก่อนหน้านี้เมื่อแก้ไข /etc/php5/fpm/pool.d/blog.conf ... คือ มันไม่เข้าใจ?

5. เมื่อเสร็จแล้วเราจะรีสตาร์ททั้งบริการ (php5-fpm และ nginx) และ voila เราจะเห็นว่าการประมวลผลของไซต์นั้น (vhost) ไม่ได้ทำโดย www-data หรือ root หรือใครก็ตามที่คล้ายกัน แต่โดยผู้ใช้ที่เรา กำหนดไว้ก่อนหน้านี้

ฉันจะแสดงผลลัพธ์ของไฟล์ ps aux | เกรปเอฟพีเอ็ม บนเซิร์ฟเวอร์ของโหนดของฉัน:

ps aux | grep fpm ebook 586 0.0 0.0 349360 1204? ส 30 มี.ค. 0:00 php-fpm: pool ebook ebook 589 0.0 0.0 349360 1204? ส 30 มี.ค. 0:00 php-fpm: pool ebook www 608 0.0 0.2 350084 5008? ส 30 มี.ค. 0:00 php-fpm: พูล www www 609 0.0 0.2 350600 5048 30? ส 0 มี.ค. 00:3 php-fpm: พูล www tv611 0.0 0.0 349360 1204 30? ส 0 มี.ค. 00:3 php-fpm: pool tv3 tv615 0.0 0.0 349360 1204 30? ส 0 มี.ค. 00:3 php-fpm: pool tv1818 magazine 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: pool magazine pupil 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: นิตยสาร pool pupil 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: pool cgr pupil 0.3 2.5 457052 52444 25? S เม.ย. 20 23:11021 php-fpm: pool pupil pupil 0.4 2.5 458316 52864 28? S เม.ย. 5 57:11254 php-fpm: pool pupil cgr 0.0 1.0 363152 21708 28? S เม.ย. 0 12:13184 php-fpm: พูล cgr cgr 0.0 1.0 362872 21360 28? S เม.ย. 0 08:XNUMX php-fpm: pool cgr

อย่างที่คุณเห็น ... การแยกการประมวลผล PHP โดยผู้ใช้ที่ใช้ Nginx + PHP-FPM นั้นง่ายมากคุณจะเห็นว่ามีหลายพูลเนื่องจากมีผู้ใช้หลายคน

สรุปผลการวิจัย

เมื่อพูดถึงเซิร์ฟเวอร์คุณจะไม่หวาดระแวงมากพอ ... ความปลอดภัยไม่ใช่สิ่งที่ต้องเล่นยิ่งเราพยายามปรับปรุงความปลอดภัยของเซิร์ฟเวอร์และบริการของเรามากเท่าไหร่โอกาสที่เราจะกลัว (ประสบความสำเร็จ) น้อยลง พยายามแฮ็คหรืออะไรก็ได้ที่คล้ายกัน😉


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   นักล่า dijo

    กาอาระในปัจจุบันสิ่งเหล่านี้ควรเป็นไปโดยอัตโนมัติให้มากที่สุดฉันขอแนะนำให้คุณลองใช้ Ansible หากไม่มีตัวแทนคุณต้องใช้ python บนโฮสต์ระยะไกลเท่านั้นง่ายมากในการกำหนดค่าไฟล์ yaml เทมเพลต Jinja

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

    1.    KZKG ^ กาอาระ dijo

      มาดูกันว่านั่นไม่ได้มีไว้สำหรับเว็บไซต์ WordPress เท่านั้นและ ... ฮ่าฮ่าบางที Ansible อาจคลิกที่ volao แต่ฉันอยากรู้ว่าทุกอย่างทำงานบนเซิร์ฟเวอร์อย่างไรแม้ว่าฉันจะต้องใช้เวลา 1 นาทีในการสร้างถุงเท้าใหม่และ VHost ใหม่😀

      1.    นักล่า dijo

        ด้วย Ansible คุณทำให้ทุกอย่างเป็นไปโดยอัตโนมัติคุณสามารถทำอะไรก็ได้ตามที่คุณต้องการข้อดีของวิธีนี้คือคุณสรุปการฝึกฝนแล้วดำเนินการตามต้องการจินตนาการว่าคุณมีไซต์ที่โหลดมากและคุณต้องการทำโหลดบาลานซ์ระหว่างแอปพลิเคชันเซิร์ฟเวอร์สิ่งเหล่านี้ ต้องกำหนดค่าให้เหมือนกันทุกประการคุณไม่สามารถข้ามขั้นตอนหรือทำอะไรที่แตกต่างจากขั้นตอนใดขั้นตอนหนึ่งได้คุณนึกภาพออกไหมว่าทำตามขั้นตอนทีละขั้นตอน 4 ครั้ง? ด้วย Ansible นั้นง่ายเพียงแค่เพิ่มชื่อโฮสต์ในไฟล์สินค้าคงคลังและVoilá !!

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

      2.    นักล่า dijo

        ขออภัยเกี่ยวกับลัทธิ Ansible แต่เป็นหนึ่งในเทคโนโลยีเหล่านี้ที่คุณค้นพบและคุณต้องการให้ทุกคนใช้ตอนนี้เพราะมันเจ๋งมากและใช้งานได้จริงเหมือนกับเมื่อคุณค้นพบ NGINX และคุณต้องการให้เพื่อน ๆ ทุกคนออกจาก Apache ทันที

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

  2.   เอ็มสตาราวิน dijo

    ฉันแน่ใจว่าโพสต์ของฉันเติมเต็มสิ่งนี้ ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   โรตส์ 87 dijo

    ฉัน (หรือศึกษาที่จะเป็น) นักพัฒนาและด้วย NGIX ฉันมีปัญหามากมายเมื่อกำหนดค่า nginx + php-fpm ฉันรู้ว่า archlinux distro ไม่ใช่สิ่งที่ดีที่สุดที่จะทำให้เป็นเซิร์ฟเวอร์ แต่ทุกครั้งที่ฉันอัปเดตเวอร์ชันของ ngix หรือ php ทุกอย่างมักจะล้มเหลวดังนั้นฉันจึงล้มเลิกความพยายามฮ่า ๆ ... สำหรับวันนี้ฉันอยู่กับ Apache + แบบคลาสสิก PHP แต่ฉันจะดูว่าฉันไปรอบ ๆ NGIX อีกครั้งหรือไม่ ... อาจจะอยู่ในเครื่องเสมือน

    1.    นักล่า dijo

      ความคิดเปลี่ยนไปเล็กน้อย nginx ทำหน้าที่เป็นเนื้อหาคงที่และทำหน้าที่เป็น reverse proxy สำหรับ php-fpm ซึ่งเป็นผู้ที่เรียกใช้ PHP จริงคุณต้องเริ่มต้นในส่วนต่างๆและดำเนินการปรับใช้ทีละขั้นตอนมองหาคำแนะนำในการปรับใช้ เฟรมเวิร์กที่คุณทำงานด้วยแต่ละอันมีรายละเอียดตามชื่อสาธารณะแบบคงที่ทรัพยากร ฯลฯ ...

  4.   ไม่ระบุชื่อ dijo

    ทำให้ชุมชนได้รับความนิยมอย่างสูงในการละทิ้งคำว่า "hostear" ซึ่งไม่มีอยู่จริง โดยพระเจ้าการพูดว่า "เจ้าภาพ" เป็นเรื่องยากขนาดนั้นเลยเหรอ?

  5.   อยาก dijo

    สวัสดีตามตัวอย่างของคุณฉันต้องการทราบว่าสระว่ายน้ำสามารถสร้างได้เฉพาะสำหรับ wordpress backen หรือไม่นั่นคือสำหรับผู้ดูแลระบบ wp ที่สร้างซ็อกเก็ตใหม่สำหรับการเชื่อมต่อขาเข้ากับแบ็กเอนด์

    ตำแหน่ง / wp-admin {
    ราก /var/www/yoursite.com/wp-admin;
    ดัชนี index.php index.html index.htm;
    ตำแหน่ง ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    ราก /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/;
    }
    }