สิ่งปกติที่สุดในโลกเมื่อคุณมีเซิร์ฟเวอร์คือการคิดถึงความปลอดภัยและความปลอดภัยที่มากขึ้นคุณจะไม่หวาดระแวงมากพอ😉
แนวทางปฏิบัติที่ค่อนข้างธรรมดาและไม่มีอะไรแนะนำคือการใช้ผู้ใช้คนเดียวกันสำหรับฐานข้อมูลทั้งหมดแย่กว่านั้นถ้ามีการใช้รูทซึ่งอาจดูเหมือนไม่น่าเชื่อมีผู้ที่ (เนื่องจากความไม่แน่นอนหรือความไม่รู้) ทำสิ่งนี้ฉันได้พูดคุยแล้วว่าทำไมคุณไม่ควรทำเช่นนี้ใน โพสต์อื่นตอนนี้ถึงเวลาอธิบายว่าทำไมจึงดีกว่าที่จะแยกการประมวลผลเว็บเซิร์ฟเวอร์ในผู้ใช้ที่แตกต่างกันคราวนี้จะใช้ Nginx.
ผู้ใช้และเว็บเซิร์ฟเวอร์คืออะไร?
เพื่ออธิบายโดยย่อและง่าย ๆ เว็บเซิร์ฟเวอร์ (apache, nginx อะไรก็ได้) จำเป็นต้องเปิดกระบวนการในระบบกระบวนการที่จะเป็นผู้ที่นำไฟล์จาก HDD (รูปภาพ ฯลฯ ) และสร้างขึ้น ใช้ได้กับเบราว์เซอร์ของลูกค้า เว็บเซิร์ฟเวอร์ไม่สามารถใช้ไฟล์และจัดการไฟล์ได้โดยไม่มีใครกล่าวคือมันต้องการผู้ใช้ที่จะเป็นคนที่จะทำสิ่งเหล่านี้ในตอนท้ายและผู้ใช้คนนั้นคือคนที่ฉันพูดถึงคุณเข้าใจไหม
อะไรคือการแยกผู้ใช้หลายคน?
สมมติว่าบนเซิร์ฟเวอร์ของเราเรามีเว็บไซต์ 2 แห่งซึ่งเป็นโครงการส่วนตัวและอีกเว็บไซต์หนึ่ง (ลองจินตนาการว่าเป็นแฟนหรือพี่ชายของเรา). แม้ว่าเราจะใช้ฐานข้อมูลที่แยกจากกันและผู้ใช้ที่แตกต่างกันเพื่อเข้าถึงในท้ายที่สุดไฟล์ของทั้งสองเว็บไซต์จะถูกจัดการโดยผู้ใช้คนเดียวกันการประมวลผล PHP ได้รับการจัดการโดยผู้ใช้คนเดียวกันสำหรับทุกไซต์ (โดยปกติจะเป็น www-data). นี่เป็นวิธีปฏิบัติที่ไม่แนะนำเป็นการดีกว่าถ้าแยกทุกอย่างออกจากกันอย่างที่เคยพูดไปจะดีกว่าปลอดภัยดีกว่าเสียใจ
ตกลงฉันเข้าใจวิธีที่ฉันทำกับ Nginx
สิ่งแรกที่ควรทราบคือ Nginx ไม่มีโมดูลของตัวเองที่จัดการการประมวลผล PHP เหมือนที่ Apache ทำสำหรับ Nginx เราจำเป็นต้องใช้ PHP-CGI หรือ PHP-FPM ซึ่งทำงานได้ดี (หรือดีกว่า) มากกว่า Apache ดังนั้นเพื่อแยกการประมวลผล PHP ระหว่างผู้ใช้ที่แตกต่างกันเราจะต้องเปลี่ยนบรรทัดในไฟล์การกำหนดค่า PHP (CGI หรือ FPM) ไม่ใช่ Nginx เอง
สมมติว่าคุณใช้ PHP-FPMเราจะสร้างไฟล์กำหนดค่าของ สระ สำหรับไซต์เฉพาะนั่นคือพูลเป็นวิธีแยกการประมวลผล PHP ออกจาก PHP-FPM แต่เราจะแยกส่วน
1. ก่อนอื่นเราต้องทราบว่าเราจะใช้ผู้ใช้ระบบใดฉันจะถือว่าเรายังไม่ได้สร้างและมาสร้างมัน:
adduser blog
เราจะเริ่มขั้นตอนปกติในการสร้างผู้ใช้ป้อนรหัสผ่าน ฯลฯ
1. ก่อนอื่นไปที่ /etc/php5/fpm/pool.d/:
cd /etc/php5/fpm/pool.d/
2. ตอนนี้เราจะสร้างไฟล์ชื่อ blog.conf:
touch blog.conf
3. ตอนนี้เราจะวางการกำหนดค่าของพูลที่เราจะใช้สำหรับบล็อก VHost:
[บล็อก] ผู้ใช้ = บล็อก กลุ่ม = บล็อก ฟัง = / 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 นั้นง่ายมากคุณจะเห็นว่ามีหลายพูลเนื่องจากมีผู้ใช้หลายคน
สรุปผลการวิจัย
เมื่อพูดถึงเซิร์ฟเวอร์คุณจะไม่หวาดระแวงมากพอ ... ความปลอดภัยไม่ใช่สิ่งที่ต้องเล่นยิ่งเราพยายามปรับปรุงความปลอดภัยของเซิร์ฟเวอร์และบริการของเรามากเท่าไหร่โอกาสที่เราจะกลัว (ประสบความสำเร็จ) น้อยลง พยายามแฮ็คหรืออะไรก็ได้ที่คล้ายกัน😉
กาอาระในปัจจุบันสิ่งเหล่านี้ควรเป็นไปโดยอัตโนมัติให้มากที่สุดฉันขอแนะนำให้คุณลองใช้ Ansible หากไม่มีตัวแทนคุณต้องใช้ python บนโฮสต์ระยะไกลเท่านั้นง่ายมากในการกำหนดค่าไฟล์ yaml เทมเพลต Jinja
https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx
มาดูกันว่านั่นไม่ได้มีไว้สำหรับเว็บไซต์ WordPress เท่านั้นและ ... ฮ่าฮ่าบางที Ansible อาจคลิกที่ volao แต่ฉันอยากรู้ว่าทุกอย่างทำงานบนเซิร์ฟเวอร์อย่างไรแม้ว่าฉันจะต้องใช้เวลา 1 นาทีในการสร้างถุงเท้าใหม่และ VHost ใหม่😀
ด้วย Ansible คุณทำให้ทุกอย่างเป็นไปโดยอัตโนมัติคุณสามารถทำอะไรก็ได้ตามที่คุณต้องการข้อดีของวิธีนี้คือคุณสรุปการฝึกฝนแล้วดำเนินการตามต้องการจินตนาการว่าคุณมีไซต์ที่โหลดมากและคุณต้องการทำโหลดบาลานซ์ระหว่างแอปพลิเคชันเซิร์ฟเวอร์สิ่งเหล่านี้ ต้องกำหนดค่าให้เหมือนกันทุกประการคุณไม่สามารถข้ามขั้นตอนหรือทำอะไรที่แตกต่างจากขั้นตอนใดขั้นตอนหนึ่งได้คุณนึกภาพออกไหมว่าทำตามขั้นตอนทีละขั้นตอน 4 ครั้ง? ด้วย Ansible นั้นง่ายเพียงแค่เพิ่มชื่อโฮสต์ในไฟล์สินค้าคงคลังและVoilá !!
http://www.ansible.com/how-ansible-works
ขออภัยเกี่ยวกับลัทธิ Ansible แต่เป็นหนึ่งในเทคโนโลยีเหล่านี้ที่คุณค้นพบและคุณต้องการให้ทุกคนใช้ตอนนี้เพราะมันเจ๋งมากและใช้งานได้จริงเหมือนกับเมื่อคุณค้นพบ NGINX และคุณต้องการให้เพื่อน ๆ ทุกคนออกจาก Apache ทันที
https://speakerdeck.com/slok/ansible-all-the-things
ฉันแน่ใจว่าโพสต์ของฉันเติมเต็มสิ่งนี้ ...
http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/
ฉัน (หรือศึกษาที่จะเป็น) นักพัฒนาและด้วย NGIX ฉันมีปัญหามากมายเมื่อกำหนดค่า nginx + php-fpm ฉันรู้ว่า archlinux distro ไม่ใช่สิ่งที่ดีที่สุดที่จะทำให้เป็นเซิร์ฟเวอร์ แต่ทุกครั้งที่ฉันอัปเดตเวอร์ชันของ ngix หรือ php ทุกอย่างมักจะล้มเหลวดังนั้นฉันจึงล้มเลิกความพยายามฮ่า ๆ ... สำหรับวันนี้ฉันอยู่กับ Apache + แบบคลาสสิก PHP แต่ฉันจะดูว่าฉันไปรอบ ๆ NGIX อีกครั้งหรือไม่ ... อาจจะอยู่ในเครื่องเสมือน
ความคิดเปลี่ยนไปเล็กน้อย nginx ทำหน้าที่เป็นเนื้อหาคงที่และทำหน้าที่เป็น reverse proxy สำหรับ php-fpm ซึ่งเป็นผู้ที่เรียกใช้ PHP จริงคุณต้องเริ่มต้นในส่วนต่างๆและดำเนินการปรับใช้ทีละขั้นตอนมองหาคำแนะนำในการปรับใช้ เฟรมเวิร์กที่คุณทำงานด้วยแต่ละอันมีรายละเอียดตามชื่อสาธารณะแบบคงที่ทรัพยากร ฯลฯ ...
ทำให้ชุมชนได้รับความนิยมอย่างสูงในการละทิ้งคำว่า "hostear" ซึ่งไม่มีอยู่จริง โดยพระเจ้าการพูดว่า "เจ้าภาพ" เป็นเรื่องยากขนาดนั้นเลยเหรอ?
สวัสดีตามตัวอย่างของคุณฉันต้องการทราบว่าสระว่ายน้ำสามารถสร้างได้เฉพาะสำหรับ 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/;
}
}