Nginx配置文件
更详细可查看Nginx配置文件(nginx.conf)配置详解
****************全局块start****************************
#user nobody; #配置运行Nginx服务器用户(组)
worker_processes 1; #制定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #Nginx进程PID存放路径
****************全局块end******************************
****************events块start****************************
#设定Nginx的工作模式及连接数上限
events {
worker_connections 1024;
}
****************events块end******************************
****************http块start******************************
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server 块是对虚拟主机的配置
server {
listen 80;
server_name 192.168.74.129;
#一个server 块可以配置多个location
location / {
root html;
proxy_pass http://127.0.0.1:8080
index index.html index.htm;
}
}
}
****************http块end******************************
Nginx反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
实现步骤
- 修改window端hosts文件,配置域名映射ip地址,路径为
C:\Windows\System32\drivers\etc\hosts
192.168.74.129 www.123.com
- 启动Tomcat
- 对nginx.conf做以下配置
- 启动nginx,浏览器访问
http://www.123.com/
即可访问到tomcat
根据访问的路径跳转到不同端口的服务
实现效果:
访问 http://192.168.74.129:9001/demo/ 直接跳转到 127.0.0.1:8080
访问 http://192.168.74.129:9001/test/ 直接跳转到 127.0.0.1:8081
具体实现:
- 准备两台 tomcat 服务器,一台 8080,一台 8081
- 8080
webapps
目录下创建demo
文件夹,并放入一个a.html
文件 - 8081
webapps
目录下创建test
文件夹,并放入一个a.html
文件 - 启动8080,8081服务器
- 配置nginx.conf
- 启动nginx,浏览器访问
http://192.168.74.129:9001/test/a.html
和http://192.168.74.129:9001/demo/a.html
location指令
通过指定模式来与客户端请求的URI相匹配,基本语法如下:location [=||*|^~|@] pattern{……}
- 没有修饰符 表示:必须以指定模式开始
例如location /abc{...}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?12
http://baidu.com/abc/
http://baidu.com/abcde
- =表示:必须与指定的模式精确匹配
例如location = /abc{...}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?12
如下是错的:
http://baidu.com/abc/
http://baidu.com/abcde
- ~ 表示:指定的正则表达式要区分大小写
例如location ~ ^/abc${...}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?a=1&b=2
如下是错的:
http://baidu.com/ABC
http://baidu.com/abc/
http://baidu.com/abcde
- ~* 表示:指定的正则表达式不区分大小写
- ^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,
- @ :定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请
求来访问,如try_files或error_page等
Nginx负载均衡
实现步骤
实现效果 :
浏览器地址栏输入地址http://192.168.74.129/loadbalance/a.html
,负载均衡效果,平均 8080 和 8081 端口中 。
具体实现
- 准备两台 tomcat 服务器,一台 8080,一台 8081
- 8080
webapps
目录下创建loadbalance
文件夹,并放入一个a.html
文件 - 8081
webapps
目录下创建loadbalance
文件夹,并放入一个a.html
文件 - 启动8080,8081服务器
- 配置nginx.conf
- 启动nginx,浏览器访问
http://192.168.74.129/loadbalance/a.html
不停刷新可看到8080和8081轮询出现(谷歌浏览器需要点链接刷新)。
Nginx负载均衡策略
-
轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
-
weight weight 代表权重默认为 1,权重越高被分配的客户端越多
upstream myserver {
server 192.168.74.129:8080 weight=10;
server 192.168.74.129:8081 weight=10;
}
- ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
upstream myserver {
ip_hash;
server 192.168.74.129:8080;
server 192.168.74.129:8081;
}
- fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver {
server 192.168.74.129:8080;
server 192.168.74.129:8081;
fair;
}