Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell

shell他就是一个脚本命令,当运行该脚本命令时,可以与Linux系统底层进行交互

 1.基本语法.sh

#!/bin/bash
echo "hello world !"

必须以#!/bin/bash 开头

echo:输出语句

执行: . /脚本文件名.sh

注意:权限不足

nginx 调用sh文件 nginx调用shell脚本_代理服务器

 2.shell变量

nginx 调用sh文件 nginx调用shell脚本_nginx_02

nginx 调用sh文件 nginx调用shell脚本_运维_03

 

nginx 调用sh文件 nginx调用shell脚本_代理服务器_04

shell的变量和java的变量区别:无需添加数据类型

 3.shell传递参数

当执行shell脚本时,可以传递参数,在shell脚本中使用$n 接受传递的参数 n:表示数字1-

 

nginx 调用sh文件 nginx调用shell脚本_nginx 调用sh文件_05

nginx 调用sh文件 nginx调用shell脚本_服务器_06

 

 4.shell数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由 0 开始。

 语法:

array_name=(value1 value2 ... valuen)

注意: Shell 数组用括号来表示,元素用"空格"符号分割开

 

nginx 调用sh文件 nginx调用shell脚本_运维_07

 

nginx 调用sh文件 nginx调用shell脚本_nginx 调用sh文件_08

 注意: 如果直接引用数组名而没有使用下标默认下标0

 5.关联数组

理解为 java中map

关联数组使用 declare(Linux declare 命令 | 菜鸟教程 命令来声明,语法格式如下:

declare -A array_name=([K]=v [k]=v [k]=v)

 ${arr_name[k]} 

nginx 调用sh文件 nginx调用shell脚本_运维_09

 使用*表示所有key对应的值

 6.shell基本运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符

 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

 

nginx 调用sh文件 nginx调用shell脚本_代理服务器_10

 7.控制语句

7.1while语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据

while condotion
do
    command
done

8.Nginx

8.1什么是Nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强, 高达 50,000 个并发连接数的响应 ,事实上nginx的并发能力在同类型的网页服务器中表现较好。

反向代理服务器

 8.2为什么使用Nginx反向代理服务器

nginx 调用sh文件 nginx调用shell脚本_运维_11

 8.3有哪些企业在使用Nginx代理服务器

淘宝 京东 新浪 微博 腾讯

 8.4如何安装Nginx代理服务器

nginx它使用c语言编写,通过源码的形式安装nginx.

 8.4.1先安装nginx需要的依赖环境

yum  install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

8.4.2下载nginx

nginx: download

 8.4.3把下载的nginx放入linux系统

nginx 调用sh文件 nginx调用shell脚本_nginx_12

 8.4.4创建一个目录作为nginx的安装目录

mkdir /usr/soft/nginx

8.4.5解压nginx源码文件

tar -zxvf nginx-1.18.0.tar.gz

8.4.6进入解压后的目录

nginx 调用sh文件 nginx调用shell脚本_运维_13

 指定安装nginx目录

nginx 调用sh文件 nginx调用shell脚本_运维_14

 8.4.7编译

make

8.4.8安装

make install

8.4.9查看安装nginx的目录中的内容

nginx 调用sh文件 nginx调用shell脚本_代理服务器_15

 8.4.10启动nginx

sbin/nginx 启动nginxsbin/nginx -s stop 关闭nginx sbin/nginx -s reload 重新加载nginx配置

 8.4.11 window浏览器就可以访问代理服务器

http://192.168.223.147:80

 9.nginx的配置文件的介绍

nginx 调用sh文件 nginx调用shell脚本_服务器_16

 

nginx 调用sh文件 nginx调用shell脚本_服务器_17

 自定义了server

nginx 调用sh文件 nginx调用shell脚本_代理服务器_18

 创建一个目录main并在该目录下创建一个main.html

 注意:修改了nginx配置文件,必须重新加载配置文件

./nginx -s reload

一个nginx对应多个server

10.nginx的核心功能

10.1反向代理

10.1.1正向代理

举例:

1.拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~

我们常说的代理也就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求.

2.比如我想访问www.google.com,要想翻越这堵墙,你可以在国外用Shadowsocks来搭建一台代理服务器,代理帮我们请求www.google.com,代理再把请求响应结果再返回给我。思考: 谷歌是否知道真正的访问者。

正向代理: 代理的客户端,对于服务器来说不知道真实的客户

 10.1.2反向代理

举例:


还用借钱的例子,A想向C借钱,然后C借给他了,但是实际上这个钱可能C向B借的~至于钱到底是谁的,A是不知道的~


这里的C扮演着一个反向代理的角色,客户不知道真正提供服务的人是谁。反向代理隐藏了真实的服务端,对于客户来说不知道访问的是哪台服务器。


可以使用nginx反向代理。

nginx 调用sh文件 nginx调用shell脚本_nginx_19

 

 

1.准备:

服务器---tomcat项目

springboot项目放入linux副武器系统

 

nginx 调用sh文件 nginx调用shell脚本_服务器_20

 

java-jar hmq-demo01.jar

运行springboot项目

2.配置nginx来代理上面springboot真实项目服务

 

nginx 调用sh文件 nginx调用shell脚本_代理服务器_21

 

重新加载nginx配置文件

3.浏览器访问nginx

nginx 调用sh文件 nginx调用shell脚本_运维_22

 

 10.2负载均衡

配合反向代理+负载均衡

nginx 调用sh文件 nginx调用shell脚本_nginx 调用sh文件_23

 

 

真实服务器准备2台

nginx 调用sh文件 nginx调用shell脚本_nginx_24

 nginx重新加载配置文件

nginx 调用sh文件 nginx调用shell脚本_服务器_25

 

默认使用轮询策略

还有那些负载均衡策略:

1.权重策略:合适服务器的配置不同,被访问的频率不同

nginx 调用sh文件 nginx调用shell脚本_服务器_26

 2.ip_hash:根据客户端的ip分配相应真实服务器

nginx 调用sh文件 nginx调用shell脚本_运维_27

 3.使用第三方插件:付费较多

 10.3动静分离

nginx 调用sh文件 nginx调用shell脚本_nginx 调用sh文件_28

 

把静态资源【css,js,img】交于nginx来处理,而动态资源接口,jsp还是有真实服务器处理

好处:当修改静态资源时,无需对每个真实服务器的静态资源做修改,只需要修改nginx一处的静态资源

nginx 调用sh文件 nginx调用shell脚本_nginx_29

 

nginx 调用sh文件 nginx调用shell脚本_nginx_30