2014-01-23 78 views
4

我有一個Symfony2 PHP應用程序,其中每個用戶都有自己的子域。目前這只是作爲沒有虛擬主機的默認Apache主機運行。當有人訪問他們的子域名時,顯然會調用主應用程序,這看起來就像在虛擬主機中的自己的安裝。現在在PHP/Symfony2應用程序中與虛擬主機接口

,應用不斷髮展,一些用戶希望更多的功能,包括運行自己的域別名和那些別名安裝SSL證書。我也開始更多地考慮系統中每個用戶的子域的安全性。我認爲向前邁進的邏輯是爲每個用戶提供他們自己的虛擬主機。最終,這些虛擬主機應該具有對主應用程序的讀取訪問權限,對自己的文件夾進行讀/寫訪問以進行上傳和有限的系統資源。我正在研究CloudLinux來解決最後一個問題。

只要運行良好且相對安全,我對於運行哪個Web服務器很靈活。任何人都可以指出我正確的方向來創建一個允許PHP在Web服務器中自動創建和編輯虛擬主機並創建/編輯SSL證書和域別名的設置?

這不是一個特定的代碼問題,而是一個最好的整體方法的問題。

+0

此問題違反了stackoverflow的規則,是一個混合「推薦工具」,屬於[serverfault](http://serverfault.com)。我無法抗拒,並通過一些考慮回答:) – nifr

+0

感謝您的回答。這是我考慮的一個選項,並將進一步研究。看看我還能得到什麼其他答案,如果它保持開放狀態將會很有趣。 – James

回答

2

我不確定你在說什麼類型的應用程序,但是當你提到SSL證書時,我假設有合理的數據參與。

這是一個棘手的問題,它在很大程度上取決於你希望授予給你的客戶(即運行自己的腳本/包,甚至SSH訪問)或如何明智他們的數據是什麼樣的權利。

的完整指南並不計算器是什麼等方面存在太多的方法和工具來解決這種情況。

最好的辦法是讓所有的客戶他們自己的(V)的服務器。

隨着幾個其他小助手之間的配置工具的使用和正確的工作流程......您可以立即設置這些服務器,並且能夠像單個人一樣輕鬆地維護它們服務器。

您甚至可以即時創建新的服務器實例。

即使所有客戶端上運行同一個應用程序,並具有網絡訪問只存在在同一臺服務器上運行時,他們都始終是一個很高的安全風險。

基本上,如果應用程序有一個真正的安全問題 - 有一個高的概率,您的所有客戶都會受到影響,並可以很容易地被利用。 (確定在同一IP地址上運行的所有域也不需太多)

只要您沒有針對每個應用程序和自己的PHP(父級)進程/池(即php-fpm)的不同用戶,對於其中的每個人來說,訪問其他應用程序的配置,文件,數據庫(,...)將很容易。

會話信息,臨時載目錄(,...)很容易這些應用之間露出...

特別是隨着操作碼緩存(即Zend的Opcache或APC)或用戶高速緩存(即APCu),這些應用程序之間可能會產生干擾,並且由於PHP(父)進程可以訪問所有其他應用程序的緩存,因此可能會很快出現嚴重的安全問題。

在symfony2的上下文中,我正在討論容器配置緩存或教條查詢緩存被暴露。

MySQL的一邊(沒有可能有事情等分離慢查詢日誌文件對於每個應用程序一個單一的過程不同的數據庫),就需要大量的RAM這些過程有越來越多的客戶和有無數要考慮的事情

您可以通過

  • 創建爲每個應用程序的用戶開始...
  • 爲所有這些爲他們的每一個
  • 創建jailshells
  • 附加jailshell'd PHP池將您的網絡服務器的權限限制在最低限度
  • ...

即使用php-fpm,web服務器只需要訪問公共資產,而不需要單個php文件。

網絡服務器將代理到php進程的請求,它本身只需要讀取大部分文件的讀取權限,並且可以寫入upload-folder,session-save-path,log-folders,cache-dirs(,。 ..))。

我並不是說不可能實現......但這不是一件容易的事,你應該真的知道自己在做什麼。

幫自己一個忙:

當我們在談論一個Symfony2的應用程序 - 在專業開發者/自由職業者通常收取80 $ /小時,更...收取客戶爲自己的幾個$ /月(雲)服務器實例!

相關問題