用frp代理實現80端口不同域名,訪問不同應用
參考博文
需求
- 今天早上項目經理,就問我能不能使用80端口不同域名訪問,並且通過香港的服務器代理內陸阿里雲服務器
模擬測試
tomcat 本地8080端口開啓3個應用
- 應用名
x.web1.com
x.web2.com
x.web3.com - 準備tomcat
-
webapp添加文件 web1 web2 web3
-
web1 web2 web3下添加index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ok</title> </head> <body> <h1>web1</h1> </body> </html>
web2,web3 下修改成web2 web3
-
添加web.xml文件
-
web1 web2 web3 下新建WEB-INFO目錄
-
WEB-INFO下新建web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> </web-app>
-
-
結果演示
-
配置tomcat配置文件
- 向server.conf添加內容
<Host name="x.web1.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="web1" /> </Host> <Host name="x.web2.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="web2" /> </Host> <Host name="x.web3.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="web3" /> </Host>
- 向server.conf添加內容
-
註釋掉ROOT目錄對應的host
-
啓動tomcat
-
- 本地測試效果
-
準備:
修改本機下 hosts文件,添加本地dns解析
vim /etc/hosts
127.0.0.1 x.web1.com
127.0.0.1 x.web2.com
127.0.0.1 x.web2.com -
測試
curl x.web1.com:8080
curl x.web2.com:8080
curl x.web3.com:8080
-
測試通過,刪除本地hosts添加內容
vim /etc/hosts
-
配置代理服務器
- 注意: 代理服務要開發7000 8080端口,對應安全組也要開放
本地服務器要開放8080端口,這裏就不演示開放端口了 - 下載frp:github路徑
-
我用的版本:v0.21.0
-
對應操作系統下載對應系統的,我代理服務器和本地服務器都是centos
-
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz
-
tar -zxvf frp_0.21.0_linux_amd64.tar.gz
-
cd frp_0.21.0_linux_amd64
-
vim frps.ini
[common] # frps 啓動綁定的端口號 bind_port = 7000 # 暴露給外網的http地址 vhost_http_port = 8080 # 客戶端登錄的token token=123456
-
啓動: ./frps -c frps.ini
-
配置本地服務frp客戶端
-
下載frp同服務端,解壓後
-
修改: vim frpc.ini
[common] # 代理服務器ip地址 server_addr = 161.117.12.*** # 代理服務 frp Server啓動端口號 server_port = 7000 # 訪問服務器身份認證 token=123456 [web01] type=http # 本地的應用的端口號 local_port=8080 # 代理服務綁定dns地址 custom_domains=web1.com # 訪問路徑的映射,可以寫成/news 只有 web1.com/news 纔會從這個映射 locations=/ # 轉發tomcat 對應host路徑 host_header_rewrite = x.web1.com [web02] type=http local_port=8080 # 代理服務綁定dns地址 custom_domains=web2.com locations=/ # 轉發tomcat 對應host路徑 host_header_rewrite = x.web2.com [web03] type=http local_port=8080 # 代理服務綁定dns地址 custom_domains=web3.com locations=/ # 轉發tomcat 對應host路徑 host_header_rewrite = x.web3.com
注意: 如果是自己應用,對應 custom_domains和host_header_rewrite需要修改
-
啓動客戶端:
./frpc -c frpc.ini
最終測試
-
準備:
- 通過本地dns解析模型dns解析
修改訪問服務器的win10電腦本地hosts文件
C:\Windows\System32\drivers\etc\hosts代理服務器ip地址 web1.com 代理服務器ip地址 web2.com 代理服務器ip地址 web3.com
- 通過本地dns解析模型dns解析
-
打開瀏覽器:
分別訪問 web1.com:8080 web2.com:8080 web3.com:8080
-
測試成功