nginx
https://www.bilibili.com/video/BV1zJ411w7SV?p=1
1、nginx是一个HTTP和反向代理服务器,性能高,能承受五万个并发连接数
2、功能:处理静态文件、反向代理、负载均衡、动静分离、高可用
3、正向代理(用户可以感知):在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
4、反向代理(用户无感知):客户端(浏览器)将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址
5、负载均衡
请求连接过多,单台服务器解决不了,增加服务器数量,将请求分发到各个服务器上
6、动静分离
为加快网站的解析速度,将动态页面和静态页面由不同服务器来解析,加快解析速度,降低原来单个服务器压力
客户端————————nginx————————服务器tomcat(部署动态资源jsp、servlet)
—————————静态资源服务器(放静态资源)
7、nginx安装
相关依赖:pcre、openssl、zlib
(1)安装pcre依赖
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
把安装压缩文件放到/usr/src目录下
解压压缩文件 tar -zxvf 压缩文件
进入解压之后目录,执行./configure(编译前检查操作)
make && make install 编译并且安装
pcre-config –version 查看版本号
(2)安装openssl、zlib
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
(3)安装nginx
将安装包放在/usr/src下
解压压缩包 tar -zxvf
进入解压后的文件,编译前检查操作 ./configure
编译并且安装 make && make install
8、nginx启动
cd /usr/local/nginx/sbin 里面有nginx启动脚本
./nginx 启动nginx
ps -ef | grep nginx 查看进程
9、nginx配置查看
vim /usr/local/nginx/conf/nginx.conf
server{
listen 80; //nginx监听端口是80,浏览器通过IP:端口可以访问到nginx
}
10、linux防火墙默认拦截80端口,需要放通
查看开放的端口号
firewall-cmd –list-all
设置开放的端口号
firewall-cmd –add-service=http -permanent
sudo firewall-cmd –add-port=80/tcp –permanent
重启防火墙
firewall-cmd –reload
11、nginx操作常用命令
使用nginx操作命令前提条件:必须进入nginx的目录
cd /usr/local/nginx/sbin
查看nginx的版本号
./nginx -v
关闭nginx
./nginx -s stop
启动nginx
./nginx
查看nginx进程
ps -ef | grep nginx
重新加载nginx(一般是修改配置文件后重新加载)
./nginx -s reload
12、nginx配置文件
配置文件位置
/usr/local/nginx/conf/nginx.conf
配置文件组成
全局块、events块、http块
全局块:配置文件开始到events块之间,用于设置影响nginx整体运行的配置指令
worker_processes 1; //值越大,可以支持的并发处理量也就越多
events块:用于设置影响nginx服务器与用户的网络连接
worker_connections 1024; //支持的最大连接数
http块:nginx服务器配置中最频繁的部分
http全局块
server块:
全局server块
location块
13、nginx反向代理配置实例一
实现效果:
打开浏览器,输入地址www.123.cm,跳转到linux系统tomcat主页面中
准备工作:
(1)、再linux中安装tomcat,使用默认端口8080
tomcat安装文件放到linux中,解压
进入tomcat的bin目录中,./startup.sh启动tomcat服务器
(2)、对外开放访问的端口(nginx80/真实服务器端口都要放通)
firewall-cmd –add-port=8080/tcp –permanent
firewall-cmd –reload
firewall-cmd –list-all
(3)、在windows系统中通过浏览器访问tomcat服务器
访问工程分析:
windows浏览器输入域名后,解析到nginx反向代理服务器(IP:80端口),再由nginx跳转到tomcat服务器(IP:8080端口)
具体配置:
(1)在windows系统的host文件进行域名和ip对应关系的配置
c:\windows\system32\drivers\etc\HOSTS
10.128.17.91 www.switch.com
(2)在nginx进行请求转发的配置(反向代理配置)
server {
listen 80;
server_name 10.128.17.91;(nginx服务器地址)
location / {
root html;
proxy_pass http://127.0.0.1:8000;(转发到真正服务器)
index index.html index.htm;
}
}
14、nginx反向代理配置实例二
实现效果:
nginx监听端口9001,使用nginx反向代理,根据访问的路径跳转到不同的端口服务中
访问http://10.128.17.91:9001/edu/ 跳转到127.0.01:8080
访问http://10.128.17.91:9001/vod/ 跳转到127.0.01:8081
准备工作:
(1)建两个tomcat服务器,分别监听不同端口
修改tomcat配置server.xml
(2)创建文件夹和测试页面 具体配置: (1)对nginx配置文件进行反向代理配置 server { listen 9001; server_name 10.128.17.91;(nginx服务器地址)
location ~ /edu/ { //~表示正则表达式,如果匹配有edu就转发到下面proxy
porxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
(2)开放对外访问的端口号 9001 8080 8081
(3)重启nginx
15、nginx负载均衡配置实例
实现效果:
在浏览器输入地址http://10.128.17.91/edu/a.html,负载均衡效果,平均8080和8081端口中
准备工作:
(1)、准备两台tomcat服务器,一台8080,一台8081
(2)、在两台tomcat里面webapps目录中,创建edu文件夹,在edu文件夹中创建页面a.html,用于测试
(3)、修改nginx负载均衡配置
http {
upstream myserver { //给负载集群起个名字myserver
server 10.128.17.91:8080; //负载均衡服务器列表
server 10.128.17.91:8081;
}
server {
listen 80;
server_name 10.128.17.91; //nginx服务器IP
location / {
proxy_pass http://myserver; //转发到起的服务集群名字
root html;
index index.html index.htm;
}
}
}
(4)、nginx负载均衡分配策略
轮询(默认)
weight(权重): //weight值越大,分配的客户端越多
upstream myserver {
server 10.128.17.91:8080 weight = 5;
server 10.128.17.91:8081 weight = 10;
}
ip_hash: //每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream myserver {
ip_hash;
server 10.128.17.91:8080;
server 10.128.17.91:8081;
}
fair(第三方): //根据后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream myserver {
server 10.128.17.91:8080;
server 10.128.17.91:8081;
fair;
}
16、nginx动静分离配置实例
动态请求与静态请求区别:有数据库交互的为动态请求
动静分离方案一(主流):
客户端(浏览器)发送请求(动态请求、静态请求)到nginx,nginx将动态请求转发到tomcat服务器,由tomcat服务器去数据库获取数据;nginx将静态请求发送到静态资源服务器(html、css、image等)
动静分离方案二:
动态与静态文件混合在一起发布,通过nginx来分开
方案一准备工作:
(1)、在linux系统中准备静态资源,用于进行访问
cd /
mkdir data
cd data
mkdir www image
在www中放置html文件、在image中放置图片
nginx具体配置:
server {
listen 80;
server_name 10.128.17.91;
location /www/ {
root /data/; //文件所在目录
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on; //列出反目录,作用不是很大,浏览器输入地址http://10.128.17.91/image/会显示目录下所有的文件
}
}
重启nginx
最终测试
(1)浏览器中输入地址
http://10.128.17.91/image/01.jpg
(2)浏览器中输入地址
http://10.128.17.91/www/a.html
17、nginx配置高可用集群
keepalived是一款软件,用于监控MASTER是否存活
(1)需要两台nginx服务器
(2)需要keepalived
(3)需要虚拟ip
18、配置高可用准备工作
(1)需要两台服务器192.168.17.129和192.168.17.131
(2)在两台服务器安装nginx
(3)在两台服务器安装keepalived
yum -y install keepalived
rpm -q -a keepalived //查看是否安装成功
vim /etc/keepalived/keepalived.conf //配置文件
(4)完成高可用配置(主从配置)
a、修改/etc/keepalived/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.17.129
smtp_connecti_timeout 30
router_id LVS_DEVEL #访问到主机,主机的名字(也可以是IP)可以通过cat /etc/hosts查看127.0.0.1对应的主机名字
}
vrrp_script chk_http_port {
script “/usr/local/src/nginx_check.sh”
interval 2 #(检测脚本执行的间隔)
weight -20 #权重,当脚本成立,就将当前主机权重降低20
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将master改为backup
interface ens33 # 网卡名字
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备机值较小
advert_int 1 #时间间隔,每隔多长时间发送一次心跳,检测服务器是否还活着,默认美隔一秒发送一次心跳
authentication {
auth_type PASS #校验方式是密码
auth_pass 1111 #密码是1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H虚拟地址
}
}
b、在/usr/local/src添加检测脚本(添加nginx是否存活脚本)
#!/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
(5)把两台服务器上nginx和keepalived启动
./nginx(启动nginx)
systemctl start keepalived.service(启动keepalived)
ps -ef | grep keepalived(查看进程)
(6)最终测试
a、在浏览器地址栏输入虚拟ip地址192.168.17.50,测试能否访问到nginx
ip a 查看主从服务器的网卡信息可以看到绑定了虚拟IP信息
b、把主服务器(192.168.17.129)nginx和keepalived停止,再输入192.168.17.50
systemctl stop keepalived.service
./nginx -s top
ps -ef | grep keepalived
19、nginx原理
(1)master和worker
ps -ef | grep nginx 查看进程,能看到master和worker进程
master进程将工作分配给worker
(2)worker如何工作的
争抢master分配的工作
(3)一个master和多个worker有好处
a、可以使用nginx -s reload热部署,利用nginx进行热部署
b、每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker独立的,继续进行争抢,实现请求过程,不会造成服务中断
(4)设置多少个worker最合适
worker数和服务器的cpu数相等最为适宜的,设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗
(5)、连接数worker connection
问题:发送请求,占用了worker几个连接数?
答案:2或者4个(2个是访问静态资源来回,4个是访问动态资源)
问题:nginx有一个master,有四个worker,每个worker支持最大的连接数1024,支持的最大并发数是多少?
答案:访问静态资源——1024
4/2
访问动态资源——1024
4/4