Apache-2.2
一台伺服器上的 Apache 和 nginx
我的任務是用 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.com 或 www.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 和內部網路訪問站點。