一、nginx基本概念
(1)nginx是什么,做什么事情
Nginx是一个高性能的HTTP和反向代理服务器
特点:1.占用内存少,并发能力强,有报告声明最高达5万个连接数
2.具有很高的稳定性,其他的HTTP服务器遇到访问的峰值时,可能会导致服务器物理内存耗尽频繁切换,失去响应,只能重启服务器,但是Nginx采用了分阶段资源分配技术,使得它的CPU和内存占用率非常低,所以类似DOS这样的攻击对nginx来说基本上毫无用处。
3.无缓存的反向代理加速,简单的负载均衡和容错
4.模块化的架构
5.支持热部署,运行稳定
(2)反向代理
客户端访问的不是真实的服务器,而是到反向代理服务器,再由反向代理服务器转发到真正的服务器
(3)负载均衡
将请求通过一些规则转发到不同的服务器上
(4)动静分离
为了加快网站的解析速度,将一些静态资源部署到nginx上,来降低原来的服务器的压力
二、nginx安装和命令
(1)在linux系统中安装nginx
方式一:下载tar包
下载地址:http://nginx.org/en/download.html
1.下载好后,将tar包放到opt目录下
2.解压
tar -zxvf nginx-1.20.2.tar.gz
3.安装前置依赖,gcc ,openssl
yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
4.进入解压后的目录,编译配置
./configure
注意:这里可能会出错
解决办法:
执行后再执行 ./configure
yum -y install gcc gcc-c++ autoconf automake make
5.执行
make & make install
6.启动
cd /usr/local/sbin
./nginx
关闭 ./nginx -s stop
重启 ./nginx -s reload
7.测试
在网页输入ip 回车可以看到
注意:可能有的人不能访问是因为没有关闭防火墙或者开放相应端口
解决办法:
firewall-cmd --add-service=http -permanent
sudo firewall-cmd --add-port=80/tcp --permanent
firewall-cmd-reload
三、配置文件详解
位置: /usr/local/nginx/conf/nginx.conf
(1)nginx配置文件由三部分组成
第一部分 全局块
从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令,可以
配置运行Nginx服务器的用户,允许生成的worker proess数,进程PID存放路径,日志存放路径等
例如: worker_processes 1;
这是Nginx服务器并发处理服务的关键配置,值越大,可以支持的并发处理量也越多,但会收到应急、软件等设备的制约
第二部分 events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接.
例如: worker_connections 1024; 支持最大的连接数
第三部分 http块
这算是Nginx服务器配置中最频繁的一部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这
http块又分为http全局块、server块
四、nginx配置实例 反向代理
这里写个例子用于学习,请先安装jdk环境和 tomcat
实例1:
这个例子是 我们访问 www.123.com 通过nginx 访问 tomcat页面
1.本地host文件进行域名和ip对应关系的配置
C:\Windows\System32\drivers\etc
测试一下:可以正常访问
2. 在nginx的nginx.conf中进行反向代理的配置
增加内容:
3.测试访问
www.123.com
www.123.com:81
均转发到了tomcat页面
(www.123.com 等价于 192.168.188.112)
实例2
根据不同的路径访问到相应的地址
- = :严格匹配
- ~:用于表示url包含正则表达式,并且区分大小写
- ~*:用于表示url包含正则表达式,并且不区分大小写
访问 www.123.com:9001/demo
五、nginx配置实例 负载均衡
(1) 基础配置
作用:通过规则转发到不同服务器
写法:
1.
upstreat 起个名称{
实际服务器地址
}
2.
location中
proxy_pass http://上面的名字
例:
upstreat myserver {
server 192.168.188.112:8080;
server 192.168.188.112:8081;
}
server{
listen 80;
server_name 192.168.188.112;
location /{
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
这样外界访问 192.168.188.112:80 就会再负载均衡到具体的IP地址
(2) 策略
1.轮询(默认)
2.weight (权重)
weight代表权重,默认为1,权重越高被分配的客户端越多
例:
upstreat myserver {
server 192.168.188.112:8080 weight=5;
server 192.168.188.112:8081 weight =10;
}
3.ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstreat myserver {
ip_hash
server 192.168.188.112:8080;
server 192.168.188.112:8081;
}
4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
例:
upstreat myserver {
server 192.168.188.112:8080;
server 192.168.188.112:8081;
fair
}
六 、nginx配置实例 动静分离
概念:静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。
例:将静态资源放到 data目录中
server{
listen 80;
server_name 192.168.188.112;
location /www/{
root /data/;
index index.html index.htm;
}
}
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应。root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root实例:
location ^~ /t/ {
root /www/root/html/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例:
location ^~ /t/ {
alias /www/root/html/new_t/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
注意:
- 使用alias时,目录名后面一定要加"/"。
- alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
- alias只能位于location块中。(root可以不放在location中)
七、nginx配置高可用集群
配置高可用的准备工作
(1)准备两台服务器,并安装nginx
我这里
第一台IP:192.168.188.112
第二台IP:192.168.188.110
(2)在两台服务器安装Keepalived
使用yum命令进行安装
yum install keepalived -y
检查是否安装成功
rpm -q -a keepalived
安装之后会在 /etc 中生成一个文件夹 keepalived
(3)主从配置
在第一台服务器上192.168.188.112
(1)准备一个脚本nginx_check.sh,放到/usr/local/src
内容主要是检测主服务器是否启动正常,如果不是就替换到从服务器的语句
脚本内容:
#!/bin/bash
A='ps -C nginx --no-header |wc -l'
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ 'ps -C nginx --no-header |wc -l' -eq 0 ];then
killall keepalived
fi
fi
(2)修改keepalived.conf内容
将下面内容全部替换
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.188.112 #这个是主服务器的IP
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #指定脚本位置
interval 2 #(检测脚本的时间间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将MASTER 改为 BACKUP
interface ens33 # 网卡
virtual_router_id 51 #主从机的virtual_router_id 必须相同
priority 100 #主从机取不同的优先级,主机值较大,备份机较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.50 //VRRP H 虚拟地址
}
}
在第二台服务器上192.168.188.110
(1)同上面,准备一个脚本nginx_check.sh,放到/usr/local/src,内容与上面的一致
(2)修改keepalived.conf内容
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.188.110 #这个是从服务器的IP
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #指定脚本位置
interval 2 #(检测脚本的时间间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP# 备份服务器上将MASTER 改为 BACKUP
interface ens33 # 网卡
virtual_router_id 51 #主从机的virtual_router_id 必须相同
priority 100 #主从机取不同的优先级,主机值较大,备份机较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.50 //VRRP H 虚拟地址
}
}
(3)重启nginx 启动keepalived
cd /usr/local/nginx/sbin
./nginx -s stop
./nginx
systemctl start keepalived.service
(4)终极测试
在浏览器访问虚拟IP
192.168.188.50
可以发现正常访问
将第一台服务器停了
./nginx -s stop
systemctl stop keepalived.service
然后再次访问,发现还可以正常访问
到这主从配置就结束了
八、nginx原理
master-worker机制
好处:
1.利于nginx做热部署操作。比如worker1争抢到了去进行处理,这时候修改了配置进行热部署,worker2,worker3进行更新并继续争抢新的信号,而worker会先做完原来的操作后才会去更新然后再继续去争抢新的信号
2.每个worker都是独立的进程,这样就不需要加锁,省去了锁带来的开销。并且他们是独立的进程,互不影响,当一个进程退出后,其他进程还在工作,服务不会中断
worker数量的设置
worker数量和服务器CPU数量相等最为适宜