淺析Nginx實現反向代理、負載均衡、動靜分離

1、首先來了解一下Nginx配置文件中的內容


主要包含三部分內容:
(1)全局塊:配置服務器整體運行的配置指令,比如 worker_processes 1; 處理併發數的配置
(2)events  塊 :影響 Nginx  服務器與用戶的網絡連接,比如 worker_connections 1024;  支持的最大連接數爲 1024
(3)http  塊:還包含兩部分:http全局塊(nginx服務器配置中的重要部分,代理,緩存,日誌定義等絕大部分功能以及第三方配置都可以放在這個模塊中。)、server塊 (server塊和虛擬主機有密切關係,每一個http塊可以包含多個server塊,在server塊中配置虛擬主機需要監聽的端口,IP或域名,每一個server塊中可以包含多個location塊,從嚴格意義上講,location塊只是server塊的一個指令,它會接收到域名後面跟着的字符串,根據字符串來進行匹配,對特定請求進行處理,重定向,緩存,以及應答控制等功能。)

2.對Nginx進行的多數配置一般在server塊進行

2.1.1通過對server塊進行配置實現反向代理 實例1:

server {
	listen  91;  # 設置虛擬主機監聽端口
	server_name www.cg.cn; # 設置虛擬主機域名(在第二個例子中對此有詳細說明)
	location / {
	    proxy_pass http://localhost:8888;  # 設置反向代理的服務器地址IP+端口號(這裏是Tomcat服務器)    
	}
}

效果:通過訪問http://www.cg.cn:91訪問到被反向代理的tomcat服務器:

2.1.2 在上述例子中有個點需要注意,就是www.cg.cn的域名不能直接使用,說到這裏就需要對域名進行解析的過程進行簡述:首先域名解析時會對本機的hosts目錄(我的在C:\Windows\System32\drivers\etc目錄下)進行解析,看裏面是否做了ip與域名的映射,發現沒有在瀏覽器輸入的域名映射後,會去域名系統(DNS)進行查找匹配。因此在做上述實例1前需要將本機hosts文件做修改(添加如下映射):

127.0.0.1  www.cg.cn 

這樣就能對www.cg.cn域名進行本地解析

 

2.2通過對server塊進行配置實現反向代理 實例2:配置同一端口不同server_name

 

首先在hosts文件中追加內容:

127.0.0.1  www.cg.cn 
127.0.0.1  www.cg.org 

然後對server塊進行配置:

server {
	listen  91;
	server_name www.cg.cn;
	location / {
		proxy_pass http://localhost:8888;      
	}
}
	
server {
	listen  91;
	server_name www.cg.org;
	location / {
		proxy_pass http://localhost:9999;  # 這裏是另一臺端口號爲9999的tomcat      
	}
}

分別訪問兩個域名效果如下:

注意點:這裏的server_name有個匹配規則:

server_name與host匹配優先級如下:

(1)完全匹配

(2)通配符在前的,如*.test.com

(3)在後的,如www.test.*  

(4)正則匹配,如~^\.www\.test\

如果都不匹配

(1)優先選擇listen配置項後有default或default_server的

(2)找到匹配listen端口的第一個server塊

 

3.負載均衡配置:

3.1Nginx負載均衡選項upstream配置(主要有三種選項:1.使用哈希算法對訪問的ip地址進行哈希,同時也是解決session共享問題的一種解決方案;2.使用權重,權重大的訪問比例也會增大;3.不配置權重就默認採用輪詢的方式進行請求分發。):

upstream serverpool{      # 通過此模塊實現請求分發,達到負載均衡
	# ip_hash;        		  # 哈希算法
	# server 10.10.27.9:8888 weight=3;   # 聲明權重
	# server 10.10.27.8:9999 weight=1;
	server localhost:8888;   # 不聲明權重默認輪詢方式進行負載均衡
	server localhost:9999;
}

3.2配置好upstream塊後,還沒完,還需要配置server塊啓用upstream配置:

server {
	   listen       99;
	   server_name  localhost;   # 這裏就用localhost訪問nginx
	
	   location / {
	       proxy_pass http://serverpool/;  # 啓用upstream配置(指定代理連接池)
               proxy_set_header Host $host;    #轉發請求頭信息
               proxy_set_header X-Forward-For $remote_addr;  #轉發請求IP地址
	   }
}

效果圖:我上面用的是輪詢交替分發請求所以,訪問的tomcat也是交替出現的:

 

4.動靜分離配置(動靜分離實現了靜態資源文件(如js,css,html)和動態文件(如jsp和servlet)分別處理效果):

爲了演示效果,先在C盤新建文件夾nginxstaticsource,再在nginxstaticsource新建html和img文件夾分別存放網頁和圖片:

具體配置如下:

server {
	listen  8091;             # 隨便寫了端口號,訪問nginx就使用該端口號好了
	server_name 127.0.0.1;
	location  /img/ {
		root   c:/nginxstaticsource;  # 設置靜態資源的文件路徑,注意點:這裏的路徑會和/img/做路徑拼接後爲:c:/nginxstaticsource/img/
		autoindex on;   # Nginx默認是不允許列出整個目錄的,如需此功能就設置這個。
	}
	location  /html/ {
		root   c:/nginxstaticsource;  # 路徑拼接後最終訪問的是 c:/nginxstaticsource/html/
		index index.html index.htm;
	}
}

最終效果圖:

訪問img:

訪問html:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章