Nginx安装

395 阅读8分钟

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

Nginx:http服务器(网络静态资源服务器)反向代理 Tomcat服务器:动态请求 + 静态资源 Nginx:静态请求

概念

正向代理

比如要访问youtube,但是不能直接访问,只能先找个翻墙软件,通过翻墙软件才能访问youtube. 这种方式就叫做正向代理。

image.png

代理服务器就能穿过防火墙

正向代理:

  • 客户端是知道目标地址
  • 代理服务器代理的是客户端

反向代理

指的是用户要访问youtube,但是youtube悄悄地把这个请求交给后台N台服务器中的其中一台来做,这种方式就是反向代理了。

image.png

  • 代理服务器主要是给后台应用提供服务
  • 对于用户来说,根本不知道请求的URI 是哪个服务器提供的服务

安装

下载地址

  • 将二进制资源包拖入 /usr/local/soft
  • 安装一些正则插件
yum -y install gcc gcc-c++ autoconf automake make
yum install pcre -y
yum install pcre-devel -y
yum install zlib -y
yum install zlib-devel -y
  • 解压
tar -zxvf nginx-1.18.0.tar.gz -C /usr/local/src
  • 配置
cd /usr/local/src/nginx-1.18.0/
./configure --prefix=/usr/local/nginx
  • 编译安装
cd /usr/local/src/nginx-1.18.0/
make && make install
  • 查看目录
cd /usr/local/nginx/

image.png

启动命令

/usr/local/nginx/sbin/nginx
netstat -ntlp

关闭命令:/usr/local/nginx/sbin/nginx -s stop
重启命令:/usr/local/nginx/sbin/nginx -s reopen
重载命令:/usr/local/nginx/sbin/nginx -s reload

image.png 端口默认是 80

192.168.202.3:80

image.png

切换 processes

image.png

日志

/usr/local/nginx/logs
tail -n 100 -f access.log

日志切分

ll -h 查看文件大小

image.png

1.4k 最好日志文件别超过100M 日志文件会按天生成

脚本文件

搞一个准备好的脚本文件 backuplog.sh

image.png

根据图内脚本 创建一个datalogs 作为备份数据

BAK_TIME=/bin/date -d yesterday +%Y%m%d%H%M

因为演示 这里是按分钟来的 具体可以按天

image.png

创建脚本

到sbin里面创建 backuplog.sh 脚本

#!/bin/sh

BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=access.log

CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs

CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
mv $CURRENT_FILE $BAK_FILE

$BASE_DIR/sbin/nginx -s reopen

image.png

添加执行权限

chmod +x backuplog.sh

变色 image.png

执行脚本 文件内容会被移动走了 并有日志文件生成

/usr/local/nginx/sbin/backuplog.sh

image.png

添加linux的定时任务

crontab -e

*/1 * * * * sh /usr/local/nginx/sbin/backuplog.sh

image.png

image.png

每分钟 备份 可怕😨 😄

项目连接

1.把后台服务搭建好 部署数据Mysql,运行jar包 2.修改配置文件,把请求转发到后台应用

image.png

这是一个springboot项目 所以tomcat 应该是不需要安装的 打出来包的ip地址和实际可能不一样,所以搞一个 yml 会覆盖jar里面的配置

image.png

必须是可执行jar包

多个main方法指定一下main方法 image.png

image.png

image.png 111

image.png

image.png

image.png

image.png

后台启动 image.png

upstream

image.png 检查语法是否错误 重启

image.png

自己测试

安装数据库 然后跑一下sql

cd /usr/local/soft/crm
java -jar crm-2.0.0.jar
按control + z 退出 

后台启动吧 
nohup java -jar crm-2.0.0.jar &

image.png

替换 location

原来

location / {
            root   html;
            index  index.html index.htm;
        }

替换

location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://192.168.202.3:9999;
        }
cd /usr/local/nginx/
// 检查语法
sbin/nginx -t
//reload 
sbin/nginx -s reload

image.png

清理缓存

不清理 登陆不进去 然后 自己的一些 掘金账号也要重新登陆 😓 image.png

image.png

worker_processes 2;

每个woker的请求连接数 worker_connections 1024;

upstream

upstream crm {
        server 192.168.202.3:9999;
    }

image.png

然后更新一波

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

负载均衡

image.png

image.png

image.png

解决方案一:IP hash 解决方案二:分布式解决方案 Redis + Token

image.png

获取真实ip

image.png

image.png

image.png

动静分离

解压静态资源到可查找目录

在根目录创建 datas

// 递归创建
mkdir -p /datas/crm

解压

cd /usr/local/soft/crm/
解压缩指定目录 
unzip static.zip -d /datas/crm/

pwd 获取全路径 /datas/crm/static

加入location正则 进行静态资源匹配

image.png

image.png

静态资源压缩

  • #gzip on;把 #去掉 添加下面
gzip  on;
    gzip_min_length 1k;
    gzip_comp_level 2;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
    gzip_vary on;

验证就是 一些js 文件就变小了。

Https 支持

ssl证书

安装openssl

yum install -y openssl openssl-devel

给模块添加https支持

cd /usr/local/src/nginx-1.18.0
./configure   --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
然后编译一下
make

image.png

先备份 之前的nginx

cd /usr/local/nginx/sbin/
cp nginx nginx.old
强制覆盖
cp -f /usr/local/src/nginx-1.18.0/objs/nginx ./

image.png

image.png

  • 就的Nginx执行程序替换为新的执行程序(备份起来)

  • 向Master发送USER2信号 kill -s SIGUSR2 1254

  • Master进程修改PID文件名, 加后缀.oldbin

  • Master进程使用新的执行程序启动

  • 向老的Master进程发送QUIT信号,关闭老的进程

kill -QUIT 1254
ps -ef|grep nginx

ssl 自己生成

到 cd  /usr/local/nginx/sbin/ 里面生成 serer.key

openssl genrsa -des3 -out server.key 1024
输入123456
输入123456

image.png

生成证书

openssl req -new -key server.key -out server.csr
openssl rsa -in server.key -out server_nopass.key

image.png

image.png

到conf配置 ssl支持

server {
    listen 443 ssl;
    server_name 127.0.0.1;
    ssl_certificate /usr/local/nginx/sbin/server.crt;
    ssl_certificate_key /usr/local/nginx/sbin/server_nopass.key;
        location / {
            proxy_pass http://crm;
        }
    }

image.png

image.png

跨域

image.png

也可以在代码中设置

image.png

缓存

默认没有的 可配置 不写流程了因为不配置不影响啥 😄

image.png

image.png

这里目录 会自动创建 无需自己创建了 datas/cache

限流

令牌桶算法

漏桶算法

限制并发连接数

也都是以配置信息形式在 conf中

image.png

// 限定一个请求 只是测试哦 image.png

限制访问频率

每分钟20次限定

image.png zone 后面one 记得改成addrreq 小问题撒

image.png

重写

重定向 测试 拦截所以

image.png

image.png

搭建高可用环境 Keepalived

image.png

image.png

在2台机器安装 Nginx

把资源拷贝到其他服务器上 image.png

image.png

image.png

  • 安装keepalived依赖 包
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel  -y
  • 上传包 解压 编译
tar -zxvf keepalived-2.0.20.tar.gz -C /usr/local/src/

cd /usr/local/src/keepalived-2.0.20/

./configure --prefix=/usr/local/keepalived

make && make install
  • 安装keepalived到Linux服务系统
mkdir /etc/keepalived 

 cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 

 cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

 cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 

 cp /usr/local/keepalived/sbin/keepalived /etc/init.d/
  • 编写nginx检测脚本
vi /etc/keepalived/nginx_check.sh


#!/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

赋予执行权限
chmod +x /etc/keepalived/nginx_check.sh

修改Master配置

vi /etc/keepalived/keepalived.conf 清空所有内容

然后复制下面内容进去

! Configuration File for keepalived 

global_defs { 

 router_id wolfcode ##路由器标志 # 集群资源监控,组合track_script进行 

vrrp_script check_haproxy { 

 script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径 

 interval 2 #检测时间间隔 

 weight -20 #条件成立 权重减20 

} 

vrrp_instance PROXY { 

 # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP 

 state MASTER

 # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个 

 interface ens32

 # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机 

 virtual_router_id 80 

 # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。 

 # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP 

 # 主节点时,内容为: 

 unicast_src_ip 192.168.122.133

 # 设置优先级,确保主节点的优先级高过备用节点 

 priority 100 

 # 用于设定主备节点间同步检查时间间隔 

 advert_int 2 

 # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致 

 authentication { 

 auth_type PASS 

 auth_pass wolfcode

 } 

 # 集群资源监控,组合vrrp_script进行 

 track_script { 

 check_haproxy 

 } 

 # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中 

 # 当状态切换到BACKUP时,此IP会自动从系统中删除 

 # 可以通过命令ip add查看切换后的状态 

 virtual_ipaddress { 

 192.168.122.110 #虚拟ip配置完之后就用它访问 

 } 

}

启动

image.png

修改Slave配置 【另外一个服务器了】

修改keepalived的Slave配置文件:vi /etc/keepalived/keepalived.conf 

! Configuration File for keepalived 

global_defs { 

 router_id wolfcode ##路由器标志 # 集群资源监控,组合track_script进行 

vrrp_script check_haproxy { 

 script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径 

 interval 2 #检测时间间隔 

 weight -20 #条件成立 权重减20 

} 

vrrp_instance PROXY { 

 # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP 

 state BACKUP

 # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个 

 interface ens32

 # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机 

 virtual_router_id 80 

 # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。 

 # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP 

 # 主节点时,内容为: 

 # unicast_src_ip 192.168.122.134 

 # 设置优先级,确保主节点的优先级高过备用节点 

 priority 90 

 # 用于设定主备节点间同步检查时间间隔 

 advert_int 2 

 # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致 

 authentication { 

 auth_type PASS 

 auth_pass wolfcode

 } 

 # 集群资源监控,组合vrrp_script进行 

 track_script { 

 check_haproxy 

 } 

 # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中 

 # 当状态切换到BACKUP时,此IP会自动从系统中删除 

 # 可以通过命令ip add查看切换后的状态 

 virtual_ipaddress { 

 192.168.122.110 #虚拟ip配置完之后就用它访问 

 } 

}

image.png

运维技术可以利用 Master 和 Backup 都可以用 技术 lvs