Lưu trữ nhiều VHosts với những người dùng khác nhau trong Nginx

Điều bình thường nhất trên thế giới khi bạn có một máy chủ, là nghĩ về bảo mật và bảo mật hơn, bạn không bao giờ có thể đủ hoang tưởng

Một thực tế hơi phổ biến và KHÔNG GÌ được khuyến nghị, là sử dụng cùng một người dùng cho tất cả cơ sở dữ liệu, tệ hơn nếu root được sử dụng, điều này có vẻ khó tin, có những người (do sự mơ hồ hoặc thiếu hiểu biết) làm điều này, tôi đã nói về lý do tại sao bạn KHÔNG nên hành động như vậy trong bài đăng khác, bây giờ đã đến lúc giải thích cách thức và lý do tốt hơn nên tách việc xử lý máy chủ web ở những người dùng khác nhau, lần này nó sẽ sử dụng Nginx.

Máy chủ chuyên dụng_SubImage

Của người dùng và máy chủ web là gì?

Để giải thích một cách ngắn gọn và đơn giản, máy chủ web (apache, nginx, bất cứ thứ gì) cần phải mở các tiến trình trong hệ thống, các tiến trình sẽ là những người lấy các tệp từ HDD (hình ảnh, v.v.) và tạo ra chúng. có sẵn cho trình duyệt của khách hàng. Máy chủ web không thể đơn giản lấy các tệp và thao tác chúng trong khi không là ai cả, nghĩa là, nó cần một người dùng cuối cùng sẽ là người thực hiện tất cả những điều này và người dùng đó chính là người tôi đang nói đến, điều đó có được hiểu không ?

Điều gì là tách biệt trong một số người dùng?

Giả sử rằng trên máy chủ của chúng tôi, chúng tôi có 2 trang web, của chúng tôi là một dự án cá nhân và một trang khác (hãy tưởng tượng đó là bạn gái hoặc anh trai của chúng ta). Ngay cả khi chúng tôi sử dụng các cơ sở dữ liệu riêng biệt và những người dùng khác nhau để truy cập chúng, cuối cùng các tệp của cả hai trang web đều được thao tác bởi cùng một người dùng, việc xử lý PHP được quản lý bởi cùng một người dùng cho tất cả các trang web (thường là dữ liệu www). Đây là một thực tế không nên làm, tốt hơn hết là mọi thứ nên tách bạch, như một câu nói cổ vẫn nói, thà an toàn còn hơn xin lỗi.

Được rồi, tôi hiểu rồi, làm cách nào để thực hiện với Nginx

2000px-Nginx_logo.svg

Điều đầu tiên cần lưu ý là Nginx không có mô-đun riêng xử lý xử lý PHP như Apache, đối với Nginx, chúng ta cần sử dụng PHP-CGI hoặc PHP-FPM, hoạt động tương tự (hoặc tốt hơn) so với Apache. Vì vậy, để phân tách quá trình xử lý PHP giữa những người dùng khác nhau, chúng ta sẽ cần thay đổi các dòng trong tệp cấu hình PHP (CGI hoặc FPM), không phải bản thân Nginx.

Giả sử bạn sử dụng PHP-FPM, chúng tôi sẽ tạo một tệp cấu hình của hồ bơi Đối với một trang web cụ thể, tức là một pool là cách để tách quá trình xử lý PHP khỏi PHP-FPM, nhưng chúng ta sẽ đi từng phần.

1. Trước tiên, chúng ta phải biết người dùng nào của hệ thống mà chúng ta sẽ sử dụng, tôi sẽ giả sử rằng chúng ta vẫn chưa có bất kỳ người dùng nào được tạo và tốt, hãy tạo nó:

Tất cả các lệnh sau PHẢI được thực thi với đặc quyền quản trị, với quyền root trực tiếp hoặc sử dụng sudo

adduser blog

Chúng tôi sẽ bắt đầu quá trình bình thường để tạo người dùng, nhập mật khẩu, v.v.

Tôi viết blog cho người dùng chỉ để làm theo ví dụ, rằng trang web đầu tiên chúng tôi sẽ lưu trữ sẽ là một blog, tốt rằng ... để biết từng người dùng với trang web nào có liên quan

1. Đầu tiên, hãy truy cập /etc/php5/fpm/pool.d/:

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

2. Bây giờ, chúng ta sẽ tạo một tệp có tên blog.conf:

touch blog.conf

3. Bây giờ chúng ta sẽ đặt cấu hình của pool mà chúng ta sẽ sử dụng cho blog VHost:

Chỉnh sửa tệp blog.conf bằng nano ... ví dụ: sudo nanoblog.conf
[ Blog của chúng tôi.] người dùng =  Blog của chúng tôi.
nhóm =  Blog của chúng tôi.
nghe = / var / run / php5-fpm- Blog của chúng tôi..sock nghe.owner =  Blog của chúng tôi.
nghe.group =  Blog của chúng tôi.
pm = ondemand pm.max_children = 96 chdir = /

Lưu ý: Những gì tôi đánh dấu chúng bằng màu đỏ là những gì chúng phải sửa đổi tùy thuộc vào người dùng mà chúng đã tạo trước đó. Ví dụ: nếu họ tạo một VHost khác với người dùng khác (diễn đàn chẳng hạn) thì thay vì blog chỉ đơn giản là đưa diễn đàn vào từng dòng, hiểu không?

4. Khi cấu hình của pool mới (tệp blog.conf mà chúng tôi vừa tạo và chỉnh sửa), đến lượt nó nói với Nginx VHost sử dụng một chiếc tất khác cho VHost đó, cho trang web này. Chiếc tất sẽ được sử dụng sẽ là chiếc mà chúng ta đã khai báo trước đó (/var/run/php5-fpm-blog.sock). Hãy chỉnh sửa Nginx VHost và trong phần xử lý PHP, chúng tôi chỉ định sử dụng tất đó. Ví dụ:

vị trí ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass unix: / var / run / php5-fpm- Blog của chúng tôi..bít tất;
bao gồm fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

Như bạn thấy, tôi chỉ ra rằng xử lý PHP của VHost đó (những dòng đó ví dụ bên trong / etc / nginx / sites-enable / vhost-blog) làm điều đó với tất tìm thấy trong /var/run/php5-fpm-blog.sock ... là cái mà chúng tôi đã tạo trước đây khi chỉnh sửa /etc/php5/fpm/pool.d/blog.conf ... không hiểu ?

5. Khi điều này được thực hiện, chúng tôi khởi động lại cả hai dịch vụ (php5-fpm và nginx) và thì đấy, chúng tôi sẽ thấy rằng việc xử lý trang web đó (vhost) KHÔNG được thực hiện bởi www-data hoặc root hoặc bất kỳ ai tương tự, mà bởi người dùng mà chúng tôi được xác định trước đó.

Ở đây tôi chỉ cho bạn kết quả của một phụ trợ ps | grep fpm trên một trong các máy chủ của nút của tôi:

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 0 tháng 00 3:3 php-fpm: pool tv615 tv0.0 0.0 349360 1204 30 0? S Mar00 3:1818 php-fpm: tạp chí pool tv1.7 1.7 437576 36396 09 55? S 0:46 2264:1.9 php-fpm: tạp chí hồ bơi 1.7 437332 35884 10 15? S 0:26 2338:4.3 php-fpm: hồ bơi tạp chí học sinh 1.0 428992 22196 10 18? S 0:53 2413:1.8 php-fpm: tạp chí hồ bơi học sinh 1.7 437764 36152 10 22? S 0:18 2754:3.5 php-fpm: tạp chí pool gutl 1.3 356724 27164 10 38? S 0:00 5624:0.0 php-fpm: pool gutl cgr 1.0 365168 22696 28 0? S tháng 16 7900:0.3 php-fpm: pool cgr student 2.5 457052 52444 25 20? S tháng 23 11021:0.4 php-fpm: pool hoc sinh 2.5 458316 52864 28 5? S tháng 57 11254:0.0 php-fpm: pool student cgr 1.0 363152 21708 28 0? S tháng 12 13184:0.0 php-fpm: pool cgr cgr 1.0 362872 21360 28 0? Ngày 08 tháng XNUMX XNUMX:XNUMX php-fpm: pool cgr

Như bạn thấy ... tách xử lý PHP của người dùng bằng Nginx + PHP-FPM thực sự dễ dàng, ở đó bạn thấy rằng có một số nhóm, vì có một số người dùng.

