分布式技术入坑指南(五)

分布式技术入坑指南(五)

13.网页静态化之FreeMarker
14.反向代理/负载均衡服务器:Nginx

网页静态化

什么是静态化?
通过一些技术手段(Freemarker/valocity)将动态的页面(jsp,asp.net,php) 转换成静态的页面,通过浏览器直接访问静态页面。
为什么要静态化?

  1. 通过浏览器直接访问静态的页面,不需要经过程序处理,它的访问速度高。稳定性好。
  2. 更有效的防止安全漏洞问题,比如不易遭受黑客攻击。
  3. 静态的页面更容易被搜索引擎收录。

更多概念见笔记文档,快速入门及整合Spring访问项目学习仓库地址:https://github.com/yuzh233/FreeMarker


反向代理/负载均衡

Nginx应用场景

http服务器
Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
虚拟主机
可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
反向代理,负载均衡
当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群时可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

安装及编译步骤见笔记文档

Nginx配置虚拟主机

通过端口区分

…/nginx/conf/nginx.conf中配置以下节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 一个server节点就是一个虚拟主机
server {
# 第一个web应用的端口
listen 80;
# 所在地址
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# Html是nginx安装目录下的html目录,也是该应用的静态资源文件存放的根目录 /
root html;
index index.html index.htm;
}
}
# 第二台虚拟主机
server {
# 第二个web应用的端口
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# 第二个web应用的资源文件放在html-81中,访问的时候 / 代表该目录
root html-81;
index index.html index.htm;
}
}

修改配置重新加载 ./nginx -s reload ,无需重启。
访问第一个web服务:http://localhost:80
访问第二个web服务:http://localhost:81
其实就是充当了tomcat.

通过域名区分

域名概念:略略略
域名访问流程:略略略
配置方式:…/nginx/conf/nginx.conf 中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 前面已经有一个虚拟主机用了这个端口,删了。这是第一个虚拟主机
server {
listen 80;
# 域名
server_name www.taobao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-taobao;
index index.html index.htm;
}
}
# 第二个虚拟主机
server {
listen 80;
# 域名
server_name www.baidu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-baidu;
index index.html index.htm;
}
}

修改本机host文件才能访问伪域名

nginx服务器IP:www.taobao.com
nginx服务器IP:www.baidu.com

其实访问的都是同一个应用。

Nginx配置反向代理

正向代理:
Alt text
反向代理
Alt text

  • 反向代理服务器决定哪台服务器提供服务。
  • 反向代理服务器不提供服务器。也只是请求的转发。

实现反向代理

两个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容。
配置:
两只猫、两个域名、一个nginx服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 反向代理服务器下的第一个服务器
upstream tomcat1 {
# 访问该服务器的ip及端口
server 192.168.184.130:8080;
}
server {
# 默认监听80端口,这样就不需要指定端口访问。
listen 80;
# 用户访问时的域名。
server_name www.sina.com.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# nginx通过前面的tomcat1转发到指定的网站,访问tomcat1就是访问192.168.25.148:8080
proxy_pass http://tomcat1;
index index.html index.htm;
}
}

# 反向代理服务器下的第二个服务器
upstream tomcat2 {
# 访问该服务器的ip及端口
server 192.168.184.130:8081;
}
server {
listen 80;
server_name www.sohu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat2;
index index.html index.htm;
}
}

Nginx配置负载均衡

一个服务由多台服务器提供,需要把负载分配到不同的服务器处理。
负载均衡的策略:

  • 默认轮询,即一个一个轮着来
  • 分配权重 server 192.168.25.148:8082 weight=2; ,weight代表权重
  • 通过IP地址的hash值 做映射
  • 通过URL的方式计算出Hash值
  • 随机策略
  • 最少并发量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 反向代理服务器下的第三个服务器,用于测试Nginx负载均衡
upstream tomcat3 {
# 假如该WEB服务下有多个服务器提供
server 192.168.184.130:8080;
server 192.168.184.130:8081;
}
server {
# 默认监听80端口,这样就不需要指定端口访问。
listen 80;
# 用户访问时的域名。
server_name www.yuzhtest.xyz;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# nginx通过前面的tomcat1转发到指定的网站,访问tomcat1就是访问192.168.25.148:8080
proxy_pass http://tomcat3;
index index.html index.htm;
}
}

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×