Nginx学习笔记一:相关概念

Nginx学习笔记一

Nginx是一个高性能的HTTP和反向代理web服务器,特点是内存占用少,并发能力强,专为性能优化而开发,支持高达50000个并发连接数。

一、Nginx相关概念

反向代理、负载均衡、动静分离

1、反向代理

正向代理
在客户端(服务器)配置代理服务器,通过代理服务器访问。
反向代理
客户端不需要进行配置,客户端发送请求给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。此时目标服务器和反向代理服务器对外就是一个服务器,暴露的是代理服务器的ip,隐藏了真实服务器的ip。

2、负载均衡

单个服务器解决不了,就增加服务器的数量,然后将请求分发到各个服务器上,将负载分发到不同的服务器上,就是负载均衡。

3、动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,降低原来单个服务器的压力

二、Nginx安装

1、安装相关依赖

# 方法一:在线一键安装(有网)
yum -y install gcc gcc-c++ zlib zlib-devel pcre-devel openssl openssl-devel

# 方法二:离线安装
# 先下载包:从网上下载方法一的依赖包,或者在有网的机子上执行以下命令下载(下载目录/home/rpm)
yumdownloader gcc gcc-c++ zlib zlib-devel pcre-devel openssl openssl-devel --resolve --destdir=/home/rpm
# 然后再拷贝到没有网的机器上,执行安装命令
rpm -ivh /home/rpm/*.rpm --force --nodeps
--force 即使覆盖属于其它包的文件也强迫安装 
--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。 

2、下载nginx

# 官网下载地址 nginx.org/download
# wget下载 yum -y install wget
wget nginx.org/download/nginx-1.23.3.tar.gz
# 解压
tar -zxvf nginx-1.23.3.tar.gz
# 语法高亮显示nginx配置的vim
cp -r /root/nginx-1.23.3/contrib/vim/* /usr/share/vim/vimfiles/
# 编译安装
./configure
make && make install
# 安装完nginx所在的目录
/usr/local/nginx
# 启动
cd /usr/local/nginx/sbin
./nginx
# 开启防火墙端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 关防火墙
systemctl stop firewalld
systemctl disable firewalld
# 浏览器访问,nginx默认端口80

安装成系统服务

vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target             

重新加载系统服务
systemctl daemon-reload

开机启动
systemctl enable nginx

免编译安装
将以上编译安装完的nginx目录打包后即可解压使用
cd /usr/local/
tar -zcvf nginx-1.23.3免编译.tar.gz nginx

conf 存放配置文件
html 存放静态页面
logs 存放日志
 access.log  访问日志
 error.log  报错日志
 nginx.pid  nginx进程
sbin nginx可执行文件

三、常用命令

# 查找nginx
whereis nginx
# 设置软连接
ln -s /usr/local/nginx /usr/bin/nginx
# 查看nginx版本
nginx -v
# 启动nginx
nginx start
# 停止nginx
nginx -s stop
# 重加载配置文件
nginx -s reload

四、配置文件

cd /usr/local/nginx/conf
vim nginx.conf

第一部分 全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的 :

worker processes 1;  # 值越大,支持的并发处理量也越多,但是这是 Nginx 服务器并发处理服务的关键配置会受到硬件、软件等设备的制约。

第二部分 events块

events块涉及的指令主要影响nginx服务器与用户的网络连接,

worker_connections  1024; # 单个进程允许和外部建立的最大连接数

第三部分 http块

代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
需要注意的是:http 块包括 http全局块server块

1、http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义连接超时时间、单链接请求数上限等

2、server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。

全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

五、示例一:反向代理1

1、实现效果

浏览器访问www.123.com,跳转到Linux系统的tomcat主页

2、准备工作

启动tomcat,开放相关端口或关闭防火墙,能在 windows 系统中通过浏览器访问 tomcat 服务器。

3、具体配置

第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
C:\Windows\System32\drivers\etc\hosts
在文末添加行
192.168.17.129 www.123.com

第二步 在 nginx 进行请求转发的配置(反向代理配置)

server {
	listen 80;
	server_name 192.168.17.129;
	location / {
		proxy_pass http://127.0.0.1:8080;
	}
}
nginx -s reload

最终可以通过www.123.com访问tomcat主页

六、示例二:反向代理2

1、实现效果

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http://192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081

2、准备工作

(1)准备两个 tomcat 服务器,一个 8080 端口,一个 8081 端口
(2)创建文件夹和测试页面

3、具体配置

(1)修改 nginx 配置文件

server {
	listen 80;
	server_name 192.168.17.129;
	location ~ /edu/ {
		proxy_pass http://127.0.0.1:8080;
	}
	location ~ /vod/ {
		proxy_pass http://127.0.0.1:8081;
	}
}

七、示例三:负载均衡

1、实现效果

(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080 和 8081 端口中

2、准备工作

(1)准备两台 tomcat 服务器,一台 8080,一台 8081
(2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建页面 a.html,用于测试

修改 nginx 配置文件

upstream server {
	server 192.168.17.100:8080 weight=2;		
	server 192.168.17.101:8080 weight=4;
}
server {
	listen 80;
	server_name 192.168.17.129;
	location / {
		proxy_pass http://server;
	}
}

负载均衡策略

尚硅谷Nginx教程-负载均衡策略

第一种 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。逐一转发,适用于无状态请求。

第二种 weight

weight 代表权重默认为 1,权重越高被分配的客户端越多。用于后端服务器性能不均。

第三种 ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。

第四种 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

第五种 least_conn

最少连接访问

第六种 url_hash(第三方)

根据用户访问的url定向转发请求

八、示例四:高可用

两台nginx服务器,都安装keepalived服务,

yum -y install keepalived

在/etc/中生成keepalived文件,修改conf配置文件

systemctl start keepalived

keepalived启动后,使用ip addr命令在对应网卡里可以看到虚拟ip

keepalived.conf如下:

! Configuration File for keepalived

global_defs {
   script_user root
   enable_script_security
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id 192.168.192.248    #(重点参数)局域网keppalived主机身份标识信息(每台唯一)
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
    script "/etc/keepalived/chk_nginx.sh"
    interval 3  # 脚本执行的间隔, 需大于脚本中的sleep时间
    weight 2
}

vrrp_instance VI_1 {
    state MASTER        # 备份服务器上改成BACKUP
    interface enp0s8    # 网卡
    virtual_router_id 51        # 主备机这相这个id必须相同
    priority 100        # 优先级,主机比备机大
    advert_int 1        # 心跳检测 1s
    authentication {    # 主备主机之间的认证表示信息
        auth_type PASS  #采用明文认证机制
        auth_pass 1111  #编写明文密码`
    }
    virtual_ipaddress {
        192.168.192.16  # 虚拟地址
    }
    track_script {
        chk_http_port       #调用执行脚本
    }
}

nginx启动检查脚本:

# 当nginx进程不存在时,会启动nginx;再次检查nginx进程,如果不存在,就停止keepalived服务,然后NGINX_BACKUP主机会自动接替NGINX_MASTER的工作。
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
  echo 'nginx进程不存在,重启nginx'
  systemctl start nginx
  sleep 2
  if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
    echo 'nginx已启动,关闭keepalived'
    kill keepalived
  fi
fi

关闭nginx后,keepalived执行启动脚本但未成功启动nginx,查看日志

tail -f /var/log/message

报错一:chk_nginx.sh exited due to signal 15
keepalived.conf里vrrp_script 里的 interval 脚本执行的间隔, 需大于脚本中的sleep时间
报错二:chk_nginx.sh exited due to signal 1
关闭selinux

  • 检查,selinux3个状态enforcing (执行中)、permissive (不执行但产生警告)、disabled(关闭)。
方式一   getenforce
方式二   /usr/sbin/sestatus -v
  • 临时关闭,重启失效
setenforce 0 
  • 永久关闭
 vi /etc/selinux/config
 把SELINUX=enforce   改成disabled,reboot重启生效

其他

nginx启动后会有一个master主进程,和n个worker子进程。master来协调紫禁城,它不处理业务;worker根据nginx.conf配置文件解析用户的请求;reload会kill掉worker子进程,然后创建新的worker去根据配置文件解析请求来读取文件。

需要设置多少个 worker
Nginx 同redis 类似都采用了 io,多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu的性能发挥到极致。所以 worker 数和服务器的 cpu数相等是最为适宜的。设少了会浪费 u,设多了会造成 cpu 频繁切换上下文带来的损耗。

#设置 worker 数量。
worker processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker cpuaffinity 0001 0010 0100 1000
#work 绑定 cpu (4 work绑定 8cpu 中的 4个)。
worker cpu affinity 0000001 00000010 00000100 00001000

普通的静态访问最大并发数是:worker_connections * worker_processes / 2 .
而如是HTTP 作为反向代理来说,最大并发数量应该是worker_connections * worker_processes / 4.

其他nginx版本
openresty.org
tengine.taobao.org

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值