Kết luận

Khi nói đến máy chủ, bạn không bao giờ đủ hoang tưởng ... bảo mật không phải là thứ để chơi, chúng tôi càng luôn cố gắng cải thiện bảo mật cho máy chủ của mình và các dịch vụ của chúng, chúng tôi càng ít có khả năng sợ hãi bởi (thành công) cố gắng hack hoặc bất cứ điều gì tương tự 😉


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   thợ săn dijo

    Gaara, trong thời buổi hiện tại những thứ này nên được tự động hóa nhiều nhất có thể, tôi khuyên bạn nên thử Ansible. Không cần tác nhân, bạn chỉ cần python trên máy chủ từ xa, rất đơn giản để cấu hình, tệp yaml, mẫu Jinja.

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

    1.    KZKG ^ Gaara dijo

      Hãy xem, điều đó không chỉ dành cho các trang web WordPress, và ... haha ​​có thể Ansible nhấp chuột nhiều lần, nhưng tôi muốn biết chính xác cách mọi thứ hoạt động trên máy chủ, ngay cả khi tôi phải dành 1 phút để tạo một tất mới và VHost mới 😀

      1.    thợ săn dijo

        Với Ansible, bạn tự động hóa mọi thứ, bạn thực tế làm bất cứ điều gì bạn muốn, lợi thế của phương pháp này là bạn đóng gói thực hành và sau đó thực thi theo ý muốn, hãy tưởng tượng rằng bạn có một trang web được tải nặng và bạn muốn cân bằng tải giữa các máy chủ ứng dụng, phải được cấu hình chính xác như nhau, bạn không thể bỏ qua một bước hoặc làm bất cứ điều gì khác nhau ở một trong số chúng, bạn có thể tưởng tượng thực hiện quy trình từng bước 4 lần không? Với Ansible, việc thêm tên máy chủ vào tệp kho và Voilá !!

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

      2.    thợ săn dijo

        Xin lỗi về giáo phái Ansible, nhưng đó là một trong những công nghệ mà bạn phát hiện ra và bạn muốn mọi người sử dụng nó ngay bây giờ vì nó rất tuyệt và thiết thực, giống như khi bạn phát hiện ra NGINX và bạn muốn tất cả bạn bè của mình rời khỏi Apache ngay lập tức.

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

  2.   mstaaravin dijo

    Tôi chắc rằng bài viết của tôi bổ sung cho điều này ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   thối87 dijo

    Tôi (hoặc học để trở thành) một nhà phát triển và với NGIX, tôi đã gặp rất nhiều vấn đề khi định cấu hình nginx + php-fpm. Tôi biết rằng bản phân phối của Archlinux không phải là tốt nhất để biến nó thành máy chủ, nhưng mỗi khi tôi cập nhật phiên bản ngix hoặc php, mọi thứ luôn bị lỗi nên tôi đã từ bỏ nỗ lực này ... Cho đến hôm nay, tôi vẫn sử dụng Apache + cổ điển PHP nhưng tôi sẽ xem nếu tôi quay lại NGIX một lần nữa ... có thể trong một máy ảo

    1.    thợ săn dijo

      Tâm lý thay đổi một chút, nginx phục vụ nội dung tĩnh và phục vụ như một proxy ngược cho php-fpm là người chạy PHP thực, bạn phải bắt đầu từng phần và đạt được triển khai từng bước, hãy tìm hướng dẫn để triển khai khung mà bạn làm việc, mỗi khung có thông tin chi tiết theo tên của public, static, resource, v.v.

  4.   Vô danh dijo

    Cộng đồng có ủng hộ việc bỏ từ "hostear" không, vốn không tồn tại. Trời ạ, nói "chủ nhà" khó đến vậy sao?

  5.   Muốn dijo

    Xin chào, sau ví dụ của bạn, tôi muốn biết nếu một pool có thể được tạo chỉ cho backen wordpress, nghĩa là, cho wp-admin tạo một socket mới cho các kết nối đến với chương trình phụ trợ

    location / wp-admin {
    root /var/www/yoursite.com/wp-admin;
    chỉ mục index.php index.html index.htm;
    vị trí ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    root /var/www/yoursite.com/wp-admin;
    bao gồm / 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/;
    }
    }