一、Nginx概述
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器。处理高并发能力是十分强大的,能经受高负载的考验。nginx课堂提供的服务:web 服务、负载均衡 (反向代理)、web cache(web 缓存)
Nginx的优点:
(1)高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数
(2)内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
(3)配置文件非常简单:风格跟程序一样通俗易懂
(4)成本低廉:nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
(5)支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
(6)内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
(7)节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头
(8)稳定性高:用于反向代理,宕机的概率微乎其微
(9)模块化设计:模块可以动态编译
(10)外围支持好:文档全,二次开发和模块较多
(11)支持热部署:可以不停机重载配置文件
(12)支持事件驱动、AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化
Nginx反向代理:
(1)多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
(2)反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
(3)作用:保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网;负载均衡,通过反向代理服务器来优化网站的负载。
二、Nginx安装与启动
1. 安装 命令启动
第一步 从Nginx官网安装Nginx压缩包:点击下载,
下载完成后,解压;我是将下载的压缩包存放在/root/Download/目录下。
[root@servera ~]# cd /root/Download/
[root@servera Download]# tar zxf nginx-1.18.0.tar.gz
[root@servera Download]# ls
nginx-1.18.0 nginx-1.18.0.tar.gz
第二步 解决Nginx依赖性,安装依赖包;
yum install -y gcc //源码的编译依赖gcc环境
yum install -y pcre-devel //Nginx的模块会使用到PCRE语法。需要安装pcre库
yum install -y openssl-devel //nginx不仅支持 http协议,还支持 https,需要安装 OpenSSL 库
第三步 进入解压文件目录,开始编译安装
使用./configure --help查看各个模块的使用情况
[root@servera Download]# cd nginx-1.18.0/
[root@servera nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
//--prefix指定编译安装路径(nginx真实安装路径)--with-http_ssl_modules安装需要的模块,
//编译成功后,会生成一个Makefile文件,记录了编译时的参数
[root@servera nginx-1.18.0]# make //将源码编译为二进制程序,注意执行时要和Makefile文件在同一目录下
[root@servera nginx-1.18.0]# make install //将二进制文件copy到编译的安装路径
第四步 检测语法 启动nginx
安装完成后,会自动生成目录/usr/local/nginx,启动时需要进入目录/usr/local/nginx/sbin
[root@servera sbin]# ./nginx //启动nginx
////////////常用命令////////////////
[root@servera sbin]# ./nginx -v //查看nginx版本
[root@servera sbin]# ./nginx -t //检测语法
[root@servera sbin]# ./nginx -s stop //停止nginx
2. Nginx启动脚本
nginx启动脚本就是为了方便对nginx服务的启动,关闭,状态查询的一个脚本文件。参考官方文档编写:官方示例的脚本文件
系统的服务都是默认在 /usr/lib/systemd/system 目录下的,是系统默认的存放路径。在此目录在编辑脚本文件
需要注意的是:
(1)在使用脚本启动时,要确保此时的nginx没有使用命令启动。如果之前启动过,使用命令/usr/local/nginx/sbin/nginx -s stop 停止nginx。
(2)编辑完以后,要给脚本执行权限,使用命令systemctl daemon-reload刷新服务。
[root@servera sbin]# cd /usr/lib/systemd/system/
[root@servera system]# vim nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking //以下根据自己实际安装的nginx路径修改
PIDFile=/usr/local/nginx/logs/nginx.pid //pid存放路径
ExecStartPre=/usr/local/nginx/sbin/nginx -t //检测语法
ExecStart=/usr/local/nginx/sbin/nginx //启动
ExecReload=/usr/local/nginx/sbin/nginx -s reload //重载
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@servera system]# chmod +x nginx.service //给脚本执行权限
[root@servera system]# systemctl daemon-reload //刷新
[root@servera system]# systemctl start nginx.service //使用命令启动
[root@servera system]# systemctl status nginx.service //查看状态
三、nginx实现负载均衡
实验环境:RHEL7
主机名 | workstation | servera | server2 | server3 |
---|---|---|---|---|
IP | 192.168.1.104 | 192.168.1.136 | 192.168.1.102 | 192.168.1.103 |
职能 | 外部客户端 | nginx负载均衡器 | 后端服务器 | 后端服务器 |
说明:为了方便测试,已经修改后端服务器的默认发布页面,server2对应的是vm2,server3服务器对应的是vm3
实验配置:
我们可以在nginx的主配置文件中配置负载均衡服务器。主配置文件:/usr/local/nginx/conf/nginx.conf(与自己安装的路径有关)
(1)新建一个用户 指定用户主目录,在配置文件中使用此用户启动nginx进程:useradd -M -d /usr/local/nginx -s /sbin/nologin nginx
(2)在系统层面修改每一个worker进程能并发处理(发起)的最大连接数为65536:vim /etc/security/limits.conf
[root@servera ~]# vim /etc/security/limits.conf
nginx - nofile 65535
nginx作为反向代理服务器,计算公式最大连接数 = worker_processes * worker_connections/2,所以这里客户端最大连接数是65536
(3)编辑配置文件:
[root@servera ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx; //设定nginx用户启动nginx进程
worker_processes auto; //指定启动多少进程来处理请求,一般情况下设置成CPU的核数,auto表示自动;lscpu查看CPU
events {
worker_connections 65535; //每一个worker进程能并发处理(发起)的最大连接数
}
http {
upstream westos { //upstream 定义负载节点
server 192.168.1.102; //后端Apache服务器.ps:
server 192.168.1.103;
}
server {
listen 80; //监听80端口
server_name www.westos.org; //server_name指定服务器,需要在客户端做本地解析
location / {
proxy_pass http://westos; //proxy_pass一般用于反向代理,模块可以将请求转发到另一台服务器
}
}
}
[root@servera ~]# systemctl reload nginx.service //每次修改配置文件后,都需要reload.
可以实现的不同功能测试
在上面基础负载均衡器的配置上,通过添加配置文件的字段,可以实现其他的功能:
(1)设定后端服务器的权重。weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。weight 默认为1.weight越大,负载的权重就越大
(2)添加ip_hash算法。ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
(3)测试健康检测能力;
(4)通过域名访问,在外部客户端要做nginx负载均衡器的本地解析;
(5)创建多个均衡负载器,并且使用不同的算法。
////////////////创建多个负载均衡器要添加的配置文件/////////////
http {
upstream westos {
server 192.168.1.102; 默认rr轮询算法
server 192.168.1.103;
}
upstream redhat {
ip_hash; //设定ip_hash算法
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
server_name www1.westos.org;
location / {
proxy_pass http://westos;
}
}
server {
listen 80;
server_name www2.westos.org;
location / {
proxy_pass http://redhat;
}
}
}
四、nginx配置虚拟主机
http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。在提供mail服务的代理时,也可以建立若干server。每个server通过监听地址或端口来区分。
配置步骤:
(1)在配置文件中,复制一段完整的server标签段,到结尾。注意:要放在http的结束大括号前,也就是server标签段放入http标签。添加更改server_name 及对应网页的root根目录。这里只显示部分要添加的字段,并非完整的配置文件。
[root@servera ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www1.westos.org;
location / {
root /www1; //此目录需要手动建立
index index.html; //index 表示发布页面
}
}
server {
listen 80;
server_name www2.westos.org;
location / {
root /www2;
index index.html;
}
}
[root@servera ~]# systemctl reload nginx.service
(2)创建server_name 对应网页的根目录,并且建立测试文件,如果没有index首页会出现403错误。
[root@servera ~]# mkdir /www1
[root@servera ~]# vim /www1/index.html
www1
[root@servera ~]# mkdir /www2
[root@servera ~]# vim /www2/index.html
www2
(3)在外部客户端做server_name 主机的host 解析:
[root@workstation ~]# vim /etc/hosts
192.168.1.136 www1.westos.org www2.westos.org
访问验证: