理论部分
niginx是什么,有什么用?
官方回答:
随着一个应用程序的访问量越来越庞大,对数据库的访问量也随之增强,而单个服务器的承受能力是有限的,这时就需要增加多个服务器,但是我们如何保证所有访问分摊到各个服务器并保证他们协同合作使用呢?这就需要用到反向代理工具Nginx
Nginx是一个高性能的HTTP和反向代理web服务器。是一个使用c语言开发的高性能的http服务器及反向代理服务器,同时也提供了IMAP/POP3/SMTP服务。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
简单来说:
niginx就相当于是一个中转站,将客户端的一些数据,按照nginx中设置的分配方式,分配给服务器群,从而实现负载分担,反向代理
什么是反向代理:首先我们需要理解什么是正向代理,正向代理是A请求B,便是真的请求B,如果B服务器坏了,就没法回应请求。
反向代理是A去请求B ,回复请求的不一定是B,而是负载均衡给了B的全家。
当然其他解释是:
反向代理是充当Web服务器网关的代理服务器。当您将请求发送到使用反向代理的Web服务器时,他们将先转到反向代理,由该代理将确定是将其路由到Web服务器还是将其阻止。
这意味着有了反向代理,您永远不会与使用它的Web服务器进行直接通信。可以将它们看作web服务器或服务器集群的某种包装器。通过负载平衡和缓存,它们可以保护web免遭攻击,并提供更好的web性能。
这样我们理解了什么是负载均衡,也就该配置相应的服务了
关于软件安装
由于安装包大概率没有在镜像里,所以我们选择在官网下载tar包,通过xftp传送到linx中
我们选择这个文件
解压文件
tar -zxf nginx-1.8.2.tar.gz
就算是解压完之后,也不是我们想要的配置文件,这个文件是需要编译的,所以我们需要下载相应的编译器以及其他东西
yum install -y gcc pcre-devel zlib-devel openssl-devel
在我们解压的文件中,有一个名为configure的脚本文件,打开看可以出都是一些创建文件的命令,是的,这个就是安装文件
所以我们可以开始安装了,我这里选用了指定的安装路径,读者也可以不改
./configure --prefix= /abc/niginx
安装完也是不能用的,记得吗,我们需要编译
make && make install
开启Nginx
cd /abc/nginx/sbin
./nginx
每次代开这个服务都要进入这个路径,然后执行“./nginx” ,当然读者也可以将“./nginx”写入环境变量之中
conf是配置文件目录
html是静态资源文件目录
关于配置文件的解释:
#全局块
#user nobody;
worker_processes 1;
#event块
events {
worker_connections 1024;
}
#http块
http {
#http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server块
server {
#server全局块
listen 8000;
server_name localhost;
#location块
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#这边可以有多个server块
server {
...
}
}
详细请参考如下文章:
Nginx配置文件详解 - 程序员自由之路 - 博客园 (cnblogs.com)
以上我们就算是安装完毕,接下来就是进阶了
如上结果是产出 一系列注释之后,以及其他多余内容,并进行简单配置的结果
红框内为简单配置
第一个红框是创建了一个 简单的服务器主机组,并取名为bdq(名字随意)
第二个框是设定了代理,所有搜索bdq的都会轮询给主机组
在此基础上更近一步:设负载均匀策略
方法1:增加美国服务主机的权重
upstream abcd {
server 192.168.206.131:8080 weight=2;
server 192.168.206.134:8080 weight=1;
}
权重越大,发送的请求越多,不再是简单的轮询了,但是仍然死板
方式2:最少链接数
upstream abcd {
least_conn;
server 192.168.206.131:8080 ;
server 192.168.206.134:8080 ;
}
nginx会尽量避免将过多的请求发送给繁忙的应用程序服务器,而是发送给不太繁忙的
方式3:通过hash算法
upstream abcd {
ip_hash;
server 192.168.206.131:8080 ;
server 192.168.206.134:8080 ;
}
确保客户都拿始终请求同一个服务器,nginx会根据hash算法的结果进行选择
资源静态化
服务器很多,都提供同一个服务,相同的资源也会很多,这样势必会造成资源的浪费,所以我们选择将资源隔开
以图片为例
图床:由外币服务器统一管理图片
配置静态资源的路径
location ^~ /static/ {
root html;
}
/static/指定的资源的位置,必须是static,只有这样才会匹配规则c
只要是规则中匹配上的都会在root html中