第一部分 网络服务
第一章 例行性工作
1.单一执行的例行性工作
单一执行的例行性工作(就像某一个时间点 的闹钟):仅处理执行一次
1.1 at命令:定时任务信息
[rhel@localhost ~]$ rpm -qa |grep -w at at-spi2-core-2.40.3-1.el9.x86_64 at-spi2-atk-2.38.0-4.el9.x86_64 at-3.1.23-11.el9.x86_64两种帮助方式:man --help(不详细)
1.2 at命令格式
at [参数] [时间]例如:
#定义三分钟之后显示 [root@server ~]# at now + 3 minutes
1.3短命令
-v:显示出你定义任务完成后的时间 -r:删除任务 -m:当任务完成之后,即使没有标准输出,将给用户发送邮件 -c:可以列出后面接的该项工作的实际命令内容(脚本) -d:atrm的别名,可以取消一个在at调度中的工作 -l:是atq的别名,可列出目前系统上面的所有该用户的at调度 -f:从文件中读取作作业
1.4 定义任务时,写时间的方式:
HH:MM HH:MM YY-MM-DD 查询该任务信息:atq命令 = at -l 删除该任务信息:at - r = a (一个是手动删除,一个就是等任务到时间执行后就会自动删除) /etc/at.deny : 拒绝用户使用at定义任务 ---- 是at命令自身存在的; /etc/at.allow : 允许用户使用定义任务 ---- at命令本身没有,但你创建了也是可以生效的;编辑
编辑
定义rhel用户不能定义单一次任务;
注意:允许是优先的!若at.deny文件与at.allow文件里面都有一个用户,则优先考虑的是allow文件的;
1.5 任务脚本路径
编辑
2.cron:周期性任务计划
安装软件:yum.install + 文件名
注意:与at不一样,任务执行完成后,不会删除
2.1指定某个用户去编辑:
crontab -u 用户
2.2 进入编辑模式
第一种:
crontab -e (edit)第二种:周期性任务脚本的路径
/var/spool/cron文件编辑后保存退出:1.esc 2.:wq
若在定义的时候,其他不需要的就用*代替
编辑
时间写了,也要把任务写上!!
2.3查看周期性任务
这是查看当前用户定义的单一周期性任务
crontab -l这是查看指定用户定义单一周期性任务
crontab -l -u 用户
2.4 清空任务列表
crontab -r若只想删除某一条任务的话,需要用-e先进入编辑里面,再用光标选中某一行,按dd删除
2.5 默认时间格式
分 时 日 月 周 任务注意:date的时间格式为 ----- 月日时分年点秒
2.6 crontab计划任务的时间格式:
分 时 日 月 周 0-59 0-23 1-31 1-12 0-7 /uer/bin/wall ----- 若命令没有在解释器里面执行,用绝对路径
wall ----- 若命令在解释器里面执行,可以直接使用
2.7 crontab的命令选项
-u <user> define user -e edit user's crontab -l list user's crontab -r delete user's crontab (清空) -i prompt before deleting -n <host> set host in cluster to run users' crontabs -c get host in cluster to run users' crontabs -s selinux context -V print version and exit -x <mask> enable debugging
2.8 特殊字符
特殊字符 | 含义 |
---|---|
* | 代表任何时刻 |
, | 代表分隔时段 |
- 0-59 | 代表一段时间范围 |
/数字 | 指定时间的间隔频率,例如每 3 分钟进行一次,*/3 |
注:%在crontab里面有特殊含义,如果有命令里面需要使用%,需要使用\转义。
[root@server ~]# crontab -e
0 9 * * * wall "good morning"
确保安装包,确认在进行?
2.9 日志文件
tail -f /var/log/cron
2.10 系统级别性周期性任务 --- 很方便
编辑任务时,用户身份比较多适合用
vim /etc/crontab
编辑
2.11 任务扩展配置
/etc/anacrontab就是给未能正常执行的任务再定一个时间!
第二章 时间服务器
1.服务:
是运行在操作系统后台的一个或多个程序,为用户或系统提供某项特定的服务。
2.ntp
NTP 是网络时间协议(Network Time Protocol)的简称,通过 udp 123 端口进行网络时钟同步。
3.chrony
Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软件。查看程序是否运行:
[root@server~]# ps -aux | grep chrony如果程序未被运行,则需要开启:
systemctl start chronydsystemctl start(启动)|stop(停止)|restart(重启)|enable(开机自启)|disable(开机禁用)|reload(重载)|load(加载)|status(状态) 程序名
默认是有安装的,如果没有安装的话,需要安装,步骤如下:
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai 1.#安装服务软件 [root@localhost ~]# yum install -y chrony 2.#重启服务并开机启动 [root@localhost ~]# systemctl enable --now chronyd 3.#配置时间服务器,编辑 [root@server1 ~]# cat /etc/chrony.conf 4.#设置时间服务器的服务端名字 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst #Allow NTP client access from local network. #设置允许哪个客户端可以访问该服务器 #allow 192.168.81.130/16client 192.168.10.129 为了让时间不一样,先修改时间: [root@client ~]# date 010112122023 #编辑 [root@client ~]# vim /etc/chrony.conf pool 192.168.81.129 ibusrt #重启 [root@client ~]# systemctl restart chronyd [root@client ~]# chronyc sources
时间同步不成功:
1.网络不通(确保主机是同一种网络模式) 2.服务端必须关闭防火墙 systemctl stop firewalld 3.服务端和客户端的时区不一致 4.确认服务端和客户端的配置
4.配置时间服务器客户端
1.安装软件服务 2.运行软件程序 3.根据自定配置提供对应的服务 /etc/chrony.conf vim /etc/chrony.conf pool 2.rhel.pool.ntp.org ibrust ---- 信息注释 local stratum 10 ---- 删除注释,把当前的主机标记为10层级,最高层级是15;一般调为中等; allow 192.168.81.129 ---- 允许当前网段内主机发请求 4.重新启动软件 systemctl restart chronyd.service
注意:1.一定要关闭防火墙
2.关闭unix的规则
server 192.168.81.129 1.[root@server ~]# systemctl stop firewalld 或者 [root@server ~]# systemctl is-active firewalld 2.[root@server ~]# setenforce 0 (默认是1,打开的)
查看关闭没有:
[root@server ~]# systemctl status firewalld查看程序文件位置:
[root@server ~]# rpm -ql + 程序 找直接以.conf的文件
5. 网络监听
[root@client]# netstat -tunalp -t:tcp -u:udp -n:主机是按数值(地址型)标记 -a:all -l:list监听的信息 -p:program程序
6.lsof
显示打开运行文件里面的信息lsof -i --- 列出所有的网络连接 lsof -i tcp ---- 列出所有tcp网络连接信息 lsof -i udp ---- 列出所有udp网络连接信息 lsof -i:3036 ---- 列出谁在使用某个端口 lsof -i tcp:80 ---- 列出谁子啊使用某个特定的tcp端口 lsof -i udp:55 ---- 列出谁子啊使用某个特定的udp端口
7. 判断本地网络服务是否运行
1.只要服务运行了,就能在本地看到 ps -aux | grep chronyd(程序) 2.程序在运行,就说明服务是正常的 systemctl status | grep chronyd(程序) 或者 systemctl in-active | grep chronyd(程序) 3. 网络服务只要在运行,就会在某个端口存在监听信息 netstat | grep chronyd(程序) ss -tunalp | grep chronyd(程序) 4.只要该网络服务有开启某个端口,就可以找到,只要查看某个端口服务是否正常运行就可以 lsof -i:xx
第三章 ssh
1、远程连接服务器简介
(1)什么是远程连接服务器
远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。``
2. 远程连接服务器的类型(以登录的连接界面来分类)
- 文字接口 明文传输:Telnet 23、RSH等,目前非常少用 加密传输:SSH为主,已经取代明文传输 - 图形接口:XDMCP远程控制、VNC(RFB)、XRDP(RDP3389)远程桌面等
3.连接加密技术简介
目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程 。
公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。 私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。
二.SSH工作过程:
1.五个阶段
在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段:
过程 | 说明 |
---|---|
版本号协商阶段 | SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 |
密钥和算法协商阶 段 | SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用 的算法 |
认证阶段 | SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 |
会话请求阶段 | 认证通过后,客户端向服务器端发送会话请求 |
交互会话阶段 | 会话请求通过后,服务器端和客户端进行信息的交互 |
A.TCP三次握手版本协商过阶段
目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本。 服务端默认已经开启ssh服务,打开了22号端口,等待客户端来连接 服务器向客户端发送第一个报文: 告诉了客户端使用了ssh版本以及软件信息 客户端收到报文之后,拿出服务器的ssh版本,看一下自己是否支持,如果支持使用该版本
B.协商算法和确定对称秘钥阶段
SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法:
对称加密: 同一秘钥既可以进行加密也可以进行解密
优势:使用一个秘钥它的加密效率高一些(快一些) 缺陷:秘钥传输的安全性(在网络传输中不传输秘钥) 应用: 传输数据(数据的双向传输)
非对称加密:产生一对秘:
公钥:公钥加密 私钥:私钥解密(不会进行网络传输)
缺陷:公钥的安全性 客户端去访问一个服务器(假设数据被我们的hacker拦截了,hacker发送了自己的公钥给客户端,客户端用 hacker的公钥对数据进行加密,然后hacker用自己的私钥进行解密。从而获取到用户传送的隐私(用户和密码)信息,进一步对服务器动机);传送速度慢(效率低) 优势:安全性更高 应用: 单向的认证阶段(建立安全的连接保证后面对称加密的秘钥安全)
DH密钥交换算法
步骤如下:
客户端发往服务器的DH初始化参数:ecdh public key 客户端发送自己的公钥给服务器 服务端发送自己的公钥给客户端 计算出对称加密的秘钥(sessionkey)--NewKeys 客户端计算出对称加密的秘钥(sessionkey)--newkeys 解决了一个问题:保证了进行传输时候对称加密秘钥的安全。(能不能用的上这个秘钥,还取决于认证阶段是否成功)
C.第三阶段:认证阶段
SSH客户端向服务端发起认证请求,服务端对客户端进行认证
(1)基于口令的认证:
(2)基于公钥的认证:
步骤如下:
1.Client将自己的公钥存放在Server上,追加在文件authorized_keys中。 2.Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。 3.Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。 4.Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。 5.Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
D.第四阶段:会话请求阶段**
认证通过后,客户端向服务器端发送会话请求,建立新的连接
E.第五阶段:交互会话阶段
会话请求通过后,服务器端和客户端进行信息的交互
传输数据的的阶段:数据时要被加密(对称加密方式),对称加密的秘钥就是sessionKey(客户端和服务服务端在秘钥交换阶段互相计算出来的,sessionKey未进行网络传输)
2.ssh服务配置
#ssh服务安装包openssh-server [root@server1 ~]# vim /etc/ssh/sshd_config 1.#Port 22 #监听端口,默认监听22端口 【默认可修改】 2.#AddressFamily any #IPV4和IPV6协议家族用哪个,any表示二者均有 3.#ListenAddress 0.0.0.0 #指明监控的地址,0.0.0.0表示本机的所有地址 【默认可修改】 4.#ListenAddress :: #指明监听的IPV6的所有地址格式 5.#LoginGraceTime 2m #登录的宽限时间,默认2分钟没有输入密码,则自动断开连接 6.#PermitRootLogin yes #是否允许管理员远程登录,'yes'表示允许 7.#MaxAuthTries 6 #最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码 8.#MaxSessions 10 #允许的最大会话数 9.AuthorizedKeysFile .ssh/authorized_keys #选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面 10.PasswordAuthentication no #是否允许支持基于口令的认证 11.#UseDNS no #是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no 12.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接 13.AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录
实验四:公钥验证 免密登陆
1.Client将自己的公钥存放在Server上,追加在文件authorized_keys中。 2.Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。 3.Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。 4.Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。 5.Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
此作业以发布在csdn第一次作业里面!
第四章 web服务器
(www http apache nginx),今天主讲nginx
第一节
DNS:对域名进行解析,查询对应的地址
1.1 web服务器简介
www是world wide web的缩写,也就是全球信息广播的意思
1.2.网址及HTTP简介
web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。
URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>
浏览器常支持的协议有:http、https、ftp等。
主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
端口号(port):http为80,https为443 (IANA:互联网数字分配机构)
0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听)
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
41952-60000:客户端程序随机使用的端口,动态端口,或私有端口
1.3.http请求方法:
在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。
状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
状态码范围 作用描述 100 - 199 用于指定客户端相应的某些动作 200 - 299 用于表示请求成功 300 - 399 用于己经移动的文件,并且常被包含在定位头信息中指定新的地址系信息 400 - 499 用于指出客户端的错误 500 - 599 用于指出服务端的错误
常用状态码查询:常用的http状态码查询大全 - 知乎
1.4.常见状态代码、状态描述的说明如下:
200 OK:客户端请求成功
收到数据,但是数据有问题
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解 - 401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用 - 403 Forbidden:服务器收到请求,但是拒绝提供服务 - 404 Not Found:请求资源不存在,举个例子:输入了错误的URL服务器内部的问题
- 500 Internal Server Error:服务器发生不可预期的错误 - 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
1.5.http协议请求的工作流程
HTTP默认端口80和8080
(1)终端客户在web浏览器地址栏输入访问地址域名售卖 (2)web浏览器请求DNS服务器把域名www.ceshi.com解析成web服务器的IP地址 (3)web浏览器将端口号(默认是80)从访问地址(URL)中解析出来 (4)web浏览器通过解析后的ip地址及端口号与web服务器之间建立一条TCP连接 (5)建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文 (6)web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。 (7)web服务器关闭HTTP连接,关闭TCP连接,web浏览器显示访问的网站内容到屏幕上。
第二节 web服务器的类型
2.1 静态页面和动态网页
静态页面:直接通过磁盘去获取信息 动态网页:
2.2静态页面资源特征
1. 处理文件类型:如.html、jpg、.gif、.mp4、.swf、.avi、.wmv、.flv等- 2. 地址中不含有问号"?"或&等特殊符号。 3. 保存在网站服务器文件系统上的,是实实在在保存在服务器上的文件实体 4. 页内容是固定不变的,因此,容易被搜索引擎收录 5. 网页页面交互性交差,因为不能与数据库配合 6. 网页程序在用户浏览器端解析,当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析)优势:
1. 访问的效率比较高 2. 网页内容是固定不变的,因此,容易被搜索引擎收录 3. 网页程序在用户浏览器端解析,当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析)缺点:
1. 网页页面交互性交差,因为不能与数据库配合 2. 保存在网站服务器文件系统上的,是实实在在保存在服务器上的文件实体
2.3动态网页资源特点
1. 网觅扩展名后缀常见为:.asp、.aspx、.php、.js、.do、.cgi 2. 网页页面交互性强,可以与数据库配合 3. 地址中含有问号"?"或 & 等特殊符号 4. 不便于被搜索引擎收录优势
客户端与服务端交互能力强**缺点
1.访问的效率比较低 2.不便于被搜索引擎收录
2.4 nginx的搭建方式:LAMP 、LNMP
2.5 web服务器基本配置
防火墙和关闭 selinux(Security-Enhanced Linux)防火墙。 systemctl stop firewalld 和 setenforce 0 最后查看一下防火墙是否关闭 systemctl status firewalld 1.下载nginx [root@server]# yum install nginx -y 2.开启服务 [root@server]# systemctl start nginx 3.查找uginx的配置文件 [root@server]# rpm -ql nginx(找.conf) 4.编辑 [root@server]# vim /etc/nginx/nginx.conf #nginx服务配置文件nginx.conf的结构 #############全局配置(无{}标志)############ user nginx; #进程所属用户 worker_processes auto; #线程数量CPU核心数,(双核4线程,可以设置为4) error_log /var/log/nginx/error.log; #错误日志文件路径 pid /run/nginx.pid; #nginx pid文件位置 include /usr/share/nginx/modules/*.conf; #导入功能模块配置文件 ####################################################### ##################性能配置(有{}标志)############ events { worker_connections 1024; #tcp连接数 } ######################################################## ##################http模块配置(有{}标志)############ http { #http区块开始 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 /var/log/nginx/access.log main; #访问日志文件位置 (不需要管以下这个) sendfile on; #开启高效文件传输 tcp_nopush on; #性能优化参数 tcp_nodelay on; #性能优化参数 keepalive_timeout 65; #持久连接或超时时间 types_hash_max_size 4096; #性能优化参数 include /etc/nginx/mime.types; #可解析的静态资源类型 default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; #加载子配置文件 server { #server区块开始,就相当于一个虚拟主机 listen 80; listen [::]:80; server_name _; #服务名 root /usr/share/nginx/html; #主页存放路径 include /etc/nginx/default.d/*.conf; #子配置文件路径 error_page 404 /404.html; #404错误的返回页面 location = /404.html { #location 定义用户请求的uri,并返回相应的资源文件 } error_page 500 502 503 504 /50x.html; #5xx状态返回的页面 location = /50x.html { } } }
补充:
看nginx是否在运行 [root@server]# ps -aux | grep nginx 总结:结束进程,可以stop该进程,也可以rm这个进程文件 (这里以nginx.pid举例) [root@server]# kill -9 1991或者 [root@server]# rm /run/nginx.pid
index.html是默认的,可以不写;
如果存在问题的话,它会显示40.x什么···
2.6 自定义一个欢迎界面
1.自己创建一个文件
root /usr/share/nginx/html; #主页存放路径 [root@server html]# vim index.htm 注意:要在主页存放路径去创建文件
案例一:多ip访问多网站
1.通过nmtui连接网卡图形界面,实现网络配置;
ipv4
选择为manul,然后添show,添加地址,注意网段范围!!!
网关一般为xxx.xxx.xx.2
最后点ok!
[root@node1 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.81.129/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.81.2 connection.autoconnect yes [root@node1 ~]# nmcli connection modify ens33 +ipv4.addresses 192.168.81.130/24 [root@node1 ~]# nmcli connection up ens33 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) [root@node1 ~]# systemctl stop firewalld [root@node1 ~]# setenforce 0 [root@node1 ~]# cat /etc/nginx/conf.d/test_ip.conf server { listen 192.168.10.132:80; root /www/ip/132; location / { #配置/==/www/ip/100下的资源文件 } } 注意:每条语句后面都有一个分号;
2.将多个ip写入进去
在加载配置文件里面写入ip,建议专门拿个文件写,避免后面又错,可以直接删掉,对主文件不会有任何影响 /etc/nginx/conf.d/*.conf; #加载子配置文件 在操作之前,需要关闭防火墙unix的规则 并安装服务程序 1.编辑 [root@localhost ~]# vim /etc/nginx/conf.d/test_ip.conf 注意:在子文件里面创建文件装要写入的内容,要以.conf结尾!!! server { listen 192.168.81.132:80; root /www/ip/132; location / { index index.html; } } server { listen 192.168.81.129:80; root /www/ip/129; location / { index index.html; } } 2.根据配置,需要创建自定义文件 创建多级目录,需要加上-pv [root@localhost ~]# mkdir /www/ip/{132,129} -pv 我这里再写上一个测试内容看看: [root@localhost ~]# echo this is 132 > /www/ip/132/index.html [root@localhost ~]# echo this is 129 > /www/ip/129/index.html 如果想把两个写到不同的页面,将其中一个指定为超链接 [root@localhost ~]# cd /www/ip/132 [root@localhost 132]# echo this is two page > 2.html [localhost 132]# echo this is one page > 1.html3.重启一下 [root@localhost ~]# systemctl restart nginx 注意:如果重启不成功,说明写入的有问题,根据提示修改问题! 这种很好排查出问题! 4.客户端连接测试 可以在window里面测试也可以用url图形界面 格式:url http://(ip)
如果重启不了,怎么排查问题勒?
1.systemctl status nginx 2.journalctl -xeu nginx.service
2.7 多端口访问网站
[root@localhost ~]# vim /etc/nginx/nginx.conf server { listen 192.168.10.129:9999; root /www/port/9999; location / { } } server { listen 192.168.81.132:8888; root /www/port/8888; location / { } } [root@node1 ~]# systemctl restart nginx [root@node1 ~]# echo 8888 > /www/port/8888/index.html [root@node1 ~]# echo 9999 > /www/port/9999/index.html [root@localhost conf.d]# curl http://192.168.81.132:8888 this is 8888
2.8 多域名访问网址
[root@node1 ~]# cat /etc/nginx/conf.d/test_name.conf server { listen 192.168.10.129:80; root /www/name/node1; server_name www.node1.com; location / { } } server { listen 192.168.10.130:80; root /www/name/node2; server_name www.node2.com; location / { } } [root@node1 ~]# vim /etc/hosts [root@node1 ~]# mkdir -pv /www/name/{node1,node2} mkdir: created directory '/www/name' mkdir: created directory '/www/name/node1' mkdir: created directory '/www/name/node2' [root@node1 ~]# echo node1 > /www/name/node1/index.html [root@node1 ~]# echo node2 > /www/name/node2/index.html [root@node1 ~]# cat /etc/hosts 192.168.10.129 www.node1.com 192.168.10.130 www.node2.com [root@node1 ~]# systemctl restart nginx [root@node1 ~]# curl www.node1.com node1
注意:域名去访问网站的时候,是需要地址解析的;可以自己去添加;notepad++不免费
客户端主机 --- Windows ---- system32 --- dirvers--- etc ----- hosts ----- 然后添加主机和解析的结果
2.9:虚拟目录和用户控制
alias --- 别名 格式:alias kankan = cat[root@node1 ~]# cat /etc/nginx/conf.d/test_alias.conf server { listen 192.168.10.129:80; root /www/ip/129; location /real { alias /openlab/real/; #apache==alias /www/ip/129/real /openlab/real; } } [root@node1 ~]# mkdir /openlab/real -pv [root@node1 ~]# echo this is real > /openlab/real/index.html [root@node1 ~]# systemctl restart nginx.service [root@node1 ~]# curl http://192.168.10.129/real/ this is real ############用户认证########### [root@node1 ~]# cat /etc/nginx/conf.d/test_alias.conf server { listen 192.168.10.129:80; root /www/ip/129; location /real { ##########很重要####### alias /openlab/real/; auth_basic on; auth_basic_user_file /etc/nginx/users; ###################### } } [root@node1 ~]# htpasswd -c /etc/nginx/users tom New password: Re-type new password: Adding password for user tom [root@node1 ~]# systemctl restart nginx [root@node1 ~]# curl 192.168.10.129/real/ -u tom Enter host password for user 'tom': this is real
想要安装某软件
2.10 https
1.简介
HTTP协议以明文方式发送内容,不提供任何方式的数据加密; 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS; HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。HTTPS并不是一个新协议,而是HTTP+SSL(Secure Sockets Layer --- 安全套接层)(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。 SSL协议分为两层: - SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。 - SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 SSL协议提供的服务: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器 2)加密数据以防止数据中途被窃取 3)维护数据的完整性,确保数据在传输过程中不被改变
应用(http) 应用(https) TCP SSL IP TCP XXX IP
2.https协议加密所使用的算法
2.1 Hash算法常用在不可还原的密码存储、信息完整性校验等 常见的HASH算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMACSHA1。 2.2 共享密钥加密(对称密钥加密):加密和解密使用相同密钥。 对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES。 2.3公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。 常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
3.TLS完整的通信流程
第一阶:段客户端端申请建立https连接
第二阶段:客户端和服务器确认加密版本,加密套件
第三阶段:证书发送验证 (客户端验证证书取出公钥,用公钥加密生成的对称秘钥发送个服务器通知改变加密信息传递)
第四阶段:服务收到消息,用私钥解密取,确认对称秘钥通知客户端ssl通道建立完成
第五阶段:客户端和服务端可以通过加密通道开始数据通信
第六阶段:客户端断开连接
#key是私钥文件 #crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息 (第一种) [root@localhost certs]# make jiami.crt (第二种) #openssl req -newkey rsa:4096 -nodes -sha256 -keyout haha.key -x509 -days 365 -out haha.crt [root@www certs]# openssl genrsa -aes128 2048 > openlab.key (第三种) #openssl req -utf8 -new -key openlab.key -x509 -days 365 -out openlab.crt