一些细节我就整合了其他人的资源
windows下配置安装nginx及使用
一、安装
1.1 从nginx官网下载相应的安装包:http://nginx.org/
1.2 建议下载 下载稳定版
1.3 解压到相应的目录,比如我是e盘 然后修改目录名字为nginx
1.4 双击启动Ngnix,一闪而过,此时想要确定是否启动成功,可以直接打开任务管理器查看:
1.5 此时 直接在浏览器地址栏输入http:localhost 便能看到 欢迎页面,说明你虚拟主机已经搭建好了
1.6 但是有时候 我们需要配置项目的根路径 在默认情况下 他的root是 nginx目录下的html文件夹
1.7 如若修改 则打开conf目录下的nginx.conf。
找到server选项 修改location 中的root 选项。
比如我修改到D:/webroot
解压包里只有启动nginx服务器运行程序,但是如果要重启,或者停止服务都必须在dos命令下手动重启或停止,比较麻烦,我用批处理写了重启和停止命令:如下
stop.bat
restart.bat
如图:
二、Nginx整合Tomcat实现动静分离
为什么要做动静分离
- 动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署
- 动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则使对静态资源的请求全部交给nginx处理,而讲动态请求转发给应用服务器处理,达到动静分离的目标,从而提高网站的并发性能,达到优化网站架构的效果
三、Tomcat集群横向拓展 + Nginx负载均衡
概况
- 搭建Tomcat集群,通过横向拓展解决单服务器上限瓶颈
- Nginx处理静态资源,Tomcat处理接口请求,动静分离
- Nginx实现负载均衡,均衡Tomcat服务的并发压力
下面我们将使用一台Nginx+一台Tomcat模拟实现动静分离,项目将使用博主之前构建的项目并做部分修改
修改Web项目
修改项目下的index.html,添加img标签和js引入,修改后的代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎进入枣面包的面包坊</title>
<script type="text/javascript" src="js/nothing.js"></script>
</head>
<body>
<h1>欢迎进入枣面包的面包坊</h1>
<img src="img/photo.jpg">
</body>
</html>
项目添加photo.jpg和nothing.js文件
将项目打包部署到之前搭建的Tomcat服务器中并启动,通过浏览器访问:
可以看到访问返回了3样东西:
- 访问接口通过模板渲染之后得到的文档:document
- 获得JavaScript标签引入的js文件:script——nothing.js
- 获得img标签请求得到的静态图片:jpeg——photo.jpg
配置nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
#配置静态资源交给nginx处理,这里先只配置js和jpg
location ~ .*\.(js|jpg) {
root /export/data/nginx/appdemo; #静态文件目录
expires 30d; #缓存天数
}
#配置除静态资源以外的交给tomcat处理
location / {
proxy_pass http://localhost:8080/appdemo-0.0.1-SNAPSHOT/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重启Nginx服务
web访问Nginx服务:192.168.214.150,情况如下:
发现访问nginx时,即变成了访问tomcat服务,这里就是用nginx进行了反向代理;但是也发现了获取不到nothing.js和photo.jpg文件,那是因为nginx配置了静态资源的路径,而该路径下没有该资源导致的,将对应资源上传到指定位置即可,在nginx.conf文件中的配置的静态资源路径为:/export/data/nginx/appdemo
将图片和js放在Nginx配置文件的目录后再访问:
总结
到这里就实现了Nginx和Tomcat的集成,实现了web服务的动静分离,将静态资源交给Nginx处理,这里是将静态资源存储在本地,通过Nginx访问,当然也可以代理到其他静态服务器上;再将非静态资源的请求代理给Tomcat动态处理。这样即削减了Tomcat的压力,又发挥了Nginx高并发的能力,使web服务更加健壮。但是这里只是配置了单台Tomcat,当动态请求过多时,一台Tomcat服务器肯定是不足以处理足够多的动态请求的。后面将搭建Tomcat集群,通过横向拓展实现Tomcat的高并发。
三、Tomcat集群横向拓展 + Nginx负载均衡
概况
- 搭建Tomcat集群,通过横向拓展解决单服务器上限瓶颈
- Nginx处理静态资源,Tomcat处理接口请求,动静分离
- Nginx实现负载均衡,均衡Tomcat服务的并发压力
搭建Tomcat集群
1.部署架构
- 192.168.214.150:centos6-1 —— Tomcat1
- 192.168.214.151:centos6-2 —— Tomcat2
- 192.168.214.152:centos6-3 —— Tomcat3
启动Tomcat集群
分别启动centos6-1、centos6-2、centos6-3的Tomcat
启动Tomcat1
启动Tomcat2
启动Tomcat3
浏览器分别访问三节点Tomcat
可以看到3台服务器上的Tomcat都可以访问,同时在访问我们的项目的时候,都在页面显示出了Tomcat所在服务器本地的主机名和ip;这个就是同一个项目部署到集群的不同服务器中为用户提供服务;但是到目前为止,这三台服务器还是通过不同的访问地址才能访问得到,而我们需要得到的效果是访问同一地址,3台Tomcat都同时为用户提供服务,这里就需要我们的Nginx来做反向代理,实现Tomcat集群的负载均衡
配置Nginx反向代理
修改nginx.conf文件如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#动态服务器组
upstream zaomianbao.com {
server 192.168.214.150:8080;
server 192.168.214.151:8080;
server 192.168.214.152:8080;
}
server {
listen 80;
server_name localhost;
#配置静态资源交给nginx处理,这里先只配置js和jpg
location ~ .*\.(js|jpg) {
root /export/data/nginx; #静态文件目录
expires 30d; #缓存天数
}
#配置除静态资源以外的交给tomcat处理
location / {
proxy_pass http://zaomianbao.com;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重启Nginx
浏览器访问Nginx
连续访问三次出现三种不同的结果
发现3次访问同一个地址,但返回的内容却又差别,因为分别是3台不同的Tomcat处理动态的接口请求并返回html文档内容,而文档内容中动态渲染了Tomcat所在主机的主机名和ip,所以我们看到了不同的内容;而静态资源只在Nginx所在的centos6-1服务器上部署了一份。到这里就充分看到了Nginx集成Tomcat实现动静分离的好处以及Nginx对Tomcat横向拓展的负载均衡的技术支持。
容错机制
我们将Tomcat3宕掉
再访问Nginx,发现不影响应用的使用,只是请求分发时不再分配到已经宕机的Tomcat3上了,这里就是Nginx的upstream所实现的容错机制,这样就可以实现web服务的7*24小时不间断服务。
总结
以上架构足以解决大中型网站的高并发访问。Nginx反向代理,Tomcat横向拓展集群,Nginx处理静态内容,Tomcat处理动态接口请求,Nginx负责动态请求的负载均衡分配,Nginx容错机制实现高可用。随着集群的搭建,带来了显而易见的好处就是网站的并发能力大大提升,但是集群的产生也带来了一些难题,例如会话的问题