失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Nginx - 静态网站;负载均衡;静态代理;动静分离;虚拟主机

Nginx - 静态网站;负载均衡;静态代理;动静分离;虚拟主机

时间:2021-06-29 16:50:29

相关推荐

Nginx - 静态网站;负载均衡;静态代理;动静分离;虚拟主机

Nginx主要应用在如下方面

一、静态网站

Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、CSS、js、图片等)通过HTTP协议返回给浏览器客户端

如,我们创建一个Java web工程,命名为 myweb ,将其上传到Linux服务器上的 opt/static目录下

修改 nginx.conf 核心配置文件

注:

此处修改的是 Nginx安装路径 /usr/local/nginx/conf 下的 nginx.conf配置文件

而不是Nginx的解压缩之后的路径 /opt/software/nginx-1.14.2/conf

在server中,通过location匹配访问的路径,然后转发给静态资源

server {listen 80;server_name localhost;......location / {root html;index index.html index.htm;}#location / {#root /opt/static/myweb;#index index.html index.htm;#}# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {root /opt/static;index index.html index.htm;}......}

在浏览器中输入 http://IP地址:80进行访问,如:http://192.168.133.128:80/

注:

一定要注意路径问题,即location 地方的配置,可能会遇到404找不到页面的错误,主要原因是配置路径问题

规则:ip + port 等于 root

http://192.168.92.128:80/ = root = /opt/static/ace

location匹配顺序

在没有标识符的请求下,匹配规则如下:

1、nginx服务器首先在server块的多个location块中搜索是否有标准的uri和请求字符串匹配。如果有多个标准uri可以匹配,就匹配其中匹配度最高的一个location。

2、然后,nginx在使用location块中,正则uri和请求字符串,进行匹配。如果正则匹配成功,则结束匹配,并使用这个location处理请求;如果正则匹配失败,则使用标准uri中,匹配度最高的location。

注:

1、如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。

2、普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。

3、正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)

4、在location中,有一种统配的location,所有的请求,都可以匹配,如下:

location/{#因为所有的地址都以/开头,所以这条规则将匹配到所有请求#但是正则和最长字符串会优先匹配}

结合标识符,匹配顺序如下:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)

(精确匹配)> (最长字符串匹配,但完全匹配) >(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)

二、负载均衡(Load Balance)

在网站创立初期,我们一般都使用单台机器对外提供集中式服务。当一台服务器的访问量越大时,服务器所承受的压力也就越大,超出自身所指定的访问压力就会崩掉,避免发生此类事情的发生,因此也就有了负载均衡来分担服务器的压力。

负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀

负载均衡(Load Balance)就是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案

通俗些讲,就是我们有几十台、几百台甚至更多服务器,将这些服务器组成一个服务器集群,当客户端访问某台设备的数据时,首先发送的请求先到一台中间服务器,并通过中间服务器在服务器集群中平均分摊到其他服务器中,因此,当用户每次所发送的请求都将会保证服务器集群中的设备均与平摊,以此来分担服务器的压力,从而保持服务器集群的整理性能最优,避免出现有崩溃的现象。

如:我们网站对外提供的访问入口通常只有一个,比如 。那么当用户在浏览器输入进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。

实现负载均衡两种方案

1、硬件负载均衡

比如 F5、深信服 等服务器

优点是有厂商专业的技术服务团队提供支持,性能稳定

缺点是费用昂贵,对于规模较小的网络应用成本太高

2、软件负载均衡

比如 Nginx等

优点是免费开源,成本低廉

当前就是软件nginx 实现负载均衡

我们创建一个 Java web 项目,打包为 myweb.war,分别上传到两台Linux服务器上的 Tomcat安装目录下的 webapps目录下(可分别对两台Linux上myweb项目 加上IP地址进行区分)

在浏览器中分别输入IP + 项目名如 myweb 进行访问

http://192.168.133.128:8080/myweb;http://192.168.133.129:8080/myweb

配置nginx

在http模块上加

http {# 通过upstream可以实现服务的负载均衡规则upstream { # 默认 轮询server 192.168.133.128:8080; server 192.168.133.129:8080; } }

在server模块加

server {# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {# 字符串要和 upstream 后面的字符串相等proxy_pass ;}}

通过配置文件启动nginx

浏览器上输入,http://192.168.133.130:80/myweb 访问刷新一次,就会发现不同IP地址myweb被加载

负载均衡策略

1、轮询Round Robin(默认)

在http、server模块上加

http {# 通过upstream可以实现服务的负载均衡规则upstream { # 默认 轮询server 192.168.133.128:8080; server 192.168.133.129:8080; } server {# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {# 字符串要和 upstream 后面的字符串相等proxy_pass ;}}}

2、权重(加权随机(weight Rondom)算法)

每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况

在http、server模块上加

http {# 通过upstream可以实现服务的负载均衡规则upstream { # 默认 轮询server 192.168.133.128:8080 weight=3; server 192.168.133.129:8080 weight=2; } server {# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {# 字符串要和 upstream 后面的字符串相等proxy_pass ;}}}

3、ip_hash(源地址哈希Source IP Hash算法)

ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题

http {# 通过upstream可以实现服务的负载均衡规则upstream { ip_hash;server 192.168.133.128:8080; server 192.168.133.129:8080; } server {# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {# 字符串要和 upstream 后面的字符串相等proxy_pass ;}}}

4、最少连接Least Connections

web请求会被转发到连接数最少的服务器上

http {# 通过upstream可以实现服务的负载均衡规则upstream { least_conn;server 192.168.133.128:8080; server 192.168.133.129:8080; } server {# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {# 字符串要和 upstream 后面的字符串相等proxy_pass ;}}}

三、静态代理

把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。

所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。

将 IP 128上的Tomcat和 IP129 上的Tomcat下webapps中的 war包下的image,js,html,css等文件资源删除,并在各自服务器上

/opt/static/myweb(即项目名)中创建 image,js,html,css 等文件夹 上传到此位置

在 nginx配置文件 的server模块上加

server{# 访问静态资源location ~ .*/(css|js|img|image|images) {root /opt/static;}}

注:

~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配

第一个点 . 表示任意字符

*表示一个或多个字符

\. 是转移字符,是后面这个点的转移字符

| 表示或者

$ 表示结尾

整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理

放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;

否则会出现403错误 chmod 755

四、动静分离

Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。

动态资源,如jsp由tomcat或其他web服务器完成

静态资源,如图片、css、js等由nginx服务器完成

http {# 通过upstream可以实现服务的负载均衡规则# 动态资源负载均衡upstream { # 默认 轮询#server 192.168.133.128:8080; #server 192.168.133.129:8080;} #静态资源负载均衡upstream { # 默认 轮询#server 192.168.133.128:80; #server 192.168.133.129:80;}server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /ace {root /opt/static;index index.html index.htm;}# 设置根路径;接收myweb请求,去/opt/static下找资源location /myweb {# 字符串要和 upstream 后面的字符串相等proxy_pass ;}# 访问静态资源目录location ~ .*/(css|js|img|image|images) {proxy_pass ;}}}

五、虚拟主机

虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。

Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个域名不同的网站。

Nginx下,一个server标签就是一个虚拟主机。nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可

http {upstream {server 192.168.133.128:8080;}upstream {server 192.168.133.129:8080;}server {listen80;;location / {proxy_pass ;}}server {listen80;;location / {proxy_pass ;}}server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}}}

如果觉得《Nginx - 静态网站;负载均衡;静态代理;动静分离;虚拟主机》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。