多份HTTP服务80端口复用问题

常识

我们知道:1台主机有65536个端口(0~65535),每个进程会占用1个端口,HTTP协议的默认端口是80。

问题

现有多份HTTP服务(设作HTTPD,IIS,Tomcat)要运行时,若都想用默认端口去访问,就出现80端口稀缺的问题。

常规方案

通常的做法是设一个Web代理服务器(如Nginx),根据HTTP请求头Host来转发到相应的服务。

本文思路

好在可以通过端口转发来解决这个问题。端口转发,其原理跟Web代理服务的Host分发类似。它通过监听指定IP和端口,将收到的输入转发到另一地址。

大致解决思路是:让各服务进程都不要直接占用80端口,而通过系统自带的端口转发功能,监听指定IP指定端口收到的请求,并转发到各服务进程的端口,并添加一个域名-IP映射规则,来实现HTTP分发。

如此,可以通过默认端口来访问各HTTP服务,且80端口还未被占用。

服务仅供本机用

第1步 在本机hosts文件中加入

127.0.0.2   httpd.example.com
127.0.0.3   iis.example.com
127.0.0.4   tomcat.example.com

:(有关hosts文件,Windows的在%SystemRoot%\System32\drivers\etc\hosts,Linux的在/etc/hosts)

一台主机的回环IPv4从127.0.0.1~127.255.255.254,共256*256*254个,远超出其端口数65536个,绝对够用,随你怎么玩。

第2步 在本机设置端口转发规则

127.0.0.2   80  127.0.0.1   801
127.0.0.3   80  127.0.0.1   802
127.0.0.4   80  127.0.0.1   8080

Windows用户用netsh命令,以第一条规则为例

REM 添加
netsh interface portproxy add v4tov4 listenport=80 connectaddress=127.0.0.1 connectport=801 listenaddress=127.0.0.2 protocol=tcp
REM 删除
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.0.0.2 protocol=tcp

Linux用户用iptables命令,以设置第一条规则为例

# 添加
iptables -t nat -A PREROUTING -p tcp --src 127.0.0.2 --dport 80 -j REDIRECT --dst 127.0.0.1 --to-port 801
# 删除
iptables -t nat -D PREROUTING -p tcp --src 127.0.0.2 --dport 80 -j REDIRECT --dst 127.0.0.1 --to-port 801

服务供局域网内其他主机用

设当前主机有一个内置的WiFi无线网卡,此个网卡可获得2个局域网IP

IPv4 Address: 192.168.1.172
IPv6 Address: fe80::d538:81db:8707:6ef2%11

局域网IP不像回环IP那么充裕,为获得更多的IP数,你需要安装更多的网卡。
当再用网线连接到路由时,本机又获得2个局域网IP

IPv4 Address: 192.168.1.177
IPv6 Address: fe80::dcf5:6cb9:6ad2:c38e%14

如果还不够,你可以再加USB WiFi无线网卡或USB RJ45以太网适配器

在进行下列操作之前,你的路由器须支持hosts设置和端口转发。
:HiWiFi极路由用户可通过安装应用”Hosts”和”端口转发”

第1步 在路由器hosts文件中加入

192.168.1.172   httpd.example.com
fe80::d538:81db:8707:6ef2%11    iis.example.com
192.168.1.177   tomcat.example.com

第2步 在路由器设置端口转发规则

192.168.1.172   80  192.168.1.172   801
fe80::d538:81db:8707:6ef2%11    80  192.168.1.172   802
192.168.1.177   80  192.168.1.172   8080

如此,若不出意外,局域网内的其他主机通过浏览器访问以下三个域
httpd.example.com, iis.example.com, tomcat.example.com
即可分别访问到本机的HTTPD,IIS和Tomcat服务。
此外,80端口还可留作他用,比如开一个Nginx服务,用127.0.0.1来访问。

以上内容,在Linux上未经实验,菜鸟慎试,风险自担。

你可能感兴趣的:(Server-end)