1. 目录结构
1.1目录结构
/ 根目录: /
bin/sbin: 脚本目录. ---Linux中常见的命令存在该目录
etc: 配置目录. ---关于配置的信息都在该目录.比如:JDK环境 IP配置
tmp: 临时目录. ---该目录可以删除
usr: 用户目录 ---等价于programe file,如果没有指认目录会自动装到该目录(以后装的软件都装到该目录下)
root: 当前root用户具有的目录. ---以后创建一个新的用户,该用户就会有自己的目录
1.2FinalShell连接
阿里云等服务器公网ip如下,连接步骤一样
2.修改ip
修改我们虚拟机的ip地址。如果不改,那么centos默认动态ip,下一次连接还需要换ip
默认的ip每天的ip会不一样会自动变 设置让它成为静态ip
2.1查看虚拟ip 和子网掩码
查看网关ip
2.2编辑命令以及修改
vi 文件名
(1使用vi命令时---->命令行模式---->i---->编辑模式-----esc[键]--->命令行模式--->
【 :wq退出并保存】【 :q! 强制退出】
先进入配置,固定都是这个路径
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改完成后: :wq (保存退出)
重新启动网络: systemctl restart network
2.3重新连接![](https://img-blog.csdnimg.cn/direct/0e8949f6895e4be297a5984cef11fbe5.png)
2.4测试一下
ping www.baidu.com
ctrl键 + c 退出测试
3. 命令
3.1 查看虚拟机ip
ifconfig 或 ip addr ---在cns33
3.2 切换目录
cd 路径名
例如 cd usr
3.3 切换上一级
cd../
3.4 查看当前所在目录的路径
pwd
3.5 查看当前目录下的内容
ls
3.6 查看当前目录下的内容详细 或者 查看指定目录
ls -l
ls -l /指定目录
举例: ls -l /usr/local 说明:查看指定目录/usr/local下的详细内容
3.7 创建目录(文件夹) 或创建多个目录(文件夹)
mkdir 目录名
mkdir -p /目录名/目录名/目录名 带/是在根目录下创建,不带是当前目录创建
3.8 创建文件 (文档)
touch 文件名
3.9 删除文件 (文档) 或 目录(文件夹)
rm 文件名 n|y 不删除|删除
rm -f 文件名 强制删除指定文件
rm -r 目录名 删除目录
rm -rf 目录名 强制删除指定目录 也能删除文件
3.10 重命名 或 移动 或 移动加重命名
mv 要修改的名字 新名字
重命名举例: mv a b 把a改为了b
mv 移动的名字 /路径/路径
移动举例: mv a /usr/local 把a移动到了/usr/local下
mv 要移动的名字 /路径/路径/重命名
移动加修改名字举例: mv a /usr/local/b 把a移动到了/usr/local下并且改名为b
如果有移动到那个路径下已有名字就是覆盖
3.11 复制文件或目录
cp 源文件 目标路径 --------复制文件(文档)
复制举例: cp a.txt /usr/local 把a.txt文件复制到了 /usr/local下
cp -r 源文件 目标路径 -------复制目录(文件夹)
复制举例: cp -r a /usr/local 把a目录复制到了/usr/local下
3.12 查看文件(文档)的内容 或 前n行内容 或 后n行内容
cat 文件名 查看文件的所有内容---在一个窗口显示
查看举例: cat a.txt 查看a.txt文档的所有信息
head -n 文件名 查看文件的前n行内容 n代表数字
查看举例: head -2 a.txt 查看a.txt的前两行内容
tail -n 文件名 查看文件后n行内容 -----非常重要---查询项目日志
查看举例: tail -2 a.txt 查看a.txt后两行内容
3.13 测试网络是否能用
ping ip | 域名
举例:ping www.baidu.com
3.14 编辑文件
vi 文件名
使用vi命令时----进入命令行模式---->i----进入编辑模式----->
esc键----进入命令行模式---->:wq (退出并保存) :q!(强制退出) ------注意有冒号:
如果遇到其他了就一直esc键回到编辑了
3.15 查找指定的文件在哪儿目录 或 模糊查找
find 搜索的目录名 -name '被所搜的文件名' 搜索指定文件
查找案例: find / -name 'a.txt' 在根目录下搜索a.开头的文件
find 搜索的目录名 -name '文件.*'
模糊查找案例: find / -name 'a.*' 在根目录下搜索所有以a开头的文件
3.16 在指定文件中查找相对应的关键字并且查看是在多少行
grep 要查找的关键字 文件名
案例: grep hahaha /root/b/a 查找hahaha从 /root/b/a 下的所有关键字
grep 要查找的关键字 文件名 -n
案例: grep aaa /root/a/b -n 查看aaa关键字从 /root/a/b 下在第几行
3.17 显示行号(当vi编辑后)
:set number
3.18 重新启动网络
systemctl restart network
3.19 压缩和解压命令和解压到指定目录
tar -zcvf 压缩后的名.tar.gz 被压缩的目录名
案例: tar -zcvf yasuowenjian.tar.gz a 压缩a文件起名为yasuowenjian.tar.gz
tar -zxvf 要解压的文件名
案例: tar -zxvf yasuowenjian.tar.gz 解压yasuowenjian.tar.gz
没有指定目录就是当前目录,因为压缩前叫a所以解压出来也是a
tar -zxvf 要解压的文件名 -C 解压到指定路径
案例: tar -zxvf yasuowenjian.tar.gz -C / 把yasuowenjian解压到 根目录下
3.20修改文件或目录的权限
下面是加权限,如果减权限 把+换成 -
chmod u+r+w+x 文件名 给当前用户加权限
chmod g+r+w+x 文件名 给所在组的其他成员加权限
chmod o+r+w+x 文件名 给其他用户加权限
案例:chmod u+x yasuowenjian.tar.gz 给yasuowenjian赋值当前用户具有执行的权限
减权限
通过数字表示相对应的权限
通过第一张图的阿拉伯数字来算 7表示读写执行操作加起来
chmod 777 文件名
第一个7表示当前用户 第二个表示所在的组 第三个其他用户 具有的权限
3.21刷新命令
修改完文件需要刷新
source 你文件的路径
案例:source /etc/profile
3.22查看进程
ps -ef | grep 进程名
案例:
ps -ef | grep tomcat9
3.23关于防火墙的命令
1.查看防火墙的状态
systemctl status firewalld
2.关闭防火墙(企业中一定不能关闭防火墙)
systemctl stop firewalld
3.开启防火墙
systemctl start firewalld
4.开启开机禁用(重新开机也不会开启防火墙)
systemctl disable firewalld
5.开启开机启用
systemctl enable firewalld
6.重启防火墙
systemctl restart firewalld
7.防火墙放行指定的端口号
建议:如果软件端口号访问不到就要想到是不是没有放行端口号,不能关闭防火墙
firewall-cmd --add-port=端口号/tcp --zone=public --permanent
案例: firewall-cmd --add-port=8080/tcp --zone=public --permanent
firewall-cmd 固定的
--add-port:添加放行的端口号
--zone:设置作用域
--permanent:是否永久放行 不加表示不是永久放行下次启动就不放行了
注意:设置后一定要重新启动防火墙
成功会返回success
![](https://img-blog.csdnimg.cn/direct/79874d602a90465d84659878fb2d8a1f.png)
8.移除防火墙指定的端口号
firewall-cmd --remove-port=端口号/tcp --zone=public --permanent
案例: firewall-cmd --remove-port=8080/tcp --zone=public --permanent
注意:设置后一定要重新启动防火墙
9.查看当前防火墙放行了哪些端口,不显示代表没有
firewall-cmd --list-port
4.安装相关软件
4.1 安装jdk
1. 在liux中我们要下载liux的jdk
Java Downloads | Oracle 中国
https://www.oracle.com/cn/java/technologies/downloads/
2.跟windows一样直接拖进来就行 建议统一起名software 方便后续的软件都放到当前目录下
3.解压:
tar -zxvf jdkxxx.tar.gz
4.建议重命名太长了,方便后边配环境变量方便
mv jdk-17.0.8 jdk17
5.配置环境变量 /etc/profile ---配置环境变量 windows中配环境变量liux也需要配置
vi /etc/profile
进入后↓键最下面
i 输入
在liux中#表示注释
export jave_home=你存放jdk的路径
export path=$表示引用,表示引用之前的path的值 : 表示拼接 ,表示path拼接上你的
:wq 保存退出
发现javac命令用不了
6.刷新/etc/profole文件
source /etc/profile
7.在任何目录试用下javac java命令
4.2 安装tomcat
1.从官网下载tomcat
Apache Tomcat® - Welcome!https://tomcat.apache.org/任意版本
2.拖到liux系统中还是 /usr/local/software 下
3.解压
tar -zxvf apache-tomcat-xxxx
4.重命名
mv apache-xxx.tar.gz tomcat9
5.进入tomcat解压后的bin目录
cd /usr/local/software/tomcat9/bin/
脚本命令
6. tomcat启动
注意:要在tomcat/bin目录下使用
./startup.sh
7.因为是在后台启动不知道启没启动 需要查看进程
ps -ef | grep tomcat
8. tomcat关闭
./shutdown.sh
9.宿主机(window) ---访问虚拟机中的tomcat
如果启动了也访问不到
是因为防火墙或者没开放端口
企业一般不定不能关闭防火墙
firewall-cmd --list-port 查看放行的端口号 发现没有就去放行
10.放行端口号
firewall-cmd --add-port=8080/tcp --zone=public --permanent
成功返回success
11.重启防火墙
systemctl restart firewalld
能访问到就代表成功力
4.3安装mysql
宿主机可以通过navicat访问linux的mysql软件
如果当时你安装的centos为图像化本版,那么你在安装mysql时必须卸载掉centos图形化中自带的mysql服务器。
1 下载wget命令
yum -y install wget
2 在线下载mysql安装包
wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
3 安装MySQL
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
4. 安装mysql服务
- 首先进入
cd /etc/yum.repos.d/
目录。
cd /etc/yum.repos.d/
- 安装MySQL服务(这个过程可能有点慢)
yum -y install mysql-server
解决办法如下: rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
再次执行 如下命令
yum -y install mysql-server
5 启动MySQL
systemctl start mysqld 查看进程: ps -ef | grep mysql
1.2 修改MySQL临时密码
MySQL安装成功后会有一个临时密码,我们可以使用grep
命令查看临时密码先登录进去MySQL,然后修改MySQL密码。
1.2.1 获取MySQL临时密码
grep 'temporary password' /var/log/mysqld.log
1.2.2 使用临时密码先登录
mysql -uroot -p
我的临时密码是:a22XRJ88=+a;
1.2.3 把MySQL的密码校验强度改为低风险
set global validate_password_policy=LOW;
1.2.4 修改MySQL的密码长度
set global validate_password_length=5;
1.2.5 修改MySQL密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin';
1.3 允许远程访问
1.3.1 首先要关闭Cenots的防火墙或者放行端口号(企业中都是放行端口号)这里方便先关闭
sudo systemctl disable firewalld
1.3.2 修改MySQL允许任何人连接
1)首先登录MySQL
mysql -uroot -padmin
2)切换到mysql数据
use mysql;
3)查看user表
select Host,User from user;
发现root
用户只允许localhost
主机登录登录
4)修改为允许任何地址访问
update user set Host='%' where User='root';修改回去就是这个
update user set Host='localhost' where User='root';
5)刷新权限
flush privileges;
1.3.3 使用Navicat连接工具测试
5. Shell脚本
1. 什么是Shell脚本
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
Shell 他就是一门编程语言,客户可以通过该语言与linux内核进行相应的交互。
2.如何使用Shell
创建文件后缀必须为 .sh
编写的时候 ---必须以 #!/bin/bash 开头
#!/bin/bash
(1)第一个Shell脚本
如果没有建文件那么用vi命令的时候会自定帮你创建好
运行
./文件名
注意: 默认该文件没有执行的权限,我们需要修改该文件的权限
chmod u+x 文件名 或者 chmod 777 文件名
(2)查看脚本结构
cat 脚本名
举例: cat demo01.sh
(3)变量
定义变量的语法: 变量名=值
如何引用变量: $变量名 或 ${}
例子:
#!/bin/bash name=zhangsan echo "my name is ${name}"
注意变量名后不要有空格
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线_.
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关健字)
(4)Shell传递参数
我们可以在执行Shell脚本时,向脚本传递参数
脚本内获取参数的格式为: $n. n代表一个数字
1 为执行脚本的第一个参数 2 为执行脚本的第二个参数
举例:
#!/bin/bash
echo "你传入的第一个参数值:$1"
echo "你传入的第二个参数值:$2"
执行时:
./demo03.sh 参数1 参数2
(5) Shell数组
一个变量中可以存放多个元素,这个变量就是数组,数组它的下标是从0开始
语法:
注意这里区分是用空格
数组名=(元素 元素 元素)
#!/bin/bash
arr=(18 "张三" 太极)
echo "数组中第一个元素的内容:${arr[0]}"
#这里可以不用双引号,并且存储的值不分类型,但取值的时候必须要加大括号来取值${xxx[n]}
echo 第二个元素的内容:${arr[1]}echo 第三个元素的内容:${arr[2]}
(6)Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
算数运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk和 expr,expr 最常用。
expr是一款表达式计算工具,使用它能完成表达式的求值操作。例如,两个数相加(注意使用的是反引号*`* 而不是单引号 *`*):
两点注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
+ - \* / %
举例:
#!/bin/bash
a=10
b=20
var=`expr $a + $b`
echo "a和b的和为:${var}"
var=`expr $a - $b`
echo "a和b的差为:${var}"
var=`expr $a \* $b`
echo "a和b的积为:${var}"
var=`expr $a / $b`
echo "a和b的除为${var}"
var=`expr $a % $b`
echo "a和b的余为${var}"
关系运算符
举例: 注意if后有空格!!!
#!/bin/bash
a=10
b=20
if [ ${a} -eq ${b} ]
then
echo "a等于b"
else
echo "a不等于b"
fi
布尔运算符
举例:
#!/bin/bash
a=10
b=20
c=30
#或运算,有一个表达式为true则返回true
if [ ${a} -gt ${b} -o ${c} -gt ${b} ]
then
echo "~~~~~~~~~~true"
else
echo "==========false"
fi
(6)控制语句
if控制语句的语法
if 条件 then 满足条件执行的语句
elif 条件 then 满足条件执行的语句
...else 都不满足条件执行的语句
fi
举例:
#!/bin/bash
var=$1
if [ ${var} -eq 1 ]
then
echo "今天星期一"
elif [ ${var} -eq 2 ]
then
echo "今天星期二"
else
echo "语法有误"
fi
for控制语句的语法
for 变量名 in 数组元素
do
语句
done
举例:
#!/bin/bash
for a in 2 4 6 8
do
echo "a的值为${a}"
done
6.Nagix
1.什么是nginx
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 50,000 个并发连接数的响应.
nginx它是一个反向代理的服务器,而且占用内存小,并发能力强,默认并发2w.
2.为什么要使用nginx代理
想考:随着访问人数的不断增加,tomcat服务就无法承受这种压力,tomcat默认是200,最多1000
解决方案:部署项目为集群模式。
思考:后台部署了三台服务器。---客户访问那一台。
在服务器集群的前方设置一个代理服务,由代理服务器把客户的请求发送到真实的服务器
1.代理后面真实的服务器--安全.对于客户来说不知道服务器是哪一台
2.提高我们服务器的并发能力
3.国内有哪些企业使用nginx代理服务器
1.腾讯 2.淘宝 3.京东 4.12306 5.新浪 等
4.如何使用nginx
4.1 下载
4.2 配置依赖
这个软件使用的是c语言编写的项目。--我们要安装nginx这个软件,需要在linux安装该软件需要的依赖。
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
4.3 然后进入把下载的nginx放入linux系统
我安装软件的路径都在 cd /usr/local/software 下
4.4 解压
tar -zxvf nginx-xxxx
4.5 创建一个文件夹
作为nginx的安装目录 路径:/usr/app/nginx
4.6进入nginx解压后的目录
只是指定把软件装在哪里 注意: 进入nginx解压后的目录
./configure --prefix=/usr/app/nginx/
4.7进行编译和安装操作
直接用第二个也行
make 对nginx源码进行编译
make install 编译并安装
查看安装目录
conf: nginx的配置目录 里面比较重要的就是nginx.conf 它是nginx的配置文件
html: 静态资源目录
logs: 日志 ----如果启动nginx出现错误时,会在该目录下的日志文件中显示
sbin: 启动和关闭nginx的脚本目录
4.8 nginx的sbin脚本命令
注意: ./ 代表当前路径 需要进入到nginx/sbin下 不想进入就输绝对路径带命令
启动nginx----不会显示是否启动需要查看进程
./nginx /usr/app/nginx/sbin/nginx 绝对路径启动
ps -ef |grep nginx 查看进程
关闭nginx
./nginx -s stop
/user/app/nginx/sbin/nginx -s stop
当修改完nginx文件后需要重新加载nginx配置文件
./nginx -s reload
/user/app/nginx/sbin/nginx -s reload
4.9宿主机(window)---访问虚拟机中的nginx
启动nginx后用浏览器访问nginx,nginx默认端口号是80
访问不到就看看防火墙有没有放行80端口号,按着之前软件放行端口号的步骤来,成功就是下面的图
5.nginx的配置文件的介绍
#user nobody;
# 工作进程数 1
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 默认连接(并发)数1024 工作期间可以自己调试 但是最大是5w
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 代理服务的配置 ---可以配置多个代理服务
#自定义代理服务
server{
listen 82; #端口号为82
server_name localhost; #服务的名称 以后要改成真实部署项目的域名
location / { #访问的路径如果是/
root /usr/mynginx; #就会去找mynginx目录 可以使用绝对路径
index main.html; #并且去找首页资源 main.html
}
}
server {
listen 80; #默认监听的端口号为80
server_name localhost;#服务的名称 以后要改成真实部署项目的域名
#charset koi8-r;
#access_log logs/host.access.log main;
# 当请求路径为 /
location / {
root html; #找到html目录 相对路径 上面那个是绝对路径
index index.html index.htm;#并且去找首页资源 默认是 index.html 或 index.htm
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#错误页面内容
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
下面是自定义一个代理服务流程图
编写代理服务 略
/usr/app/nginx/sbin/nginx -s reload 编写完后需要刷新nginx配置
mkdir /usr/mynginx 创建目录
cd /usr/mynginx 进入目录
touch main.html 创建文件
vi main.html 编辑文件
firewall-cmd --add-port=82/tcp --zone=public --permanent 放行82端口号
成功返回success
systemctl restart firewalld 重启防火墙
宿主机访问 略
6.nginx的核心功能
1. 反向代理
正向代理
它代理的是客户端,对于服务器来说,不知道客户的具体地址。
拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~
我们常说的代理也就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求. 比如翻墙软件。
比如翻墙软件。
反向代理
反向代理它代理的是服务器,对于客户来说不知道访问具体服务器的信息。--对真实服务器具有保护的功能
还用借钱的例子,A想向C借钱,然后C借给他了,但是实际上这个钱可能C向B借的~至于钱到底是谁的,A是不知道的~
这里的C扮演着一个反向代理的角色,客户不知道真正提供服务的人是谁。
反向代理隐藏了真实的服务端,对于客户来说不知道访问的是哪台服务器。
例子: nginx反向代理服务器。 ---安装在服务器端。
使用nginx完成反向代理的功能
准备的环境:
(1)搭建nginx服务器--之前搭建好了
(2)准备一个真实服务器---springboot项目
注意:nginx可以和真实服务器在同一个机器上
(1)准备真实服务器---192.168.198.200
为了测试方便简单写个controller
package com.example.nginx1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("hello")
public String hello(){
System.out.printf("~~~~~~~~~~~`hello~~~~~~~~~~");
return "hello!!!!!!!!!!!";
}
}
打包
拖到linux中
运行项目:
java -jar xxx.jar 注意:Linux环境中必须安装了jdk
(2)修改nginx配置文件的内容---192.168.198.201
vi /usr/app/nginx/conf/nginx.conf
要保证192.168.198.200的tomcat端口号8080放行了 和 nginx的81端口号也要放行
192.168.198.201的nginx才能访问到200
#user nobody;
# 工作进程数 1
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 默认连接(并发)数1024 工作期间可以自己调试 但是最大是5w
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 代理服务的配置 ---可以配置多个代理服务
#代理外部的--->需要外部的ip地址和端口号
server{
listen 81; #端口号为81
server_name localhost; #服务的名称 以后要改成真实部署项目的域名
location / { #访问的路径如果是/
#被代理服务器的地址: 必须注意保证19.168.198.200这台服务器8080端口被放行了
proxy_pass http://192.168.198.200:8080;
}
}
#自定义代理服务本地的
server{
listen 82; #端口号为82
server_name localhost; #服务的名称 以后要改成真实部署项目的域名
location / { #访问的路径如果是/
root /usr/mynginx; #就会去找mynginx目录 可以使用绝对路径
index main.html; #并且去找首页资源 main.html
}
}
server {
listen 80; #默认监听的端口号为80
server_name localhost;#服务的名称 以后要改成真实部署项目的域名
#charset koi8-r;
#access_log logs/host.access.log main;
# 当请求路径为 /
location / {
root html; #找到html目录 相对路径 上面那个是绝对路径
index index.html index.htm;#并且去找首页资源 默认是 index.html 或 index.htm
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# 错误页面内容
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# 被代理服务器地址
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
重新加载nginx配置文件
/usr/app/nginx/sbin/nginx -s reload
./nginx -s reload
(3)宿主机访问nginx的服务地址
注意:记得nginx的81端口号放行
2.负载均衡
随着访问量的不断增加,一台真实服务器无法处理那么多请求。这时需要搭建真实服务器的集群。如何把请求均摊到集群的不同服务器上。 需要负载均衡组件,该组件可以帮你完成把请求均摊到集群服务器。
(1)准备真实服务器:
两台或更多 192.168.198.200 198.168.198.201
注意:nginx可以和真实服务器在同一个机器上 ,nginx的机器,先编写了config再启动真实服务器
(2)修改nginx完成反向代理以及负载均衡
注意要放行集群服务器的tomcat8080端口号,还要放行集群端口号999
#user nobody;
# 工作进程数 1
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 默认连接(并发)数1024 工作期间可以自己调试 但是最大是5w
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 代理服务的配置 ---可以配置多个代理服务
#集群方式被代理服务器的所有地址配置
upstream jiqun{
#注意集群服务器的tomcat8080端口号放行了
server 192.168.198.200:8080;
server 192.168.198.201:8080;
}
server{
listen 999; #集群端口号 注意集群端口号也要放行
server_name localhost;
location / {
proxy_pass http://jiqun; #这里被代理的名字要和上面集群的名字保持一致
}
}
#单个被代理服务器的地址配置
server{
listen 81; #端口号为81
server_name localhost; #服务的名称 以后要改成真实部署项目的域名
location / { #访问的路径如果是/
#被代理服务器的地址: 必须注意保证19.168.198.200这台服务器8080端口被放行了
proxy_pass http://192.168.198.200:8080;
}
}
#自定义代理服务
server{
listen 82; #端口号为82
server_name localhost; #服务的名称 以后要改成真实部署项目的域名
location / { #访问的路径如果是/
root /usr/mynginx; #就会去找mynginx目录 可以使用绝对路径
index main.html; #并且去找首页资源 main.html
}
}
server {
listen 80; #默认监听的端口号为80
server_name localhost;#服务的名称 以后要改成真实部署项目的域名
#charset koi8-r;
#access_log logs/host.access.log main;
# 当请求路径为 /
location / {
root html; #找到html目录 相对路径 上面那个是绝对路径
index index.html index.htm;#并且去找首页资源 默认是 index.html 或 index.htm
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# 错误页面内容
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# 被代理服务器地址
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
重新加载nginx配置
/usr/app/nginx/sbin/nginx -s reload
./nginx -s reload
(3)宿主机访问nginx的服务地址
如下图集群服务器都轮流打印了表示负载均衡成功力!
注意要放行tomcat8080和你定义nginx监听的端口号
负载均衡的策略
注意:ip哈希策略和负载策略只能用一个,不能同时存在
轮询
负载(权重)
ip哈希策略
1.轮询====默认的策略(刚刚上面的就是以轮询的方式)
2.负载====根据服务器的硬件不同,配置不同的载重
(1)修改nginx配置策略为负载
#user nobody; # 工作进程数 1 worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { # 默认连接(并发)数1024 工作期间可以自己调试 但是最大是5w worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # 代理服务的配置 ---可以配置多个代理服务 #集群方式被代理服务器的所有地址配置 upstream jiqun{ #注意集群服务器的tomcat8080端口号放行了 #(weight)负载均衡策略修改为载重.值越大处理能力越强 server 192.168.198.200:8080 weight=1; server 192.168.198.201:8080 weight=2; } server{ listen 999; #集群端口号 注意集群端口号也要放行 server_name localhost; location / { proxy_pass http://jiqun; #这里被代理的名字要和上面集群的名字保持一致 } } #单个被代理服务器的地址配置 server{ listen 81; #端口号为81 server_name localhost; #服务的名称 以后要改成真实部署项目的域名 location / { #访问的路径如果是/ #被代理服务器的地址: 必须注意保证19.168.198.200这台服务器8080端口被放行了 proxy_pass http://192.168.198.200:8080; } } #自定义代理服务 server{ listen 82; #端口号为82 server_name localhost; #服务的名称 以后要改成真实部署项目的域名 location / { #访问的路径如果是/ root /usr/mynginx; #就会去找mynginx目录 可以使用绝对路径 index main.html; #并且去找首页资源 main.html } } server { listen 80; #默认监听的端口号为80 server_name localhost;#服务的名称 以后要改成真实部署项目的域名 #charset koi8-r; #access_log logs/host.access.log main; # 当请求路径为 / location / { root html; #找到html目录 相对路径 上面那个是绝对路径 index index.html index.htm;#并且去找首页资源 默认是 index.html 或 index.htm } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # 错误页面内容 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # 被代理服务器地址 # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
(2)重启nginx配置
/usr/app/nginx/sbin/nginx -s reload
./nginx -s reload
(3)宿主机访问nginx的服务地址
201服务比200服务打印多表示负载起了效果
3.ip哈希策略====nginx会根据客户的ip====进行哈希计算====根据计算的结果把请求转发给对应的真实服务器。
如果客户的ip没有变化,那么它访问的真实服务器也不会发生改变。
#user nobody; # 工作进程数 1 worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { # 默认连接(并发)数1024 工作期间可以自己调试 但是最大是5w worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # 代理服务的配置 ---可以配置多个代理服务 #集群方式被代理服务器的所有地址配置 upstream jiqun{ #注意集群服务器的tomcat8080端口号放行了 #(ip_hash)负载均衡策略修改为哈希策略 server 192.168.198.200:8080; server 192.168.198.201:8080; ip_hash; } server{ listen 999; #集群端口号 注意集群端口号也要放行 server_name localhost; location / { proxy_pass http://jiqun; #这里被代理的名字要和上面集群的名字保持一致 } } #单个被代理服务器的地址配置 server{ listen 81; #端口号为81 server_name localhost; #服务的名称 以后要改成真实部署项目的域名 location / { #访问的路径如果是/ #被代理服务器的地址: 必须注意保证19.168.198.200这台服务器8080端口被放行了 proxy_pass http://192.168.198.200:8080; } } #自定义代理服务 server{ listen 82; #端口号为82 server_name localhost; #服务的名称 以后要改成真实部署项目的域名 location / { #访问的路径如果是/ root /usr/mynginx; #就会去找mynginx目录 可以使用绝对路径 index main.html; #并且去找首页资源 main.html } } server { listen 80; #默认监听的端口号为80 server_name localhost;#服务的名称 以后要改成真实部署项目的域名 #charset koi8-r; #access_log logs/host.access.log main; # 当请求路径为 / location / { root html; #找到html目录 相对路径 上面那个是绝对路径 index index.html index.htm;#并且去找首页资源 默认是 index.html 或 index.htm } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # 错误页面内容 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # 被代理服务器地址 # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
(2)重启nginx配置
/usr/app/nginx/sbin/nginx -s reload
./nginx -s reload
(3)宿主机访问nginx的服务地址
200服务没打印就对了,因为是根据客户ip计算,不变就不会更改
3. 动静分离
非常适合单体项目---不适合前后端完全分离的项目
把真实服务器中静态资源和动态资源分开。 把静态资源交于nginx来处理。
(1)如何完成动静分离
7.RabbitMq
1.安装
1.1 安装Socat
在线安装依赖环境:
yum -y install gcc
yum -y install socat
yum -y install openssl
yum -y install openssl-devel
1.2 安装Erlang
mkdir /user/app/rabbitmq && cd /rabbitmq
# 上传 erlang-22.0.7-1.el7.x86_64.rpm 安装包上传
# 安装
rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
1.3 安装RabbitMQ
cd /rabbitmq
# 上传 rabbitmq-server-3.7.17-1.el7.noarch.rpm 安装包
上传
# 安装
rpm -ivh rabbitmq-server-3.7.17-1.el7.noarch.rpm
1.4 开启管理界面及配置
# 开启管理界面
rabbitmq-plugins enable rabbitmq_management
# 配置远程可使用guest登录mq
cd /usr/share/doc/rabbitmq-server-3.7.17
cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
# 修改配置文件
vi /etc/rabbitmq/rabbitmq.config
修改/etc/rabbitmq/rabbitmq.config
配置文件:
1.5 启动
centos6用这个命令:
/sbin/service rabbitmq-server restart
centos7用这个命令:
systemctl start rabbitmq-server
1.6 配置虚拟主机及用户
6.1. 用户角色
用浏览器加上虚拟机ip再加上15672
注意防火墙放行端口号15672
http://192.168.198.201:15672
RabbitMQ在安装好后,可以访问http://ip地址:15672
;其自带了guest/guest的用户名和密码;如果需要创建自定义用户;那么也可以登录管理界面后,如下操作:
角色说明:
1、 超级管理员(administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、 监控者(monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、 策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
4、 普通管理者(management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
6.2. Virtual Hosts配置
像mysql拥有数据库的概念并且可以指定用户对库和表等操作的权限。RabbitMQ也有类似的权限管理;在RabbitMQ中可以虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。 相当于mysql的db。Virtual Name一般以/开头。
6.2.1. 创建Virtual Hosts
6.2.2. 设置Virtual Hosts权限
2.具体介绍和使用
8.Redis
待续
9.Jenkins
待续