目前的環境是
一台主機
有四個不同服務
webmail port 8000 網址:a1.bbb.ccc
web1 port 80 網址:a2.bbb.ccc
web2 port 8880 網址:a3.bbb.ccc
web3 port 8800 網址:a4.bbb.ccc
四個服務並不是都掛在apache或是IIS(無法使用VirtualHost)
主機直接接在小烏龜後面(沒有其他路由設備)
OS:win7
這樣的狀況下
要如何讓各個網址在不加上port 就可以直接進入各自的頁面
不清楚你這四個web,哪些是IIS或apache,
是只有 IIS 不能設 Virtual Host?還是連apache也無法設?
如果 apache 可以設成 virtual host的話,
apache可以維持原來的不同port的web服務,
需要先把 web1 原來的 port 80 給改成別的 port,
假設改為8080。
然後都由 apache 的 port 80 來做 name-based 虛擬主機的工作,
再依query的名稱再後送到原來各port的服務:
<pre class="c" name="code"># webmail
<VirtualHost *:80>
ServerName a1.bbb.ccc
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
# web1
<VirtualHost *:80>
ServerName a2.bbb.ccc
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
# web2
<VirtualHost *:80>
ServerName a3.bbb.ccc
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8880/
ProxyPassReverse / http://localhost:8880/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
# web3
<VirtualHost *:80>
ServerName a4.bbb.ccc
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8800/
ProxyPassReverse / http://localhost:8800/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
# 原來 web3 之設定, 其他設定類似不再例舉
<VirtualHost *:8800>
DocumentRoot /www/a4.bbb.ccc
ServerName a4.bbb.ccc
</VirtualHost>
簡言之就是充分利用apache的 port-based 及 name-based 虛擬主機的功能。
如果連主機上面的 apache 也因為某因素無法設成 virtual host 的話,
那在同一台主機上再架個 nginx for Windows總該可以吧?
就把這ngix 在 port 80 來做 name-based 虛擬主機的工作,
但仍然要把那原來 port 80 的 web1 改成其他 port,
這時 nginx 的虛擬主機設定會類似這個樣子:
<pre class="c" name="code"># webmail 設定
server {
server_name a1.bbb.ccc;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $http_host;
}
}
....
# web3 設定
server {
server_name a4.bbb.ccc;
location / {
proxy_pass http://127.0.0.1:8800/;
proxy_set_header Host $http_host;
}
}
這樣各網址可以不加port的情況下,
透過 apache 或 nginx 的 虛擬主機 + reverse proxy 達到你的目的。