Nginx是個厲害的服務器,可以配置多個服務器,一個server就是一個服務器
server { listen 80; server_name *.yourdomain.com; .... }
代理轉發是在server下面的location進行配置
server { // 服務器配置 location / { // ...... 代理配置 } }
常見的Nginx代理配置
upstream my_server { server 10.0.0.2:8080; keepalive 2000; } server { listen 80; server_name 10.0.0.1; client_max_body_size 1024M; location /my/ { proxy_pass http://my_server/; proxy_set_header Host $host:$server_port; } }
通過該配置,訪問nginx地址http://10.0.0.1:80/my的請求會被轉發到my_server服務地址http://10.0.0.2:8080/
什么是端口轉發
當我們在服務器上搭建一個圖書以及一個電影的應用,其中圖書應用啟動了 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 也有端口轉發功能。
參考:
https://www.php.cn/nginx/425693.html
https://www.cnblogs.com/zhaoyingjie/p/7248678.html