在Nginx中用不同的用戶託管多個虛擬主機

當您擁有一台服務器時,世界上最普通的事情就是考慮安全性和更高的安全性,而您永遠都不會過於妄想

一種不常見的做法,不建議使用,是對所有數據庫使用同一用戶,如果使用root,則更糟,這看起來似乎令人難以置信,有些人(由於流浪或無知),我已經談到了為什麼你不應該這樣 另一個職位現在是時候解釋一下如何以及為什麼更好地分離不同用戶中的Web服務器的處理了,這一次它將使用 Nginx的.

專用服務器_子圖像

用戶和Web服務器是什麼?

為了以簡單的方式進行解釋,Web服務器(apache,nginx等)需要打開系統中的進程,這些進程將是從HDD中獲取文件(圖像等)並進行處理的進程可用於客戶端的瀏覽器。 Web服務器不能簡單地獲取文件並以沒有人操縱它們的方式來處理文件,也就是說,它需要一個最終將要完成所有這些操作的用戶,而這個用戶就是我正在談論的那個用戶,您了解嗎?

分成幾個用戶意味著什麼?

假設在我們的服務器上有2個網站,一個是個人項目,另一個是(假設這是我們女友或兄弟的)。 即使我們使用單獨的數據庫並且由不同的用戶訪問它們,最終兩個網站的文件都由同一用戶操作,所有站點的PHP處理都由同一用戶管理(通常是www-data)。 這是不推薦的做法,最好將所有內容分隔開,正如古老的諺語所說,安全勝於後悔。

好的,我知道了,我該如何使用Nginx

2000px-Nginx_logo.svg

首先要注意的是,Nginx沒有像Apache一樣擁有自己的模塊來處理PHP,對於Nginx,我們需要使用PHP-CGI或PHP-FPM,它們的工作原理與Apache相同(或更好)。 因此,要使不同用戶之間的PHP處理分開,我們將需要更改PHP配置文件(CGI或FPM)中的行,而不是Nginx本身。

假設您使用 PHP-FPM,我們將創建一個配置文件 水池 對於特定站點,也就是說,池是將PHP處理與PHP-FPM分開的方法,但我們分部分進行。

1.首先,我們必須知道我們將使用哪個系統用戶,我假設我們還沒有創建任何用戶,那麼讓我們創建它:

以下所有命令必須以管理權限執行,可以使用直接root用戶或使用sudo

adduser blog

我們將開始創建用戶的正常過程,輸入密碼,等等。

我只是按照示例為用戶寫博客,我們將要託管的第一個站點將是博客,以便...了解與該站點相關的每個用戶

1. 首先,我們去/etc/php5/fpm/pool.d/:

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

2. 現在,我們將創建一個名為blog.conf的文件:

touch blog.conf

3. 現在,我們將放置將用於VHost博客的池的配置:

使用nano編輯編輯blog.conf文件,例如: 須藤Nano Blog.conf
[博客]用戶= 博客
組= 博客
聽= / var /運行/ php5-fpm-博客.sock listen.owner = 博客
聽.group = 博客
pm =按需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 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中)用/var/run/php5-fpm-blog.sock ...中找到的襪子做它,這是我們先前在編輯/etc/php5/fpm/pool.d/blog.conf ...時創建的襪子。它不明白嗎?

5. 完成此操作後,我們將重新啟動服務(php5-fpm和nginx)和voila,我們將看到該站點(vhost)的處理不是由www-data或root或任何類似的人完成的,而是由我們先前定義的。

在這裡,我向您展示了 ps輔助| grep fpm 在我節點的一台服務器上:

ps aux | grep fpm ebook 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:池電視3電視615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm:泳池電視雜誌1818 1.7 1.7 437576 36396? S 09:55 0:46 php-fpm:泳池雜誌雜誌2264 1.9 1.7 437332 35884? S 10:15 0:26 php-fpm:泳池雜誌瞳孔2338 4.3 1.0 428992 22196? S 10:18 0:53 php-fpm:池瞳雜誌2413 1.8 1.7 437764 36152? S 10:22 0:18 php-fpm:泳池gutl雜誌2754 3.5 1.3 356724 27164? S 10:38 0:00 php-fpm:泳池gutl cgr 5624 0.0 1.0 365168 22696? S Apr28 0:16 php-fpm:泳池CGR學生7900 0.3 2.5 457052 52444? S Apr25 20:23 php-fpm:水池瞳孔瞳孔11021 0.4 2.5 458316 52864? S Apr28 5:57 php-fpm:池瞳cgr 11254 0.0 1.0 363152 21708? S Apr28 0:12 php-fpm:pool cgr cgr 13184 0.0 1.0 362872 21360嗎? S Apr28 0:08 php-fpm:泳池CGR

如您所見...使用Nginx + PHP-FPM將用戶的PHP處理分開非常容易,您會看到有多個池,因為有多個用戶。

結論

當涉及到服務器時,您永遠都不會感到偏執...安全不是一件可玩的事,我們越努力提高服務器及其服務的安全性,就越不可能被(成功)嚇到。駭客企圖或類似的東西


9條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   獵人 他說:

    Gaara,目前這些東西應該盡可能自動化,我建議您嘗試Ansible。 如果沒有代理,則只需要遠程主機上的python,配置非常簡單的yaml文件,Jinja模板即可。

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

    1.    KZKG ^ Gaara 他說:

      讓我們看一下,不僅限於WordPress網站,而且...哈哈Ansible的點擊率很高,但我更想確切地了解服務器上的所有工作原理,即使我不得不花1分鐘時間來創建新的襪子和新的VHost😀

      1.    獵人 他說:

        使用Ansible,您可以使一切自動化,幾乎可以做任何您想做的事情,這種方法的優點是您可以封裝實踐,然後隨意執行,假設您的站點負載很重,並且希望在應用程序服務器之間進行負載平衡,這些必須配置為完全相同,您不能跳過某個步驟或對其中之一做任何不同的操作,您能想像一步一步執行該過程4次嗎? 使用Ansible,就像將主機名添加到清單文件和Voilá一樣簡單!

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

      2.    獵人 他說:

        對Ansible邪教很抱歉,但這是您發現的其中一項技術,現在您希望每個人都使用它,因為它是如此酷和實用,就像當您發現NGINX並希望所有朋友立即離開Apache一樣。

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

  2.   姆斯塔拉文 他說:
  3.   腐爛87 他說:

    我是(或正在研究)開發人員,使用NGIX時,在配置nginx + php-fpm時遇到很多問題。 我知道archlinux發行版不是最好的服務器,但是每次更新ngix或php版本時,它總是崩潰,因此我放棄了嘗試大聲笑……今天,我仍然使用經典的Apache + PHP但我會看看我是否再次繞過NGIX ...也許在虛擬機上

    1.    獵人 他說:

      心態會有所變化,nginx提供靜態內容並充當運行真正PHP的php-fpm的反向代理,您必須分部分開始並逐步實現部署,以查找部署指南您使用的框架,每個框架都有其詳細信息,包括公眾名稱,靜態名稱,資源等。

  4.   匿名 他說:

    放棄不存在的“ hostear”這個詞,對社區有很大的幫助嗎? 靠上帝,難道說“主持人”嗎?

  5.   西港島線 他說:

    問候,按照您的示例,我想知道是否只能為wordpress backen創建一個池,即為wp-admin創建一個新的套接字以用於到後端的傳入連接

    位置/ wp-admin {
    根目錄/var/www/yoursite.com/wp-admin;
    index index.php index.html index.htm;
    位置〜^ / wp-admin /(.+.php)$ {
    try_files $ uri = 404;
    根目錄/var/www/yoursite.com/wp-admin;
    包括/ 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/;
    }
    }