我们知道: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上未经实验,菜鸟慎试,风险自担。