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: