1.正向代理与反向代理的区别?
正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。正向代理的典型用途为在防火墙内的局域网客户端提供访问Internet的途径.
反向代理:反向代理是代理服务器的一种,服务器根据客户端的请求,从其关联的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址或者域名,而不知道在代理服务器后面的服务器簇的存在.
2.nginx概述
Nginx是一款优秀的反向代理服务器程序,能够为若干台服务器提供反向代理服务,一方面为客户端提供的统一的访问地址,另一方面为后台多个服务器提供了负载均衡的能力。Nginx是目前最主流的反向代理服务器,能够提供可靠的负载均衡、动静分离的能力。
a. 下载地址
http://nginx.org/en/download.html
b. 安装
将下载好的安装包解压到一个没有中文没有空格的目录下即可。
c. windows下常用命令
验证配置是否正确: nginx -t
查看Nginx的版本号:nginx -V
启动Nginx:start nginx
快速停止或关闭Nginx:nginx -s stop
正常停止或关闭Nginx:nginx -s quit
配置文件修改重装载命令:nginx -s reload
d. 配置
nginx的工作是基于[conf/nginx.conf]配置文件来进行的。
nginx.conf的配置结构:
http{ #代表处理http请求
#配置一个虚拟服务器
server{
#此虚拟服务器接收对80端口的访问
listen 80;
#此虚拟服务器接收对localhost主机名的访问
server_name localhost;
#当访问/user资源时由此配置处理
location /user{
规则
}
#当访问/order资源时由此配置处理
location /order{
规则
}
...
}
#其他Server配置
server ...
...
}
3.nginx案例实现请求转发
通过Nginx实现请求转发,通过配置nginx.conf转发策略,使得本来访问tomcate:8080端口转交由访问nginx:8088端口
当客户端访问http://www.aaa.com时,由nginx转发给http://127.0.0.1:8080端口进行处理
配置hosts文件
127.0.0.1 www.aaa.com
在nginx.conf中配置
http{
#为nginx配置一个虚拟服务器,
server {
#监听本机8088端口
listen 8088;
#接收对www.aaa.com主机名的访问
server_name www.aaa.com;
#对/即任意路径的访问进行处理
location / {
#转发到指定地址,tomcate访问地址
proxy_pass http://127.0.0.1:8080;
}
#可以配置多个location
...
}
#可以配置多个server
...
}
启动 tomcat
startup.bat
启动nginx
start nginx
4. location路径配置和匹配规则
a. location路径的写法
在配置虚拟服务器时,可以配置多个location,指定不同路径采用不同的处理方案,location支持多种写法,规则如下:
1. = =/aaa/1.jpg 路径严格匹配,路径必须一模一样才会匹配到
2. ^~ ^~/aaa 只要是指定路径开头的路径都可以匹配
3. ~ ~.png$ 区分大小写按正则匹配路径
4. ~* ~*.png$ 不区分大小写按正则匹配路径
5. / / 通用匹配,所有路径都可以匹配到
b. location路径配置的优先级
由于location的路径配置非常灵活,所有有可能一个路径被多个location所匹配,此时按照如下规则判断匹配优先级:
• 首先匹配 =
• 其次匹配 ^~
• 其次是按文件中顺序的正则匹配
• 最后是交给 / 通用匹配
• 当有匹配成功时候,停止匹配,按当前匹配规则处理请求
----总的规律是,精度越高优先级越高
案例:
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location / {
#规则F
}
访问根目录 /, 比如 http://localhost/ 将匹配规则 A
访问 http://localhost/login 将匹配规则 B
http://localhost/register 则匹配规则 F
访问 http://localhost/static/a.html 将匹配规则 C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则 D和规则 E,但是规则 D 顺序优先,规则 E不起作用
http://localhost/static/c.png则优先匹配到规则 C
访问 http://localhost/a.PNG 则匹配规则 E,而不会匹配规则 D,因为规则 E 不区分大小写
访问 http://localhost/category/id/1111 则最终匹配到规则 F
5. Ngnix的负载均衡策略
nginx在分发资源到后端服务器时,如何分配请求是可以配置的,称之为nginx的负载均衡策略。
轮询 默认不配置就是轮询 连接请求轮流分配给后端服务器
http{
upstream sampleapp {
server <>;
server <>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
ip哈希 ip_hash; abs(客户端ip.hash())%服务器数量,根据余数决定连接请求去往哪个服务器
http{
upstream sampleapp {
ip_hash;
server <>;
server <>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
最少连接 least_conn; 将连接请求分配给目前连接数最少的服务器
http{
upstream sampleapp {
least_conn;
server <>;
server <>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
基于权重 直接在地址后配置weight=x 根据权重进行分配,权重值越大,被分配的连接越多。可以直接配置为down,则不再分配连接。
http{
upstream sampleapp {
server <> weight=2;
server <> weight=5;
server <> down;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
7. Nginx的动静分离实现
a. 动静分离原理
动 --> 动态资源 --> servlet jsp --> 程序
静 --> 静态资源 --> jpg mp3 mp4 html css js --> 文件
tomcat能够处理动态和静态资源,但本质上是为处理动态资源而设计的服务器,过多静态资源交由tomcat管理会降低tomcat处理动态资源的能力,得不偿失。
nginx本身无法处理动态资源,但可以处理静态资源,而且性能优良。
因此可以将静态资源和动态资源拆分,将静态资源交由ngin处理,动态资源仍由tomcat处理,从而解放了tomcat对动态资源的处理能力,整体上实现动静分离,提升了效率。
b. 动静分离实现
配置方式:
server {
listen 8088;
server_name www.aaa.com;
location / {
#root可以指向nginx服务器中的本地磁盘地址
#静态文件就放置在这个磁盘地址中
#之后对server中资源的访问会被转换到对本地磁盘资源的访问
#www.aaa.com/aaa/bbb/1.html-->d://html/aaa/bbb/1.html
root D://html;
#默认访问的首页配置
index index.html;
}
}