1. 程式人生 > >Nginx 實現端口轉發

Nginx 實現端口轉發

配置文件 負載 自動 cat acc for 所有 col proxy

什麽是端口轉發

當我們在服務器上搭建一個圖書以及一個電影的應用,其中圖書應用啟動了 8001 端口,電影應用啟動了 8002 端口。此時如果我們可以通過

localhost:8001    //圖書
localhost:8002    //電影

但我們一般訪問應用的時候都是希望不加端口就訪問域名,也即兩個應用都通過 80 端口訪問。但我們知道服務器上的一個端口只能被一個程序使用,這時候如何該怎麽辦呢?一個常用的方法是用 Nginx 進行端口轉發。Nginx 的實現原理是:用 Nginx 監聽 80 端口,當有 HTTP 請求到來時,將 HTTP 請求的 HOST 等信息與其配置文件進行匹配並轉發給對應的應用。例如當用戶訪問 book.douban.com 時,Nginx 從配置文件中知道這個是圖書應用的 HTTP 請求,於是將此請求轉發給 8001 端口的應用處理。當用戶訪問 movie.douban.com 時,Nginx 從配置文件中知道這個是電影應用的 HTTP 請求,於是將此請求轉發給 8002 端口的應用處理。一個簡單的 Nginx 配置文件(部分)如下面所示:

#配置負載均衡池
#Demo1負載均衡池
upstream book_pool{
    server 127.0.0.1:8001;
}
#Demo2負載均衡池
upstream movie_pool{
    server 127.0.0.1:8002;
}

#Demo1端口轉發
server {
    listen       80;
    server_name  book.chanshuyi.com;
    access_log logs/book.log;
    error_log logs/book.error;
    
    #將所有請求轉發給demo_pool池的應用處理
    location 
/ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://book_pool; } } #Demo2端口轉發 server { listen 80; server_name movie.chanshuyi.com; access_log logs/movie.log; error_log logs/movie.error; #將所有請求轉發給demo_pool池的應用處理 location
/ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://movie_pool; } }

上面這段配置實現了:

1、當用戶訪問的域名是:http://book.chanshuyi.com 時,我們自動將其請求轉發給端口號為 8001 的 Tomcat 應用處理。

2、當用戶訪問的域名是:http://movie.chanshuyi.com 時,我們自動將其請求轉發給端口號為 8002 的 Tomcat 應用處理。

上面的這種技術實現就是端口轉發。端口轉發指的是由軟件統一監聽某個域名上的某個端口(一般是80端口),當訪問服務器的域名和端口符合要求時,就按照配置轉發給指定的 Tomcat 服務器處理。我們常用的 Nginx 也有端口轉發功能。

Nginx 實現端口轉發