HCIP中级部分
一、http服务常规原理https连接服务器用的是非对称密钥,数据安全使用对称加密
trace查看真实访问者的IP地址,查看原始请求IP,不会看代理IP
状态码200 OK301 和302跳转302响应报文location指明资源临时新位置304 从本地缓存读401需要账号密码认证才可以访问403 没授权(禁止 访问)404 资源被删除500 服务器配置问题
web模型4个1、单进程IO模型,一个进行一个http请求,不适合高并发2、多进程IO模型,一个进行一个http请求,可以启多个进程3、复用IO模型,单个进程进行复用,一个进程使用多个线程,一个线程处理一个http请求4、复用多进程IO模型,通过事件机制保证高并发的长连接(linux内核特性epool)
apache工作模型 1、perfork多进程IO 模型,不支持高并发,最大每秒支持32个进程,比较安全只会用apache用户进程2、worker多线程IO模型,不适合长连接多并发场景3、event异步IO事件模型(复用模型),默认是这种,监听接收线程和工作线程分开工作,需要2.6内核以上才支持(默认php不支持这个模型,支持perfork模型)。
调以上工作模型:/etc/httpd/conf.modules.d/00-mpm.conf把对应的那行注销隐藏或开启重启服务就行了
测试服务器压力 ab -n 10 -c 10 http://192.168.168.135/index.html
httpd -V查看模型用的哪一种
二、配置文件解释apache配置文件/etc/httpd下conf主配置文件目录conf/httpd.conf主配置文件conf.d目录是扩展配置目录,配置多虚拟主机用的conf.moudles.d功能模块配置目录,放的启动模块配置文件logs软链接到/var/log/httpd/下日志文件modules链接到/usr/lib64/httpd/modules功能模拟库位置run链接到/run/httpd 是apache运行进程状态文件state链接到/var/lib/httpd 有错误时间记录,一般为空
三、Apache全局配置文件详解 cat /etc/httpd/conf/httpd.conf
httpd -t 测试配置文件语法有没有错误
grep -vE ‘#|^$’ /etc/httpd/conf/httpd.conf过滤掉空行和注释行
ServerRoot “/etc/httpd” apache服务配置的根目录
Listen 80 apache监听的默认端口,可以监听多个端口,写多个Listen
Listen 172.16.0.131:80apache可以监听在指定的接口或者是IP上(openEuler有些端口不用关selint也可以访问)
改监听端口显示是ipv6:80问题,是内核自动转的,其实是监听ipv4,如果要改就在sysctl下改,把net.ipv6.binv6only=0改成1就会显示ipv4了或者直接在配置文件中Listern 1.1.1.1:80这样指定地址+接口再看就可以是ipv4 了
Include conf.modules.d/*.conf 加载apache的核心模块以及第三方模块(扩展模块)
User apache 工作进程绑定的用户名 可以指定普通用户来运行该进程,但指定的用户要有/var/www/html文件读取有权限Group apache 工作进程绑定的用户组
ServerAdmin root@localhost 管理员邮箱 该邮箱在服务器出错时显 500以上的错误,可以改掉它
<Directory /> 配置禁止访问 / 根目录 (目录的访问控制) AllowOverride none 开启的访问参数 Require all denied 禁止所有的访问</Directory>
DocumentRoot “/var/www/html” 网站的发布目录 也就是网页文件存放的位置,如果配置指定的目录,访问被禁止,则需要允许该目录被访问,但需要下面的选项配合允许才可以<Directory “/var/www”>AllowOverride NoneRequire all granted</Directory>
<IfModule dir_module> 目录下默认的首页文件 DirectoryIndex index.html index.php index.jsp 也就是访问一个目录时默认读取目录下的 index.html </IfModule>
<Files “.ht*”> 文件的访问控制 Require all denied 禁止 访问网站目录下以.ht开头的隐藏文件</Files>
在/var/www/html下加个.htaccess文件后,网站访问要认证功能vim .htaccessAuthType BasicAuthName testAutheUserFile /opt/pass1Require user zhangsan
ErrorLog “logs/error_log” apache的错误日志存放的位置
LogLevel warn 警告 debug 更加详细的日志
<IfModule log_config_module> 定义日志的格式 LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined LogFormat “%h %l %u %t “%r” %>s %b” common<IfModule logio_module> LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i” %I %O” combinedio </IfModule> CustomLog “logs/access_log” combined</IfModule>
<IfModule alias_module> 定义的别名目录 ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”</IfModule>
<IfModule mime_module> 定义了apache支持的文件类型 TypesConfig /etc/mime.types //查看该文件中支持的类型 AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddOutputFilter INCLUDES .shtml</IfModule>vim /etc/mime.types中文件类型说明MIME 会将资源打上特定的tag 也就是告诉浏览器这是什么类型的资源
AddDefaultCharset UTF-8 网站默认字符集 字符处理的方式UTF-8 通用的国标码 gb2312 支持中文 可以在vim 中使用:set fileencoding=gb2312 修改文本的编码方式 当网站程序(网页文件)和服务器支持的编码方式不一致时 则出现乱码
<IfModule mime_magic_module> MIMEMagicFile conf/magic 扩展的mime的类型 ,支持二进制文件,或者是一些应用的程序的文件类型</IfModule>
IncludeOptional conf.d/*.conf 默认加载虚拟主机的配置文件 就是一个一个网站,通常每一个配置文件就是一个网站
/usr/lib64/httpd/modules/ Apache的动态功能模块 ,支持库文件以点.so 结尾
httpd -M 查看apache加载的模块 ,取消模块加载,则需要在 conf.modules.d 中给相应的模块进行注释,即可取消加载
apache高级配置长连接等配置位置vim /usr/share/doc/httpd/httpd-default.conf
可以在主配置文件中关闭vim /etc/httpd/conf/httpd.confKeepAlive On
1. apache的长连接 响应标头里面看到keep-alive,就是开了长连接方式.从http1.1开始引入是为了让下一次的socket通信复用之前创建的连接,从而,减少连接的创建和销毁的系统开销。保持连接,会让某个进程或者线程一直处于等待状态,即使没有数据过来
apache 默认开启长连接 KeepAlive On|Off 开启或者关闭长连接 apache和nginx是默认开启的
KeepAliveTimeout 5 超时时间,当服务器完成一次httpd请求后下一次请求超时的时间(也就是第一次连接后等待5秒,5秒内没有新的请求则关闭连接)
MaxKeepAliveRequests 100 每一个连接默认处理100个请求在实际的生产中可以根据ab的压测结果来进行配置,推荐的值的是 KeepAliveTimeout 10 -15 MaxKeepAliveRequests 200
2. 配置资源的访问策略2.1 静态资源的配置指的是配置文件和目录的访问策略不要放在根目录,默认根目录不生效,因为conf.d/welcome.conf文件配置给限制了
目录访问策略<directory “目录的路径”> 目录策略配置 </directory>
文件访问策略<files “文件的路径”> 文件的策略配置</files>
目录和文件的中的具体配置项https://httpd.apache.org/docs/2.4/mod/core.html#options这个里面可以看具体哪一项是什么控制
Options: 配置目录的选项 索引、链接等选项: options Indexes FollowSymLinksIndexes: 如果在目录中找不到默认的首页则索引当前目录
FollowSymLinks: 允许apache使用软链接Options All 启用所有的配置选项Options None 禁用所有的配置选项
AllowOverride: 配置目录中的.htaccess访问文件是否生效选项: All 该文件中的所有指令都生效None 该文件中的所有指定都不生效(默认为该项)Authconfig 默认配置生效,其他指令都无效
3、访问控制:也是在这个项里写<Directory “/data/euler”>基于客户端IP地址的访问控制 Require all granted 允许所有人进行访问Require all denied 禁止所有人进行访问Require not ip 192.168.1.1 例外 not ip 和 granted 进行连用 表示黑名单</Directory>
<Directory “/data/euler”><RequireAll> 表示Require中所有的指令同时生效Require all granted 允许所有人访问Require not ip 192.168.1.1 将该IP排除在外</RequireALL></Directory>
</RequireAll>RequireAll: 在该段落内的require指令需要全部满足,也就是逻辑与的关系RequireAny: 在该段落内的require指令只需要满足其中任意一个即可使用技巧: 如果require的指令彼此之前是互相冲突的,使用All,如果彼此之前互相不影响,则使用AnyRequire ip 192.168.1.1 白名单时 不需要 先拒绝可以直接配置(因为apache默认的策略是拒绝的)Require host example.com 允许特定的主机进行访问(所指定的主机名是服务器端可以正常解析到地址的,才能够生效)
4、基于用户认证的访问控制:在认证的目录路径中进行添加<Directory “/data/euler”> AuthType Basic AuthName openEuler AuthUserFile /opt/pass1 require user zhangsan</Directory>
AuthType Basic 基础认证AuthName 认证提示的信息AuthUserFile 认证的用户和密码存储的文件 htpasswd -c /opt/pass1 zhangsan 生成文件require user zhangsan 可以认证的用户
基于密文的认证方式: 摘要认证AuthType DigestAuthName 认证提示的信息(在摘要认证中被称为域)AuthUserFile 认证的用户和密码存储的文件htdigest -c /opt/pass2 openEuler lisi 生成摘要文件require user zhangsan 可以认证的用户
四、Apache的数据压缩:在服务器端将较大的资源文件发送到客户端时对内容进行压缩后传输主配置文件中httpd.confSetOutputFilter DEFLATE 开启压缩,默认开启
html css js这三类文件一般都是要压缩的
开启压缩是启用压缩传输的最基础的要求压缩传输的过程: 客户端浏览器发送请求是在请求头中加上Accept-Encoding告诉服务器端自己所支持的解压的方式默认使用的gzip,服务器端根据浏览器的请求头信息进行压缩后,通过Content-Encoding来告诉浏览器数据压缩的方式,浏览器根据指定的方式进行解压
AddOutputFilterByType DEFLATE text/plain 指定要压缩的文件类型AddOutputFilterByType DEFLATE application/zip zip压缩文件AddOutputFilterByType DEFLATE application/octet-stream 二进制流文件AddOutputFilterByType DEFLATE text/html html网页文件AddOutputFilterByType DEFLATE text/css css 样式表文件AddOutputFilterByType DEFLATE application/javascript js类型文件AddOutputFilterByType DEFLATE application/mp4 压缩MP4 DeflateCompressionLevel 9 压缩的级别 0 – 9 数字越大压缩效果越好
什么样的场景下要禁止数据压缩:1. 早期的浏览器的兼容问题,不支持压缩选项,需要忽略特定的浏览器的版本2. 服务器的特别大的文件进行压缩,会消耗大量的CPU和内存,例如ISO、大型的视频文件、数据文件…
禁止压缩的两个方式:禁止特定的浏览器进行压缩edge chrome 现代化浏览器中在用户访问资源时使用用户代理来防止部分网站对浏览器的限制 BrowserMatch ^Mozilla/4.0[678] no-gzip 限制火狐4.06 4.07 4.08 进行压缩
禁止特定的资源后缀进行压缩SetEnvIfNoCase Request_URI .(mp4|mov|avi)$ no-gzip.iso .mp4 Apache的日志配置access_log 服务器的正确日志,所有用户访问的请求都记录在此error_log 服务器的错误日志,所有服务的报错和限制都记录在此
五、日志的格式: 172.16.0.1 – – [03/Mar/2024:15:27:44 +0800] “GET /test.mp4 HTTP/1.1” 304 – “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46”
定义日志输出格式httpd.conf主配置件中改LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined
%h 客户端IP地址 172.16.0.1 %l 远程登录名 (如果是 – 该项没有数据)%u 已认证的用户名 – %t 时间戳 [03/Mar/2024:15:27:44 +0800]%r http请求的方法+url+版本号 GET /test.mp4 http 1.1%>s 响应状态码 304%b 资源的字节数 %{Referer}i 客户端的来路 – %{User-agent}i 用户的浏览器信息(代理信息) combined 日志的名称
自定义日志,(文件的路径+日志格式的名称)CustomLog /var/log/data.log httpd_test
六、Apache 配置HTTPS为域名hcie.openeuler.org.cn 配置ssl访问1. 安装apache的ssl的模块yum install mod_ssl -y
看文件生成没有 rpm -ql mod_ssl
2.申请证书在 zerossl.com中申请单域名证书 90天有效Let’s Encrypt R3的证书 该证书支持通配符
3.配置证书vim /etc/httpd/conf.d/ssl.confSSLCACertificateFile /opt/ssl/ca_bundle.crt 证书链(可以不配置,在浏览器中有自带)SSLCertificateKeyFile /opt/ssl/private.key 服务器的私钥文件SSLCertificateFile /opt/ssl/certificate.crt 服务器的证书(签名后的公钥)SSLEngine on 开启https的引擎Listen 443 https 改配置文件监听的是443 端口
4、强制使用https访问,用http也会自动跳转至https访问方法 希望仅开启https的访问,而不要让用户访问http ,配置URL重写规则,将http的访问重定向到https 在 httpd.conf 中也就是80端口的配置文件中进行配置RewriteEngine on 开启重定向规则RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
七、Apache的虚拟主机所谓的虚拟主机就是在一台服务器上实现多个网站的访问,在一台服务器上通过虚拟主机部署多个网站,并且每个网站都是独立的虚拟主机的配置:vim /etc/httpd/conf.d/*.conf 在该目录下所有以点.conf结尾的文件都是虚拟主机
apache实现虚拟主机的方式有三种:1. 是基于端口的虚拟主机vim /etc/httpd/conf.d/*.conf <VirtualHost *:81>DocumentRoot /var/www/html/site1</VirtualHost>Listen 81 加上监听端口
*号可以具体指定本机哪个IP地址
2. 是基于IP的虚拟主机vim /etc/httpd/conf.d/*.conf <VirtualHost 172.16.0.100:80>ServerName site3.example.comDocumentRoot /var/www/html/site3</VirtualHost>
<VirtualHost 172.16.0.200:80>ServerName site3.example.comDocumentRoot /var/www/html/site4</VirtualHost>
3. 是基于名称的虚拟主机所谓的名称指的就是通过域名来进行访问vim /etc/httpd/conf.d/*.conf <VirtualHost *:80>ServerName site3.example.comDocumentRoot /var/www/html/site3</VirtualHost>
<VirtualHost *:80>ServerName site4.example.comDocumentRoot /var/www/html/site4</VirtualHost>
注意:如果在httpd.conf中 已经指定了 Listen 80,没有指定具体的IP端口则所有IP都监听80,则不用配置,如果指定的是192.168.1.1:80 具体IP的80端口则,虚拟主机中需要配置 Listen 172.16.0.100:80 监听具体IP的80端口
七、Nginx的安装与配置1、Master主进程,主配置控制 worker工作进程,异步IO模型,支持长连接,也可以接收新的进程
stream模块可以实现端口映射
LB模拟做负载均衡和反向代理是起的
2、安装yum install nginx (不支持热升级) 源码包安装支持热升级
nginx -t校验配置文件nginx -v看版本nginx 启动nginx -s stop停止nging -s quit 优雅停止nginx -s load 启动
/etc/nginx/nginx.conf 全局配置
nginx.conf.default各种应用参考配置文件
conf.d/下面放虚拟目录
/usr/share/nginx/html/默认网站目录
/var/log/nginx日志目录
3、Nginx的配置文件详解:/etc/nginx/nginx.conf
user nginx; 运行的用户
worker_processes auto; 如果是auto则与CPU和核心数成正比,指定工作的进程数
error_log /var/log/nginx/error.log; 指定错误的日志
pid /run/nginx.pid; master 进程的ID
include /usr/share/nginx/modules/*.conf; nginx加载的模块配置文件
events 指定工作模式 {worker_connections 1024; 指定单个进程的连接数}
HTTP模块的配置log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ”$status $body_bytes_sent “$http_referer” ””$http_user_agent” “$http_x_forwarded_for”‘;log_format 日志的格式
access_log /var/log/nginx/access.log main; sendfile on; 高效文件传输的(直接从磁盘上读取文件发送给用户,而不是先读到内存再从内存中发送)tcp_nopush on; 立即回应TCP的请求tcp_nodelay on; 对于小数据包直接回应keepalive_timeout 65; 开启长连接的超时 65s types_hash_max_size 4096; 记录Nginx的哈希散列的大小include /etc/nginx/mime.types; 可以识别的文件类型default_type application/octet-stream; 可以直接处理二进制的流文件,也就是二进制的文件可以直接下载
include /etc/nginx/conf.d/*.conf 虚拟主机的配置目录server { 表示一个完整的虚拟主机的配置 listen 80 监听的端口 server_name 主机名(域名) root 网站的根目录 include /etc/nginx/default.d/*.conf; 定义虚拟主机开启的高阶特性 error_page 404 /404.html; 返回404错误的地址(自定义错误页面) location = /40x.html { 路由规则(定义的策略) 策略的内容}
} error_page 500 502 503 504 /50x.html; 定义的错误码的返回页面
4、Nginx的数据压缩:gzip on; 开启压缩gzip_comp_level 9; 压缩的比例是最大为9 范围 1-9gzip_min_length 1; 忽略小于该大小的文件不压缩,单位是字节gzip_types text_plain text/css application/octet-stream; 压缩的文件类型 (mime.type中查看)
5、虚拟主机的配置:基于端口的虚拟主机server {listen 81;root /usr/share/nginx/html/site1;}server {listen 82;root /usr/share/nginx/html/site2;}基于IP的虚拟主机server {listen 172.18.0.134:80;root /usr/share/nginx/html/site1;}server {listen 172.18.0.100:80;root /usr/share/nginx/html/site2;}基于名称的虚拟主机server {listen 172.18.0.100:80;server_name example.com;root /usr/share/nginx/html/site1;}server {listen 172.18.0.100:80;server_name test.com;root /usr/share/nginx/html/site2;}
6、location 的规则:location可以实现的功能:•重定向:可以使用 return 或 rewrite 指令进行请求重定向。•反向代理设置:可以使用 proxy_set_header 来设置请求头信息。•负载均衡设置:可以使用 proxy_pass 将请求分发到负载均衡的后端服务器。•FastCGI 设置:可以使用 fastcgi_pass 指令将请求转发给 FastCGI 服务器处理。•静态文件处理:可以使用 try_files 指令来尝试不同的文件路径来处理静态文件请求。•日志设置:可以使用 access_log 和 error_log 指令来配置访问日志和错误日志的记录路径。•Gzip 压缩:可以使用 gzip 相关指令来配置响应内容的压缩
= 开头表示精确匹配location = /name.html { 精确匹配 必须是name.html return 403;}^~ 开头表示uri以某个常规字符串开头,不是正则匹配location ^~ /pass {return 403;}~ 开头表示区分大小写的正则匹配location ~ /pass {return 403;}
~* 开头表示不区分大小写的正则匹配location ~*/pass {return 403;}/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到/ 通配符 路径中的所有资源都可以匹配到 location /*.php {网站的全局配置中}在location 中指定路径的方式使用root指定 表示相对路径 指的是/usr/share/nginx + location的root + location的路径server {listen 172.18.0.134:81;server_name example.com;root /usr/share/nginx/html/site1;location /bbs {root test/euler;autoindex on;}}172.18.0.134:81/bbs ——> /usr/share/nginx/test/euler/bbs使用alias 指定 表示绝对路径location /bbs {alias /usr/share/nginx/test/euler/bbs;autoindex on; 开启索引return 404; 返回一个指定的错误}在location中指定 /bbs 表示的是文件 /bbs/ 表示的是目录 在location中alias会覆盖server段落的root example.com/bbs – /usr/share/nginx/test/euler/bbs;
7、Https的配置ssl_certificate “/etc/pki/nginx/server.crt”; 网站的证书ssl_certificate_key “/etc/pki/nginx/private/server.key”; 网站的私钥文件
证书需要找权威的CA进行申请,如果是自己试验,可以使用openssl进行自签名证书openssl -x 509 生成CA的公私钥生成CSR的证书请求文件 同时生成私钥使用私钥给CSR签名并生成证书
8、Nginx 热升级:所谓的热升级指的是可以在nginx工作的状态下对nginx的版本进行升级,并且不影响用户的访问原理:在于Nginx的程序支持 USR2的信号(该信号可以让程序重新加载,而不用结束进程再重新启动),也就是在Nginx的新版和旧版能够同时在系统中响应服务,如果旧版的Nginx没有问题,则结束旧版程序,新版替代工作
下载低版本的Nginxwget ttps://nginx.org/download/nginx-1.22.1.tar.gz
编译安装tar xzf nginx-1.22.1.tar.gz 解压文件cd nginx-1.22.1 进入目录./configure –prefix=/usr/local/nginx 指定安装的路径make -j 2 使用两核进行预编译make installl 编译并安装
启动nginx./nginx
升级过程wget https://nginx.org/download/nginx-1.25.4.tar.gz 下载新版tar xzf nginx-1.25.4.tar.gzcd nginx-1.25.4./configure –prefix=/usr/local/nginx 预配置make -j 2 预编译 记住一定不要make install(会覆盖原来的配置文件和二进制文件) make install后会覆盖安装cp -a /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak 备份旧版本cp -a /opt/nginx-1.25.4/objs/nginx /usr/local/nginx/sbin/nginx -f 新版覆盖旧版本ps uax |grep nginx 查询master的PIDkill -s USR2 PID 此时 新版的Nginx自动运行访问测试新版的Nginx可用kill PID 结束旧版本的Nginx 升级完成
八、web架构
Nginx / Apache 都是默认提供html 超文本网页的访问,而无法提供动态应用程序
1、运行动态的应用程序2个方法:交给web服务器自身的模块来完成
交给第三方服务器来完成以apache为例 如果需要运行php ,有两个方式第一个方式通过php的模块使用apache来运行 (必须在prefork模式下)第二个方式交给php的服务器来进行处理(在event模式下),yum安装完默认是这种
现在运行的动态程序通常交给应用程序的后端进行处理CGI: 应用程序网关接口(简单理解就是个API的地址,PHP或python后台) CGI 的主要作用是允许 Web 服务器调用外部程序来处理客户端的请求,并将处理结果返回给客户端fast-cgi是cgi的增强版,支持长连接
2、实验 LAMP 实现 wordpress 企业门户网站 yum install httpdyum install mariadb-server yum install php
会自动在/etc/httpd/conf.d/下生成一个php.conf文件
systemctl start php-fpm php的服务进程,可以不用管,apache的默认方式: 在安装好php后,会在apache的虚拟主机目录中,生成一个php.conf的配置文件,在该配置文件中通过CGI调用后端的PHP服务器来进行php的处理,因为安装完成php后就会自动在conf.d/目录下自动产生php.conf文件,apache启动时就自动连带启动
在LAMP中配置Apache使用php的两种方式(常用第二种方法)1在perfork模式下使用apache自身来运行php——> 也就是通过web服务器所携带模块来运行2需要指定php的头部文件,也就是告诉apache这一类php的文件是什么类型(目常用这种)
第2种方法又分两种配置方法:配置php的后端服务器使用CGI来进行调用 ——> 通过第三方服务器来运行php配置php的CGI接口两种方法两种方法都要做的前置 步骤vim /etc/httpd/conf.d/php.conf主配置文件中配AddType text/html .php 添加php的文件类型DirectoryIndex index.php 首页文件名
<FileMath .(php|phar)$> #SetHandler application/x-httpd-php 注释掉这行</FileMatch>
第一种方法vim /etc/httpd/conf.d/php.conf主配置文件中<FilesMatch .(php|phar)$>SetHandler “proxy:unix:/run/php-fpm/www.sock|fcgi://localhost” //另一种写法和上面二选一</FilesMatch>
vim /etc/php-fpm.d/www.conflisten = /run/php-fpm/www.sock //起用,默认启用
第二种方法给php指定端口vim /etc/httpd/conf.d/php.conf主配置文件中<FilesMatch .(php|phar)$>setHandler “proxy:fcgi://127.0.0.1:9000” 该种方式需要php监听9000端口</FilesMatch>
vim /etc/php-fpm.d/www.conf注意掉listen = /run/php-fpm/www/sock 添加listen = 9000
安装wordpress下载网站的源码通常指的是一个CMS(内容管理)的系统wget https://cn.wordpress.org/latest-zh_CN.tar.gz
yum install httpd php php-fpm -ysudo yum install php-jsonyum install mariadb-server yum install php-mysqlidnf install php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium
让php支持apachevim /etc/httpd/conf.d/php.conf主配置文件中配AddType text/html .php 添加php的文件类型DirectoryIndex index.php 首页文件名
vim /etc/httpd/conf.d/php.conf主配置文件中<FilesMatch .(php|phar)$>SetHandler “proxy:unix:/run/php-fpm/www.sock|fcgi://localhost” </FilesMatch>
vim /etc/php-fpm.d/www.conflisten = /run/php-fpm/www.sock //起用,默认启用
<IfModule dir_module> DirectoryIndex index.html index.php</IfModule>
配置并安装CMS系统(记得关闭防火墙和SELinux)安装过程中需要配置数据库、配置权限、安装插件…
mysql_secure_installation初始化mysql设置MySQL的新密码并确认。本示例设置密码admin。输入Y并回车继续使用提供的密码。输入Y并回车移除匿名用户。设置是否允许远程连接MySQL。不需要远程连接时,输入Y并回车。需要远程连接时,输入N或其他任意非Y的按键,并回车。输入Y并回车删除test库以及对test库的访问权限。输入Y并回车重新加载授权表。
create database wordpress创建数据库
本教程中创建新用户xlc,新用户密码为admincreate user ‘xlc’@‘localhost’ identified by ‘admin’;
赋予用户对数据库wordpress的全部权限。grant all privileges on wordpress.* to ‘xlc’@‘localhost’;
使配置生效。flush privileges;
只需要解压出的wordpress文件夹下所有内容,放到/var/www/html/下
看下apache进程是哪个用户就设置为文件来哪个用户chown apache:apache -R /var/www/html/*
安装Discuz装包yum install httpd php php-fpm -ysudo yum install php-jsonyum install mariadb-server yum install php-mysqlidnf install php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium
让php支持apachevim /etc/httpd/conf.d/php.conf主配置文件中配AddType text/html .php 添加php的文件类型DirectoryIndex index.php 首页文件名
vim /etc/httpd/conf.d/php.conf主配置文件中<FilesMatch .(php|phar)$>SetHandler “proxy:unix:/run/php-fpm/www.sock|fcgi://localhost” </FilesMatch>
vim /etc/php-fpm.d/www.conflisten = /run/php-fpm/www.sock //起用,默认启用
mysql_secure_installation初始化mysql设置MySQL的新密码并确认。本示例设置密码admin。输入Y并回车继续使用提供的密码。输入Y并回车移除匿名用户。设置是否允许远程连接MySQL。不需要远程连接时,输入Y并回车。需要远程连接时,输入N或其他任意非Y的按键,并回车。输入Y并回车删除test库以及对test库的访问权限。输入Y并回车重新加载授权表。
create database wordpress创建数据库
本教程中创建新用户user,新用户密码为admincreate user ‘user’@‘localhost’ identified by ‘admin’;
赋予用户对数据库wordpress的全部权限。grant all privileges on wordpress.* to ‘user’@‘localhost’;
使配置生效。flush privileges;
下载discuz的论坛源码wget https://gitee.com/Discuz/DiscuzX/attach_files/1621557/download
只需要解压出的upload文件夹所有内容,其它不要,放到/var/www/html/下
看下apache进程是哪个用户就设置为文件来哪个用户chown apache:apache -R /var/www/html/*
安装cms
九、DNS部分
DNS是一个什么架构??DNS 是一个典型的C/S架构也就是存在DNS的客户端和DNS的服务端,用户所使用的计算机就是DNS的客户端,客户端向服务器端发起请求要求服务端提供某一个域名的IP地址就是寻求解析DNS 使用UDP和TCP 53端口进行通信
DNS的层级结构:根域: .用点表示根域全求只有13台ip4+13台ipv6;互联网上所有的记录解析都是依靠根域来维持的,负责顶级域名的解析(也就是当出现example.com 域名需要解析时,根域返回一组.com服务器的地址,由.com的服务器来进行解析)
顶级域:.com .cn.org.net …… 顶级域负责找到域名的权威域com 通用商业域名cn 国家域名/地区域名org 表示非营利性组织net 网络公司edu 教育gov 政府…….
权威域: 权威域 是最终负责将域名解析成IP的节点
DNS的解析方式:DNS将域名解析成IP ——> 正向解析DNS将IP解析成域名 ——> 反向解析
解析两种方式1、递归查询:zhangsan.lab0.cn —本地/etc/hosts解析— 本地DNS –上游DNS– 权威DNS— 用户所谓的递归查询,指的是客户端找指定的DNS查询记录,DNS直接返回记录,对于客户端而言,整个记录是DNS为其提供为其查询到的
2、迭代查询:zhangsan.lab0.cn –本地DNS —返回.cn DNS —用户查询.cn DNS —返回lab0.cn DNS —用户查询 lab0.cn DNS—返回 zhangsan.lab0.cn IP 地址
现在的DNS查询结合了递归和迭代,一次递归多次迭代;一次递归指的是 客户端向本地DNS发起解析是递归
反向解析记录的使用场景: 用在防止垃圾邮件 反向解析是将IP解析成域名 因此ARPA 称为反向记录,如果不需要用到反向记录是可以不用配置的
在LINUX中通常使用bind来作为DNS的服务端程序,BIND可以提供高效的解析服务以 example.com 这个域为例进行DNS解析
1. 安装bind yum install bind -ysystemctl enable –now named
2. 配置bind配置文件:/etc/named.conf 主配置文件listen-on port 53 { any; }; 允许监听所有IP的端口allow-query { any; }; 允许所有人查询的地址include “/etc/named.rfc1912.zones”; 引入区域文件(正向和反向文件都写在这里面)include “/etc/named.root.key”; 根域的列表
/var/named 区域的配置文件(可以使用bind-chroot来保护区域文件 )bind-chroot 就是将bind运行的根目录锁定在/var/named/chroot 下
/var/named/slave 从DNS的目录 该目录中的区域文件都是从主服务器下载过来的
/var/named/named.ca 所有根服务器的列表 列表是可以更新的
https://www.iana.org/ 获取根域的地址包括镜像站
/var/log/named.log 如果该文件不存在则,查看message的日志
named-checkzone example.com example.com.zone域名 区域文件名
3. 配置正向解析vim /etc/named.rfs1912.zones 正向区域配置:zone “example.com” IN { type master; file “example.com.zone”;};
反向区域配置:zone “0.18.172.in-addr.arpa” IN { type master; file “0.18.172.zone”;};其中0.18.172 是反写的子网地址,最后一位主机位不用写
4.创建正向区域文件(上面主配置文件加完后这里还得创建正向解析文件)/var/named/named.empty 下向区域文件/var/named/named.loopbak 反向区域文件
/var/named/cp -a named.localhost example.com.zone用模块创建解析文件 ,所有的区域文件,不管是正向区域还是反向,named用户都必须可以读取该区域改成这样:第二行第二个@包含@往后改成:ns.example.com admin.exapmle.com. 后面admin开始是邮件A记录:要解析的服务器的ip地址NS 后面改成www.example.com.添加一行www A 192168.1.100要解析的服务器IP
named-checkconf 检查主配置文件是否存在错误
named-checkzone 检查区域配置文件是否存在错误
一个反向解析文件只能做一个IP解析,多个要创建多个反向文件
正向区域文件参数详解:TTL 表示缓存的时间SOA 表示该区域的起始记录,也就是该域为权威域 @ 第二行第二个@表示域名,要改成ns.+我们要解析的域名 0:表示版本号,供备从DNS服务器确定是否同步信息1D:表示从服务器向主服务器同步数据的间隔1H:表示从服务器向主服务器同步数据的重试间隔1W:表示从服务器判断主服务器是否失效的时间段,例如,1W表示如果从服务器在1周都无法和主服务器同步数据,则认为其已失效3H:无效域名缓存的时长,在此时间内,如果用户再次查询无效域名解析,服务器将直接返回无法解析的响应,不在进行查询
解析记录:A 记录 是将 域名解析成Ipv4地址 AAAA 解析成ipv6地址CNAME 解析成别名(CDN)MX 邮件交换记录txt 域名验证记录NS 将子域交给其他DNS进行解析CAA CA验证记录可以通过DSN区域视图,所谓的区域视图指的是可以将用户的不同来路,解析成不同的记录(商业化功能,bind可以实现)
DNS的客户端工具:nslookup 该工具来自于bind-utils nslookup www.example.com 查询反向和正向记录hosthost example.com
dig 用法:dig @DNS服务器(不设置默认就是本机) 域名 类型eg. dig @172.18.0.134 example.com MX
十、集群管理集群的分类所谓的集群,就是指使用一组计算机来完成某一个应用或者场景下的业务承载问题根据不同的使用场景,将集群分成三类1. LB的集群(Load Balance Cluster)负载均衡集群,用来将用户请求调度到不同的节点上,让整个集群内机器的性能处于一个相对平衡的状态
2.HA 高可靠集群(Highly Available Cluster)高可靠集群,重点用来保障业务的连续运行,通过心跳,浮动IP、资源锁等一系列方式保障在集群节点出现故障时,业务的持续稳定运行
3.HPC 高性能计算集群(High Performance Computing)高性能计算集群,指的是利用分布式节点来并行计算科学数据最终得到一个值
集群的典型代表:LB的集群: LVS(Linux Virtual Sever)是一款开源的四层(传输层)负载均衡软件LVS使用了Linux内核的模块特性,使用的是netfilter的框架Nginx LVS支持四层及七层负载,配置最简单,Nginx可以根据http的来源进行转发 Haproxy 同时提供四层和七层的负载均衡,最强大
HA的集群:keepalived 可以通过VRRP协议来实现浮动的IP漂移Heartbeat 用在集群节点之间进行心跳检测Pacemaker 通过和其他心跳插件集成来实现高可用(只能做集群资源的管理)
LVS的功能:数据包的IP转发修改数据包的目的mac封装IP隧道信息
nginx的功能:根据URL地址进行负载
HA的核心实现:浮动IP(弹性IP/VIP) 心跳网络fence机制防止脑裂双主的问题,一般用BMC卡
负载均衡集群LVS的概念:VIP: 浮动IP ——> 客户访问的业务IPDIP:LVS上访问真实服务器的接口IPRIP:业务服务器(真实服务器)的IP地址
LVS的架构:用户态管理程序: ipvsadm这个工具来管理lvs集群内核态数据包模块: ip_vs
LVS的安装:yum install ipvsadm -y
LVS的管理方式:ipvsadm的工具来进行管理,唯一的集群配置文件在/etc/sysconfig/ipvsadm-conf中保存如果启动ipvsadm的服务将会自动加载该配置文件
ipvsadm –help 查询选项
LVS的工作模式和调度算法一共有四种工作模式,十二种调度算法
NAT模式DR 直连路由模式TUN IP隧道模式FULL-Tun 全隧道模式(收费的)
LVS的配置:hostnamectl set-hostname lvsyum install bash-com* -yyum install ipvsadm -ynmcli connection modify ens33 ipv4.method manual ipv4.addresses 172.18.0.10/24 autoconnect yesnmcli connection modify ens37 ipv4.method manual ipv4.addresses 192.168.66.100/24 ipv4.gateway 192.168.66.254 ipv4.dns 114.114.114.114 autoconnect yessystemctl disable –now firewalldsysctl -w net.ipv4.ip_forward=1 临时开启IP转发内核参数 vi /etc/sysctl.conf 将其参数改为1 然后使用sysctl -p 刷新内核参数
配置集群的步骤:ipvsadm -A -t 192.168.66.100:80 -s rr 创建集群服务并指定调度算法为rripvsadm -a -t 192.168.66.100:80 -r 172.18.0.100 -mipvsadm -a -t 192.168.66.100:80 -r 172.18.0.200 -m向集群内添加真实服务器并指定工作模式为nat
十一、数据库yum install mariadb yum install mysql*
mariadb数据库装完配置文件在这vim /etc/my.cnf[mariadb]#绑定IPv4和3306端口bind-address = l0.0.0.0port = 3306#设置mysql的安装目录basedir=/db#设置mysql数据库的数据的存放目录datadir=/dbs#允许最大连接数max_connections=200
mysql_secure_installation初始化mysql设置MySQL的新密码并确认。本示例设置密码admin。输入Y并回车继续使用提供的密码。输入Y并回车移除匿名用户。设置是否允许远程连接MySQL。不需要远程连接时,输入Y并回车。需要远程连接时,输入N或其他任意非Y的按键,并回车。输入Y并回车删除test库以及对test库的访问权限。输入Y并回车重新加载授权表。
允许远程登陆update user set user.Host=’%’ where user.User=’root’;flush privileges;
mysql行数一般控制在100W条以内
创建数据库create database openEuler charset=utf8;
备份数据库1.备份全部数据库的数据和结构mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.备份全部数据库的结构(加 -d 参数)mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql3.备份全部数据库的数据(加 -t 参数)mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql4.备份单个数据库的数据和结构(,数据库名mydb)mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql5. 备份单个数据库的结构mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql6. 备份单个数据库的数据mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql7. 备份多个表的数据和结构(数据,结构的单独备份方法与上同)mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql8. 一次备份多个数据库mysqldump -uroot -p123456 –databases db1 db2 > /data/mysqlDump/mydb.sql
还原 MySQL 备份内容有两种方式还原,第一种是在 MySQL 命令行中,第二种是使用 SHELL 行完成还原1.在系统命令行中,输入如下实现还原:mysql -uroot -p123456 < /data/mysqlDump/mydb.sql2.在登录进入mysql系统中,通过source指令找到对应系统中的文件进行还原:mysql> source /data/mysqlDump/mydb.sql在 Linux中,通常使用BASH脚本对需要执行的内容进行编写,加上定时执行命令crontab实现日志自动化生成。以下代码功能就是针对mysql进行备份,配合crontab,实现备份的内容为近一个月(31天)内的每天的mysql数据库记录。
十二、NGINX调度算法 RR轮询、LC最少连接、ip hash源地址哈希、random随机指定、generic hash根据原始访问哪个服务器还返回那个算法。nginx默认使用轮询调度
Nginx1的配置:hostnamectl set-hostname nginx1yum install nginx -ynmcli connection modify ens33 ipv4.method manual ipv4.addresses 172.18.0.100/24 ipv4.gateway 172.18.0.10 autoconnect yes
nginx 负载均衡配置和反向代理同时存在/usr/share/nginx/modules/mod-stream.confupstream www.yeng.com{ server 192.168.1.1:81weight=5; server 192168.1.10:82 ; server 192.168.1.100:83 backup; server 192.168.1.20 max_connes 1000;}
server{ listen 8080; location / { proxy_pass http://www.yeng.com; //调用指定上面的定义的域名 }}
注意:真实服务器的网关一定要指向LVS的DIP地址
echo hello Nginx1 > /usr/share/nginx/html/index.htmlsystemctl enable –now nginx.servicesystemctl disable –now firewalld
反向代理配置vim /etc/nginx/nginx.conf
server { listenlisten 80; server_name _; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { proxy_pass http://172.16.1.100/; #只要http://本机IP :80端口就路转这个IP } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { }}
location和proxy是否以斜杠结尾,表示了完全不同的访问路径,正常写法就是两目录和IP都得有斜杠location/test/{proxy_passhttp://192.168.1.123/;}最终转发路径为:http://192.168.1.123/index.html
location /test/{proxy_pass http://192.168.1.123;},终转发路径为:http://192.168.1.123/test/index.html
location /test{proxy_pass http://192.168.1.123/;},最终转发路径为:http://192.168.1.123//index.html
location/test{proxy_passhttp://192.168.1.123;},最终转发路径为:http://192.168.1.123/test/index.html
nginx端口映射配置/ect/nginx/nginx.conf 放到最后面单独放,不要放到http里面stream {upstream tcp_test{ server 192168.1.10:22 ;}
server{ listen 9999; proxy_pass tcp_test; //调用指定上面的定义的域名 }}
十三、ansible1、openEuler可以直接安装yum install ansible
yum install epel-release其它系统要先装这个源
ansible 2.9 是最后一个企业稳定版,模块多ansible 2.10开始都是容器版ansible-core版,自带的模块少
ansible –version查看安装的位置及模块位置等重要信息
1、ansible配置文件默认配置文件在/etc/ansible/ansible.cfg整个配置文件一共有十个段落[defaults] 通用配置项[inventory] 主机清单配置项[privilege_escalation] 权限提升配置项[paramiko_connection] 旧版本paramiko连接插件的配置项[ssh_connection] ssh连接的配置项[persistent_connection] 持久连接配置项[accelerate] 加速连接配置项[selinux] selinux的配置项[colors] 任务的输出颜色配置项 例如错误是红色[diff] 打印任务前后的差异
2、配置文件详解:[defaults] 通用配置项:inventory = /etc/ansible/hosts 主机清单的路径,也就是清单存放在那个文件中library = /usr/share/my_modules Ansible的库文件存放的位置,可以不用管module_utils = /usr/share/my_module_utils/ 模块存放的位置,也可以不用管remote_tmp = ~/.ansible/tmp 在远程主机上执行命令模块存放的位置 ,也可以不用管forks = 5 ansible 主机任务的并发数,表示同时可以在五个主机上执行任务,也可以不用管ask_pass = True 远程主机的身份验证方式,如果为true则是密码认证,也可以不用管false则是密钥认证ask_sudo_pass = True 用户提权是否需要密码remote_port = 22 被管理端主机的ssh端口remote_user = root 连接被管理端的用户host_key_checking = False 不检查被控端的主机公钥
权限提升配置项[privilege_escalation] 在生产环境通常不会使用root用户直接ssh,因此只能使用一个普通用户连接到被管理端,然后在执行提权,将其权限提升为root,ansible也需要配置提权become=True //true表示开启提权,反之false则关闭become_method=sudo //提权的方式为sudobecome_user=root //表示提权到root用户become_ask_pass=False //表示提权不需要验证密码
ssh连接的配置项[ssh_connection] ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s ssh 的连接选项-C启用压缩传输,ControlPersist用于提升性能
以上配置文件的优先级:配置文件可以出现在四个地方:1.当前用户的家目录下的.ansible.cfg的隐藏文件2.系统中的ANSIBLE_CONFIG的环境变量3.当前工作目录下的ansible.cfg4./etc/ansible.cfg 是全局默认配置文件优先级的顺序是:优先级最高的是环境变量 > 当前工作目录 > 家目录 > /etc/ansible/ansible.cfg
3、Ansible的管理配置示例:被控端:创建zhangsan用户并设置密码为zhangsan用户配置sudo的提权且无需密码提权
主控端:1.vim /etc/ansible/ansible.cfg的配置文件[defaults]inventory = ./hostsremote_user = zhangsanask_pass = truehost_key_checking = False //避免首次连接让填yes
[privilege_escalation]become = truebecome_method=sudobecome_user=rootbecome_ask_pass=False
[ssh_connection]ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s
2. 定义主机清单vim /etc/ansible/hostsnode1node2node3172.18.0.169
3. 测试ansible能否管理被控ansible all -m ping 其中all 表示所有主机
[WARNING]: Platform linux on host 172.18.0.169 is using the discovered Python interpreter at/usr/bin/python3, but future installation of another Python interpreter could change this. Seehttps://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for moreinformation.在测试连通性时,如果发生python的警告信息,可以使用两个方式来解决:1. 在主机清单中为主机指定特定的python版本vim /etc/ansible/hosts172.18.0.169 ansible_python_interpreter=/usr/bin/python3
2.在ansible的配置文件中屏蔽掉告警信息[defaults]interpreter_python=auto_legacy_silent
4、ansible模块用法分为两类模块:一类是命令执行模块:command、 shell、 raw 、script、copy(从主控端复制过去)、fetch(从被控端复制过来)一类是任务模块:很多ansible-doc -l 查询支持的模块ansible-doc 模块名 查模块用法ansible-doc -s 模块名,仅查参数
5、ansible常用参数ansible 192168.1.1 -m user -a ‘name=admin’ -vvv-k 指定ssh密码认证方式-K 指定sudo提权密码-u 指定用户名-vvv 查看详细 -C 测试执行