Linux

如何為一小部分 EC2 實例設置 Apache 代理?

  • January 29, 2011

我一直在為即將進行的項目設置 Amazon EC2 實例,該項目將涉及在多個 Web 伺服器上託管多個網站。它們都是微型實例,執行 Ubuntu Server 64 位。

這是我到目前為止所擁有的:

  • 網路伺服器——阿帕奇
  • 數據庫伺服器——MySQL
  • 開發伺服器——Apache & MySQL
  • 文件伺服器——SVN & Bacula(備份到 S3 儲存桶)

目前只有一個 Web 伺服器,但我已經製作了它的圖像,所以一旦項目啟動,我可以啟動任意數量的實例並單獨配置它們。

一切都很順利,但我遇到了一些障礙。

我的問題是我想執行多個 Web 伺服器實例,但由於亞馬遜限制為 5 個彈性 IP 地址,我知道這還不夠。我正在研究如何從一個 IP 地址在多個 Web 伺服器上託管網站,並在Apache的mod_proxy上執行。我還沒有嘗試過,但我認為這就是我需要的。我只是希望有人確認我在正確的軌道上。

有人使用 Apache 和 mod_proxy 嗎?它真的允許您使用單個 IP 地址託管多個網站嗎?

假設我在正確的軌道上,我只需要一個指向執行 Apache 的 EC2 實例的彈性 IP 地址,對嗎?

您問的是一種非常常見的情況,其中應用程序可能未在網關上執行,並且它們可能在 LAN 中的某些伺服器上執行,但對全世界來說,它似乎來自 request_url.com

我使用 Apaches mod 代理執行 4 個網站,這 4 個不同網站上至少有 15 種不同的服務依賴於它們。我沒有 Amazon EC2 的經驗,但 Amazon EC2 使用 Xen 作為其後端。假設面向網際網路並具有公共 IP 稱為 dom0 的主機現在閱讀以下術語

Dom0  with IP      192.168.0.100 (This will be our Server facing internet)
DomU1 with IP      192.168.0.11
DomU2 with IP      192.168.0.12
DomU3 with IP      192.168.0.13
DomU4 with IP      192.168.0.14

我假設您在 Dom0(或您的網路中的某個位置)上有一個本地 dns,它知道帶有名稱的 DomU IP。(如果不是這樣,生活會很困難)然後在 apache2.conf(Fedora 類型系統上的 httpd.conf)

NameVirtualHost *
   <VirtualHost *>
     ServerName mainserver
           DocumentRoot /var/www
     ProxyRequests Off
          <Proxy *>
    Order deny,allow
          Allow from all
    </Proxy>
        ProxyPass /domu1  http://192.168.0.11/
        ProxyPass /domu2  http://192.168.0.12/
        ProxyPass /domu3  http://192.168.0.13/
        ProxyPass /domu4  http://192.168.0.14/
        ProxyPassReverse /domu1  http://192.168.0.11/
        ProxyPassReverse /domu2  http://192.168.0.12/
        ProxyPassReverse /domu3  http://192.168.0.13/
        ProxyPassReverse /domu4  http://192.168.0.14/
   </VirtualHost>

如果您升級伺服器(即 Dom0),則這種方式是實現您所要求的事情的一種方法(但不是很推薦),更新可能會覆蓋 apache2.conf 或 httpd.conf 無論如何。因此,一旦您了解了上述條目的含義(檢查您的要求,我長期以來一直在努力解決您想要的類似問題,因此我提供了一個簡單的解決方案,但不推薦)。一旦您了解了上述 ProxyPass,然後在站點可用目錄中創建不同的虛擬主機配置,如果它是 Ubuntu/Debian 系統或基於 Red Hat,它仍然是可能的(您必須搜尋)我向您展示一個這樣它會有所幫助你休息 4-5 你可以自己做

呼叫這個 /etc/apache2/sites-enabled/myinterna1.conf 它看起來如下

<VirtualHost *:80 >

       ServerName myserver1.com
       ServerAdmin webmaster@localhost

       ProxyRequests off
       <Proxy *>
       Order deny,allow
       Allow from all
       </Proxy>
       ProxyPreserveHost On


       ProxyPass / http://192.168.1.3/
       ProxyPassReverse / http://192.168.1.3/

       ErrorLog /var/log/apache2/server1/server1_error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn
       CustomLog /var/log/apache2/server1/server1_access.log combined
       CustomLog /var/log/apache2/server1/server1-resp_log resp
       LogFormat "%a %{X-Forwarded-For}i  %h %D %t %f %p %>s  %U %v" resp

</VirtualHost>

上面的虛擬主機將在 Dom0 上定義,以便所有請求都來自內部伺服器 server1.com。它的工作方式是網際網路上的某個人將在他們的瀏覽器中輸入

http://requested_url.com/domu1

現在這個請求到達 Dom0 並且 Dom0 上的 Apache 虛擬主機檢查代理配置並發現 /domu1 映射到內部伺服器,因此它將其轉發到實際必須服務的機器。對於網際網路上的使用者,所有這些都是隱藏的。

這樣做時要注意一點,Ubuntu系統上的Apache以虛擬主機文件的字母名稱為虛擬主機提供服務(不是伺服器名稱,我指的是文件名,如sorting.c Apache虛擬主機文件)(這就是為什麼是 Ubuntu 系統上的文件 000-default),因此請確保您的主機數量多於您要服務的網站數量(這將用作錯誤頁面)。這是一種標準做法。

引用自:https://serverfault.com/questions/228260