nginx可以作为:web服务器、反向代理、负载均衡,后面两个功能由upstream模块实现。
ngixn功能更强大,基本可以代替apache服务
ngixn的页面重写功能非常强大。
ngixn工作在应用层。
ngixn可通过正则表达式匹配而访问 不同的URL。
ngixn的抗并发能力机强,一次可抗住10w个并发。
一、搭建Nginx服务的基本环境
实验环境: server1(1号): Nginx服务器 IP:172.25.254.1
server2(2号): web1服务器 IP: 172.25.254.2
server3(3号): web2服务器 IP:172.25.254.3
foundation13(client): 测试机 IP:172.25.254.250
Nginx服务源码包的编译及安装:
1. 下载Nginx服务的软件包,博主这里下载的是压缩包,所以将其解压缩:
2. 注释掉 gcc文件的配置信息:CFLAGS="$CFLAGS -g",目的是不安装在本次实验中多余的软件包。
3. 编译源码包:
首先切换到解压后的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信息状态访问控制的模块
出现如下图所示错误(需要解决依赖性):
下载安装依赖软件:yum install pcre-devel -y
继续编译,出现如下错误,缺少软件环境openssL:
下载安装openssl这个软件包:yum install openssl-devel -y
再编译,终于编译成功:
4. 现在进行最后一步:安装 make && make install
上图表示安装完成。
二、nginx负载均衡的实现
1.开始修改配置文件:
首先注意配置文件的第二行,如下图:
因为nginx在运行的过程中需要一个child进程起到在cup和内存之间交互信息的作用,而该进程需要以一个nginx用户的身份,所以需要创建该用户:
添加用户完成后,对第二行做如下配置,表示使nginx进程的用户和用户组都为nginx:
因为一般服务器有好多个cpu,而正常情况下,进程会在不同的cpu上进行相关运算。比如,当一个进程正在运行,这时又一个优先级较高的进程要先执行,这时候就会断掉该进程,并将该进程的相关程序的内存地址压入堆栈,从而保护现场,当上一个紧急进程执行完后,要出栈恢复现场,这时该进程就会在数个cpu中进行选择,这样在不同cpu间来回选择,总的来说是浪费资源和时间的。所以我们一般会配置使相应的进程和cpu绑定,这样就会解决这个问题。
下面我们来配置使nginx进程和相应cpu绑定,如下图这种方式就是让nginx服务自动选择cpu与child进程绑定:
下图是手动绑定的配置方法:
接着配置nginx的事件驱动模块:
进行第一步的测试:
先检查有没有语法错误,然后开启服务:
在浏览器访问nginx服务器(IP:172.25.254.1),如下图到达nginx的测试页:
测试完成,继续配置,现在添加nginx服务的upstream模块(注意:下图25行少写一个大括号):
为了时上面的配置执行,还需配置一个函数指向该实例,如下图:
配置完成,保存配置内容并退出。
为了执行方便,对nginx的执行脚本做一个硬连接:ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
然后保存配置,载入配置:
下面开启2号主机和3号主机的web服务:
在客户端测试是否能实现负载均衡:
先配置 对1号主机(IP:172.25.254.1)对www.room.com的解析:
如下图所示,实现了对后端web服务器的负载均衡:
三、Nginx服务器web虚拟机的搭建:
1. 配置nginx.conf文件,下图为三个nginxweb虚拟机的配置信息:
2. 根据每个虚拟机的配置信息,分别创建相应的发布页:
3. 检查有没有语法错误,然后载入配置信息:
4. 测试,在client主机上测试,结果如下:
四、 nginx的动态访问控制信息的配置:
我们在刚开始编译ngixn的时候,同时下载了--with-http_stub_status_module, 这个模块的作用就是 控制以及监督访问的作用。
1. 首先配置主配置文件:
2. 在上步所要求的路经下建立目录和相关文件:
3. 配置上步建立的文件:
4. 在client主机上做status.room.com的解析:
5. 检测并启动nginx:
6. 测试结果:
五、 nginx 的location正则匹配:
1. 在nginx.conf中做如下的配置信息:
2. 在客户端用命令测试: curl -s -o /dev/null -I -w %'{http_code}\n' http://www.room.com/
-s ## 静音模式,不输出任何东西
-o ## 把输出写到该文件中
-I ## 只显示文档信息
-w ## 用于在一次完整且成功的操作后 输出指定格式的内容到标准输出。
下图说明: URL完全等于www.room.com时,采用的匹配规则是“location = /”,而当所有location规则都匹配不上URL时,使用默认匹配:
下图说明正则匹配是优先普通匹配的:
当匹配涉及到两个正则规则时,匹配谁根据的是两个location规则在nginx.conf文件种的先后位置,谁在前先匹配谁:
下图说明匹配URL时,是从左至右按最大长度原则(谁匹配度越高,就匹配谁)匹配的。
下图说明,客户匹配URL时,是从最左边第一个目录或文件名开始的(~*是特殊情况,是从最后一个文件或者目录开始匹配的。)
六、nginx的地址重写:
1. 配置nginx.conf文件,当访问ptm.room.com的时候重定向到suzhao.room.com:
rewrite ^/(.*) http://suzhao.room.com/$1 permanent;
rewrite(重写)为固定关键字,表示开始进行rewrite匹配规则。
regex(正则表达式)部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址;" ^ " 表示匹配输入字符串的起始位置, " . "表示匹配除“\n”之外的任何单个字符, " * "表示匹配前面的字符零次或多次。
replacement(替换)部分是http://suzhao.room.com/$1, $1是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag(标记)部分的 permanent表示永久301重定向标记,即永久跳转到新的 http://www.czlun.com/$1 地址上。
2. 测试:
在client主机的浏览器输入ptm.room.com:
结果发现跳转到了suzhao.room.com de主页面: