什么是端口轉發
當我們在服務器上搭建一個資料以及一個下載的應用,其中資料應用啟動了 8001 端口,下載應用啟動了 8002 端口。此時如果我們可以通過
localhost:8001 //資料
localhost:8002 //下載
但我們一般訪問應用的時候都是希望不加端口就訪問域名,也即兩個應用都通過 80 端口訪問。但我們知道服務器上的一個端口只能被一個程序使用,這時候如何該怎么辦呢?一個常用的方法是用 Nginx 進行端口轉發。Nginx 的實現原理是:用 Nginx 監聽 80 端口,當有 HTTP 請求到來時,將 HTTP 請求的 HOST 等信息與其配置文件進行匹配并轉發給對應的應用。例如當用戶訪問 linux.linuxmi.com 時,Nginx 從配置文件中知道這個是資料應用的 HTTP 請求,于是將此請求轉發給 8001 端口的應用處理。當用戶訪問 m.linuxmi.com 時,Nginx 從配置文件中知道這個是下載應用的 HTTP 請求,于是將此請求轉發給 8002 端口的應用處理。一個簡單的 Nginx 配置文件(部分)如下面所示:
#配置負載均衡池
#Demo1負載均衡池
upstream linux_pool{
server 127.0.0.1:8001;
}
#Demo2負載均衡池
upstream m_pool{
server 127.0.0.1:8002;
}
#Demo1端口轉發
server {
listen 80;
server_name linux.linuxidc.com;
access_log logs/linux.log;
error_log logs/linux.error;
#將所有請求轉發給demo_pool池的應用處理
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://linux_pool;
}
}
#Demo2端口轉發
server {
listen 80;
server_name m.linuxidc.com;
access_log logs/m.log;
error_log logs/m.error;
#將所有請求轉發給demo_pool池的應用處理
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://m_pool;
}
}
上面這段配置實現了:
1、當用戶訪問的域名是:http://linux.linuxidc.com 時,我們自動將其請求轉發給端口號為 8001 的 Tomcat 應用處理。
2、當用戶訪問的域名是:http://m.linuxidc.com 時,我們自動將其請求轉發給端口號為 8002 的 Tomcat 應用處理。
上面的這種技術實現就是端口轉發。端口轉發指的是由軟件統一監聽某個域名上的某個端口(一般是80端口),當訪問服務器的域名和端口符合要求時,就按照配置轉發給指定的 Tomcat 服務器處理。我們常用的 Nginx 也有端口轉發功能。