1.反向代理
(1.)正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
(2.)反向代理:我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露了代理服务器地址,隐藏了真是服务器ip地址。
2.负载均衡
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,在将结果返回客户端。
安装nignx
1.安装pcre依赖,先用tar命令解压,然后进入解压后的文件夹,执行./configure,可能会发现没有gcc,执行下面命令安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
进入pcre目录,执行./configure命令,正常执行后,执行make && make install命令进行安装。执行pcre-config --version命令会出现安装的版本,如果没有出现,则表示没有安装成功。
2.安装nginx,先用tar命令解压,进入解压好的目录,执行./configure命令,没有问题后执行make && make install命令进行安装,安装成功之后,在/usr/local目录下,会有一个nginx文件,在nginx目录下
/sbin目录下有启动脚本。./nginx启动失败的话,执行以下命令就可以运行
find / -type f -name *libpcre.so.*
ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1
开放80端口,让外界可以访问到nginx:
查看开放的端口号:firewall-cmd --list-all
设置开放的端口号:
firewall-cmd --add-service=http -premanent
sudo firewall-cmd --add-port=80/tcp -permanent
重启防火墙
firewall-cmd --reload
上面这种命令不能执行的话,可以用下面这种方式开放端口
vim /etc/sysconfig/iptables
复制里面有22的那行,把22改成自己想开的端口号
service iptables restart,端口开启成功。
nginx常用命令:
使用命令的前提,要进入/usr/local/nginx/sbin目录下
./nginx:查看nginx的版本号
./nginx:启动nginx
./nginx -s stop:关闭nginx
./ngixn -s reload:重新加载nginx
nginx的配置文件:
位置:/usr/local/nginx/conf …/nginx.conf
nignx配置文件由3部分组成:
1.全局块
从配置文件开始到events块的内容主要会设置一些影响nginx服务器整体运行的配置指令
worker_processes 1; 值越大(一般用4或8,不用2,会导致主进程挂掉),nginx能处理的用户并发量越大
2.events块
events块涉及的指令主要影响ngin服务器和用户的网络连接
worker_connections 1024; 支持的最大连接数
3.http块
nginx服务中配置最频繁的部分
(1)http全局块:配置指令包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单链请求数上限等…
(2)server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是一样的,该技术的产生是为了节省互联网服务器硬件成本。
反向代理实例
效果:在浏览器地址栏中输入www.123.com,弹出的是tomcat页面
先修改hosts文件
虚拟机ip地址 自己做的域名
192.168.1.xxx www.123.com
这样做,在浏览器中输入www.123.com就能访问到linux服务器了,
localtion指令说明:
location =|~|~*|^~| uri{
1、= :用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。。
2、~:用于表示uri 包含正则表达式,并且区分大小写。。
3、~*:用于表示uri包含正则表达式,并且不区分大小写。。
4、^~:用于不含正则表达式的uri前,要求Nginx 服务器找到标识uri和请求字符串匹配度最高的location 后,立即使用此location处理请求,而不再使用location块中的正则 和请求字符串做匹配。。
注意:如果uri包含正则表达式,则必须要有~或者‘ *标识。。
负载均衡实例
1.实现效果:浏览器地址栏输入 http://192.168.1.13/edu/a.html ,平均8080和8081端口中
2.准备工作:用两个tomcat服务器实现,8080和8081,在两台tomcat中的webapp下创建edu文件夹,创建a.html文件
3.在nginx配置文件中进行负载均衡
http{
......
upstream myserver{
#ip_hash;
server 192.168.1.13:8080 weight=1;#weight=1(默认为1) weight代表权,权重越大,被分配的客户端越多
server 192.168.1.13:8081;
#fair;
}
server{
listen 80;
server_name 192.168.1.13;
location /{
proxy_pass http://myserver;
}
}
注意:upstream myserver中的myserver一定要放到location中
nignx负载均衡的基本策略:
1.轮询:每个请求按照不同时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,则会自动剔除
2. weight:weight=1(默认为1) weight代表权,权重越大,被分配的客户端越多
3. ip_hash:每个请求按照ip的hash结果分配,这样每个客户端固定访问一个服务器,可以解决session问题
4. fair(第三方):按照后端服务器响应时间来分配请求,响应时间短的优先分配
动静分离
通过location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),我这里设置3d, 表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
准备工作:在linux中准备一些静态资源
server {
listen 80;
server_name 192.168.1.13;
#charset koi8-r;
#access_log logs/host.access.log main;
location /www/ {
root /ndata/;
#proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
location /image/{
root /ndata/;
autoindex on;
}
最终测试:http://192.168.1.13/image/
autoindex on:因为开启了这个属性,所以文件夹会以这种方式存在
nginx配置高可用的集群
准备工作:
(1)准备两台服务器:192.168.1.13,192.168.1.12
(2)都安装好nginx
(3)在两台服务器安装keepalived,yum install keepalived -y ,可以通过rpm -q -a keepalived方法查看是否安装成功,安装成功后,会在/etc目录下生成一个keepalived的文件夹
完成高可用配置(主从配置):
keepalived.conf
global_defs {
notification_email { //配置通知邮件,非必须
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1 #访问到主机,需要在/etc/host 下去进行配置,通过后面这个就可以访问到主机
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh";
interval 2 # 检测脚本执行的间隔
weight -10
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将master改为BACKUP
interface eth0 #网卡
virtual_router_id 51 #主,备机上的virtual_router_id必须相同
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.50 #虚拟地址ip,主从必须一致
}
track_script { //调用脚本
chk_nginx
}
}
启动keepalived:/etc/init.d/keepalived start(centos6.5版本)
systemctl start keepalived(centos7)
通过ip a指令可以看到主从复制的效果
nginx原理分析
1.master和worker
3.一个master和多个worker的好处
(1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作
(2)每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker是独立的,会继续争抢,实现请求过程,不会造成服务中断
4.设置多少个worker合适
worker数和服务器的cpu数相同时最合适的
5.连接数worker_connection
第一个:发送请求,占用了worker的几个连接数
2个或4个
第二个:nginx有一个master,有四个worker,每个worker支持的最大连接数据为1024,支持的最大并发数为多少?
普通的静态访问最大并发数是:worker_connectionworker_processes/2,而如果http作为反向代理来说,最大并发数应该为:worker_connectionworker_processes/4