iT邦幫忙

0

經由網域指向同IP不同port

目前的環境是
一台主機
有四個不同服務
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 就可以直接進入各自的頁面

changing iT邦新手 5 級 ‧ 2013-12-06 09:14:14 檢舉
謝謝 twtw 大大
原本以為各個服務並沒有被apache整合在一起,
所以沒辦法用apache來整合,
不過沒有想到有proxy的方法可以用!
真的太感謝了~

1 個回答

16
逮丸逮丸
iT邦大師 1 級 ‧ 2013-12-05 20:44:50
最佳解答

不清楚你這四個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 達到你的目的。

我要發表回答

立即登入回答