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: