Linux运维——nginx负载均衡及网页地址重定向

nginx负载均衡

网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时候来自web前端的压力,也能让人十分头痛。怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。
nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

nginx工作在应用层,它的抗并发能力机强,一次可抗住10w个并发。可以作为:web服务器、反向代理、负载均衡,后面两个功能由upstream模块实现。

  nginx 的 upstream目前支持 4 种方式的分配

1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方)

 

一、nginx的源码安装

1.安装

[kiosk@foundation38 Desktop]$ scp nginx-1.10.3.tar.gz [email protected]:/root/
[root@vm1 ~]# tar zxf nginx-1.10.3.tar.gz
[root@vm1 ~]# cd nginx-1.10.3/auto/cc
[root@vm1 cc]# vim gcc           ##关闭debug模块;目的是不安装在本次实验中多余的软件包


[root@vm1 cc]# cd ..
[root@vm1 auto]# cd ..
[root@vm1 nginx-1.10.3]# yum install gcc -y
[root@vm1 nginx-1.10.3]# yum install pcre-devel -y
[root@vm1 nginx-1.10.3]# yum install openssl-devel -y
[root@vm1 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module                                                                                                        ##编译;http_ssl_module支持https;http_stub_status_module可查看nginx状态信息
[root@vm1 nginx-1.10.3]# make && make install          ##安装

2.配置

[root@vm1 nginx-1.10.3]# cd /usr/local/nginx/
[root@vm1 nginx]# cd conf/
[root@vm1 conf]# useradd -u 900 -s /sbin/nologin nginx          ##因为nginx在运行的过程中需要一个child进程起到在cup和内存之间交互信息的作用,而该进程需要以一个nginx用户的身份,所以需要创建该用户
[root@vm1 conf]# id nginx
uid=900(nginx) gid=900(nginx) groups=900(nginx)
[root@vm1 conf]# vim nginx.conf

因为一般服务器有好多个cpu,而正常情况下,进程会在不同的cpu上进行相关运算。比如,当一个进程正在运行,这时又一个优先级较高的进程要先执行,这时候就会断掉该进程,并将该进程的相关程序的内存地址压入堆栈,从而保护现场,当上一个紧急进程执行完后,要出栈恢复现场,这时该进程就会在数个cpu中进行选择,这样在不同cpu间来回选择,总的来说是浪费资源和时间的。所以我们一般会配置使相应的进程和cpu绑定,这样就会解决这个问题。

       下面我们来配置使nginx进程和相应cpu绑定,如下图这种方式就是让nginx服务自动选择cpu与child进程绑定:

 

下图是手动绑定的配置方法: (eg四个:0001  0010  0100  1000)

 
[root@vm1 conf]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/bin/        ##建立连接
[root@vm1 conf]# nginx -t              ##检查语法
[root@vm1 conf]# nginx          ##开启
[root@vm1 conf]# netstat  -antlpe | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      0          14758      3474/nginx       ##nginx 与apache不共存
检测:访问172.25.38.1

  Linux运维——nginx负载均衡及网页地址重定向_第1张图片

二、负载均衡

1.均衡器主配置文件

[root@vm1 conf]# vim nginx.conf

       ## 增加upsteam模块,它包含负载均衡和代理的功能

 Linux运维——nginx负载均衡及网页地址重定向_第2张图片  ## 访问的时候从/下的westos开始访问
[root@vm1 conf]# nginx -t
[root@vm1 conf]# nginx -s reload

2.真实服务器

[root@vm2: ~]# yum install httpd -y
[root@vm3: ~]# yum install httpd -y
[root@vm2: ~]# cd /var/www/html/
[root@vm2: html]# vim index.html
[root@vm2: html]# cat index.html
vm2
[root@vm2: html]# /etc/init.d/httpd start
[root@vm3 ~]# cd /var/www/html/
[root@vm3 html]# vim index.html
[root@vm3 html]# cat index.html
vm2
[root@vm3 html]# /etc/init.d/httpd start

3.检测:

[root@foundation38 images]# vim /etc/hosts
[root@foundation38 images]# curl www.westos.org
vm2
[root@foundation38 images]# curl www.westos.org
vm3

三、域名的虚拟主机

[root@vm1 conf]# vim nginx.con

Linux运维——nginx负载均衡及网页地址重定向_第3张图片
[root@vm1 conf]# cd ../html/
[root@vm1 html]# pwd
/usr/local/nginx/html
[root@vm1 html]# mkdir www
[root@vm1 html]# mkdir bbs
[root@vm1 html]# mkdir blog
[root@vm1 html]# cd www
[root@vm1 www]# vim index.html
[root@vm1 www]# cd ../bbs
[root@vm1 bbs]# vim index.html
[root@vm1 bbs]# cd ../blog/
[root@vm1 blog]# vim index.html
[root@vm1 blog]# cd ..
[root@vm1 html]# cd ..
[root@vm1 nginx]# cd conf/
[root@vm1 conf]# nginx -t
[root@vm1 conf]# nginx -s reload

检测:
[root@foundation38 images]# vim /etc/hosts


[root@foundation38 images]# curl blog.westos.org
blog.westos.org
[root@foundation38 images]# curl bbs.westos.org
bbs.westos.org
[root@foundation38 images]# curl www.westos.org
www.westos.org


四、查看nginx状态信息

[root@vm1 conf]# nginx -V                 ##看是否安装了--with-http_stub_status_modul模块

[root@vm1 conf]# mkdir extra
[root@vm1 conf]# cd extra/
[root@vm1 extra]# vim status.conf        ## 打开状态访问控制模块;关闭日志模块

Linux运维——nginx负载均衡及网页地址重定向_第4张图片    
[root@vm1 extra]# cd ..
[root@vm1 conf]# vim nginx.conf       ## 让系统去该路径下寻找控制信息的配置模块

Linux运维——nginx负载均衡及网页地址重定向_第5张图片    ## 一个页面可以有多个域名
[root@vm1 conf]# nginx -t
[root@vm1 conf]# nginx -s reload

检测:
[root@foundation38 images]# vim /etc/hosts
[root@foundation38 images]# curl www.westos.org
www.westos.org
[root@foundation38 images]# curl westos.org
www.westos.org
[root@foundation38 images]# curl status.westos.org
Active connections: 1
server accepts handled requests
 31 31 33   
Reading: 0 Writing: 1 Waiting: 0

注:第一个数字31表示nginx从启动到现在共处理了多少个连接
        第二个数字31表示nginx从启动到现在共创建了多少次握手
        第一个数字31表示nginx从启动到现在共处理了多少个请求
        请求丢失数=握手数-连接数
       一个连接可以用多个请求(读/写..)

五、通过正则匹配,访问不同的url

url:统一资源定位符,用于定位互联网上资源,俗称网址
[root@vm1 conf]# vim nginx.conf

Linux运维——nginx负载均衡及网页地址重定向_第6张图片
[root@vm1 conf]# nginx -t
[root@vm1 conf]# nginx -s reload
检测:
[root@foundation38 images]# curl -s -o /dev/null -I -w %'{http_code}\n' http://www.westos.org/index.html   ##-s静默;-o返回到指定文件;-I只显示文档信息;-w构建一个url地址
401                                   ###默认匹配。其他都没匹配上就匹配到401
[root@foundation38 images]# curl -s -o /dev/null -I -w %'{http_code}\n' http://www.westos.org
402
[root@foundation38 images]# curl -s -o /dev/null -I -w %'{http_code}\n' http://www.westos.org/     ##有“=”精确匹配,优先级最高,所以把/优先匹配给了402
402  
[root@foundation38 images]# curl -s -o /dev/null -I -w %'{http_code}\n' http://www.westos.org/documents/document.html
403
[root@foundation38 images]# curl -s -o /dev/null -I -w %'{http_code}\n' http://www.westos.org/images/1.gif     ### ^~优先匹配路径,只要以/images开头,就return404
404
[root@foundation38 images]# curl -s -o /dev/null -I -w %'{http_code}\n' http://www.westos.org/documents/1.gif   ##特殊匹配优先级更高
500

优先级: “=” > 有特殊字符的特殊匹配 > 一般匹配

六、nginx的地址重写

[root@vm1 conf]# vim nginx.conf

Linux运维——nginx负载均衡及网页地址重定向_第7张图片

rewrite(重写)为固定关键字,表示开始进行rewrite匹配规则。

          regex(正则表达式)部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址;" ^ " 表示匹配输入字符串的起始位置,  " . "表示匹配除“\n”之外的任何单个字符,   " * "表示匹配前面的字符零次或多次。

          replacement(替换)部分是http://suzhao.room.com/$1, $1是取自regex部分()里的内容。匹配成功后跳转到的URL。

          flag(标记)部分的 permanent表示永久301重定向标记,即永久跳转到新的 http://www.czlun.com/$1 地址上

[root@vm1 conf]# nginx -t
[root@vm1 conf]# nginx -s reload
检测:访问westos.org


七、五种线程

阻塞 (等待):磁盘到内存,内核到用户。全过程该线程不可以做其他

非阻塞(盲等待):一个线程不断发出请求问好了吗

select(复用型IO):select先不断接收请求,后一个一个处理

nginx事件驱动机制:接收请求、给号、断线程、回调函数恢复线程。水平触发:只执行一次回调(1次叫号);边缘触发:多次

aio(全异步):得到请求、断开线程、直接磁盘-->内核-->用户。nginx可以用,但要编译源码

你可能感兴趣的:(Linux运维——nginx负载均衡及网页地址重定向)