nginx是一个http的web服务器,可以将服务器上的静态文件(html,图片等)通过http协议返回给浏览器端
server{
listen 80; #端口号
location/{
root /opt/www/;静态文件路径
}
}
下载ace-admin的一个bootstrap 静态网站模板,上传到linux服务器的opt/ace文件夹下,AceAdmin为下载项目的文件夹名称
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
-----------------------
location / {
# root html;
root /opt/ace/AceAdmin;
index index.html index.htm;
}
保存退出后,检查配置文件是否存在问题
// 关闭nginx
ps -ef | grep nginx
kill -QUIT pid(master-process)
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
// 启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
// 规则:
ip + port ==root
http://192.168.132.128:80/ = root = /opt/ace/AceAdmin
//无法访问
http://192.168.132.128:80/ace = root/ace = /opt/ace/AceAdmin/ace
早期的互联网应用,由于用户流量比较小,业务逻辑也比较简单,往往一个单服务器就能满足负载需求。随着现在互联网的流量越来越大,稍微好一点的系统,访问量就非常大了,并且系统功能也越来越复杂,那么单台服务器就算将性能优化得再好,也不能支撑这么大用户量的访问压力了,这个时候就需要使用多台机器,设计高性能的集群来应对。
那么,多台服务器是如何去均衡流量、如何组成高性能的集群的呢?
负载均衡(Load Balancer)是指把用户访问的流量,通过「负载均衡器」,根据某种转发的策略,均匀的分发到后端多台服务器上,后端的服务器可以独立的响应和处理请求,从而实现分散负载的效果。负载均衡技术提高了系统的服务能力,增强了应用的可用性。
upstream 是配置nginx与后台服务器负载均衡非常重要的一个模块,并且还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发送故障,则前端的请求不会被转发到该故障的机器。
在http模块上添加
upstream www.web.com{
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8090 weight=1;
}
weight =1 表示权重,用于后端服务器性能不均的情况。访问比率约等于权重之比,权重越大,机会越多
2. server 添加location
location /myweb{
proxy_pass http://www.web.com;
}
proxy_pass的值http://www.web.com 要和upstream 后面的字符串相等
负载均衡策略:
把所有静态资源的访问该问访问nginx。而不是访问tomcat,因为nginx更擅长静态资源的处理,性能更好,效率更高。所以在实际应用中,我们将静态资源(图片、css、html、js…)交给nginx处理。
静态资源代理通过配置nginx.conf文件实现:
location ~ .*\.(js|css|htm|html|gif|jpeg|png|bmp|swf|ioc|rar|zip|txt|fiv|mid|doc|ppt|pdf|xls|mp3|wma)${
root /opt/ace/AceAdmin;
}
~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配
. 第一个点表示任意字符
* 表示一个或多个字符
\.是转义字符,是后面这个点的转义字符
| 表示 或
$ 表示 结尾
整个配置表示以“.” 后面括号里边的这些后缀结尾的文件都由nginx处理
location ~ .*/(css|js|image|img){
root /opt/ace/AceAdmin
}
Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景;
动态资源,如jsp由tomcat或其他web服务器先成:
静态资源,如图片、Css、 js等由nginx服务器完成;
各司其职,专注于做自己a长的事情;
动静分离充分利用了它们各自的优势,从而达到更高效台理的架构
虚拟主机,就是把一台物理服务器划分成多个虚拟"的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站,
Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx ,就可以运行多个网站;
Nginx下,一个server标签就是一个虚拟主机
nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可
配置虚拟主机通常有下面两种方式
基于域名的虚拟主机
server{
listen 80;
server_name www.shop.com;
location /myapp{
proxy_pass http://shop.com;
}
}
server{
listen 80;
server_name www.p2p.com;
location /myapp{
proxy_pass http://p2p.com;
}
}
基于端口的虚以主机
server{
listen 8080;
server_name www.shop.com;
location /shop{
proxy_pass http://www.shop.com;
}
}
server{
listen 8090;
server_name www.shop.com;
location /p2p{
proxy_pass http://www.p2p.com;
}
}