Apache-2.2

一台伺服器上的 Apache 和 nginx

  • November 10, 2014

我的任務是用 apache 和 nginx 製作伺服器。我使用 CentOS 6.5,在 eth0 上有一個公共 IP,在 eth1(192.168.1.2)和 eth2(192.168.1.3)上有兩個內部 IP。Apache 必須在一個 IP (192.168.1.2) 上使用虛擬主機執行兩個不同的站點。Nginx 必須在沒有域名的公共 ip 上執行另一個網站。當我在瀏覽器中輸入 www.test1.comwww.test2.com 時,它應該打開在 apache 上執行的站點之一,當我輸入公共 ip 時,它應該打開在 nginx 伺服器上執行的站點。

編輯1:

現在這是我的最後一個解決方案。

/etc/nginx/conf.d/default.conf

server {
   listen 91.xxx.xxx.xxx:8080; 
   server_name _; # catch all
   root /usr/share/nginx/html; 
}

server {
   listen 91.xxx.xxx.xxx:80;
   server_name www.test1.com; 
   root /non/existant/or/error/pages; 

   location / {
      if ($host = "test1.com") 
          {
       proxy_pass http://test1.com; 
          }
      if ($host = "test2.net") 
          {
      proxy_pass http://test2.net;
          }
   }
}

等/httpd/conf/httpd.conf

Listen 192.168.1.2:80
NameVirtualHost 192.168.1.2:80

<VirtualHost 192.168.1.2:80 >
   ServerAdmin webmaster@test1.com
   DocumentRoot "/var/www/test1.com/public_html"
   ServerName www.test1.com
   ServerAlias test1.com
   ErrorLog "/var/www/test1.com/error.log"
</VirtualHost>

<VirtualHost 192.168.1.2:80 >
   ServerAdmin webmaster@test2.com/public_html"
   ServerName www.test2.com
   ServerAlias test2.com
   ErrorLog "/var/www/test2.com/error.log"
</VirtualHost>

和 /etc/hosts

91.xxx.xxx.xxx  rangelov310

#Virtual Hosts
192.168.1.2 test1.com
192.168.1.2 test2.com

這是工作,但如果以某種方式使 nginx 站點在埠 80 上工作會很棒。

你的配置看起來不錯。但是您的公共 IP 會有問題。您不能讓(apache 和 nginx)都監聽您的公共 IP 和埠 80。無論如何,域 www.test1.com 通常指向一個 IP(私有或公共)。

這是一種可能的方法

nginx.conf

server {
   listen xxxx:80; # public IP port 80 only
   server_name _; # catch all
   root /some/path/to/static; # static content
}

server {
   listen xxxx:80;
   server_name www.test1.com # so we can handle public requests
   root /non/existant/or/error/pages; # for safety

   location / {
       proxy_pass 192.168.1.2; # apache site1
   }
}

server {
   listen xxxx:80;
   server_name www.test2.com # so we can handle public requests
   root /non/existant/or/error/pages; # for safety

   location / {
       proxy_pass 192.168.1.3; # apache site2
   }
}

阿帕奇

Listen 192.168.1.2:80
Listen 192.168.1.3:80

<VirtualHost 192.168.1.2:80>
  ServerAdmin   .......
  DocumentRoot  .......
  ServerName    www.test1.com
  ServerAlies   test1.com
</VirtualHost>

<VirtualHost 192.168.1.3:80>
  ServerAdmin   .......
  DocumentRoot  .......
  ServerName    www.test2.com
  ServerAlies   test2.com
</VirtualHost>
  • 確保你沒有其他 Listen 指令,否則你會遇到問題。
  • 網站只能託管在 1 個內部地址上 - 這是為了便於閱讀

解釋

  • nginx用於服務一切
  • 預設情況下,它提供靜態內容
  • 如果請求 site1 或 site2,它會將請求代理到正在偵聽私有 IP 地址的 apache
  • apache 只監聽內部地址(這裡沒有惡作劇)
  • 可能您將需要所謂的拆分視圖 dns,以便可以從整個 Internet 和內部網路訪問站點。

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