Nginx是一个高性能的HTTP和方向代理服务器,其特点是占有内存少,并发能力强,能够支持高达50000个并发连接响应。
Nginx配置文件conf/nginx.conf
系统配置:server,可以配置多个server
转发规则:location路径、root目录、index欢迎页面
反向代理规则:location拦截路径、proxy_pass转向地址、index
ginx启动停止
启动:start nginx.exe(不能双击,双击后进程无法关掉)
停止:nginx.exe –s stop
重新加载:nginx.exe –s reload
验证安装是否成功:nginx.exe –t
Linux下部署Nginx
yum安装
yum install nginx#yum安装nginx,方便它的依赖包自动安装
whereis nginx#查看安装后的各目录
启动停止重启
nginx#直接执行,配置文件 /etc/nginx/nginx.conf
nginx -s stop#停止
nginx -s reload#更新
测试
nginx –t#测试nginx是否正常
执行结果:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ps -ef |grep nginx
请求转发(注意配置的具体含义根据需求配置就行)
当用户访问http://localhost:80,nginx将这个请求什么也不做,只负责转发到tomcat的访问地址http://localhost:8080
server {
listen 80;
server_name localhost;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {#拦截所有的资源
proxy_pass http://127.0.0.1:8080;#转向tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
动静分离(指向一个目录)
静态资源:图片、css、js、html(静态资源处理时并发非常高)
动态资源:asp/aspx、php、jsp
nginx默认配置
location / {
root html; #相对路径,配置了一个html目录,我们可以将网站所用到的所有的静态资源从war中移除,放到这个目录下。
index index.html index.htm;#配置的欢迎页面
}
图片服务器(指向一个目录)
server {
listen 80;
server_name image.test.com;#域名地址,修改hosts文件做一个配置 image.jt.com 127.0.0.1
location / {
root /user/local/image;#图片文件所在目录,按日期来分目录:yyyy/mm/dd/uuid.jpg或者当前时间的毫秒数+随机值.jpg
}
}
负载均衡
防止单点故障
nginx转发请求到tomcat,如果某个tomcat宕机,tomcat会进行超时判断,如果某个tomcat宕机,访问不了。它会自动把这个请求转发给其它的tomcat。保证不会因为一个tomcat宕机导致业务无法继续访问。
轮询
默认配置,tomcats有n个,请求就被平均分配到这n个服务器上。请求次数%n,平均分配到每个服务器。
server {
listen 80;
server_name www.test.com;
location / {#拦截所有的资源
proxy_pass http://testservice;#引用定义的upstream
}
}
#配置一个upstream,声明一个名称testservice配置多个ip地址转向,默认就是轮询。
upstream testservice{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
server 127.0.0.1:8100;
}
轮询方式存在问题:服务器有性能比较好的,有性能比较差的。新的服务器的配置比旧的服务器强悍很多。CPU核也多,内存也大,硬盘容量也大,速度还快。
如果还使用轮询的方式,就会造成新服务器资源的浪费,旧的服务器资源压力大。显然资源分配不合理,应该多劳多得。
权重
#前台,有3个tomcat集群,用户访问时轮询转向到某一个tomcat
server {
listen 80;
server_name www.test.com;
location / {#拦截所有的资源
proxy_pass http://testservice;#引用下面定义的upstream
}
}
#配置一个upstream,声明一个名称testservice,配置多个ip地址转向,默认就是轮询
upstream testservice {
server 127.0.0.1:8080 weight=8;#访问请求分成9份,这个tomcat负责8份的链接
server 127.0.0.1:8090 weight=1;#访问请求分成9份,这个tomcat负责1份的链接
server 127.0.0.1:8100 down;#这个tomcat暂时不参加负载
}
哈希ip_hash
upstream testservice{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8090;
server 127.0.0.1:8100;
}
url_hash 根据url进行hash算法/fair其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。