022-2345 2937
185 2247 0110
business@forenose.com
QQ:2779623375
用户QQ群3:606835039
用户QQ群4:795287153
订阅号
服务号
客服微信:qianxiu0106
ForeSpider
数据采集引擎
科技资讯:
科技学院:
科技百科:
科技书籍:
网站大全:
软件大全:
在与Symantec(Symantec)脱离10年(通常令人不愉快的关系)一周年之际,Veritas Technologies在2月22日宣布与Microsoft Corp. 建立了多年战略全球合作伙伴关系,以说服企业使用Microsoft Azure进行托管混合云环境。 |
---|
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化 脚本 ( shell ),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 |
---|
LoRa是Long Range Radio的缩写,从这个名字上面就能看出来他的特点是传输距离远,在同样的功耗条件下比其他无线方式传播的距离要更远,实现了低功耗和远距离的统一。 |
---|
序号 | 题目 | 需求 | 操作 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 配置SELinux system1 & system2 | 要求SELinux的工作模式为enforcing,且重启依然有效 | vim /etc/selinux/config SELINUX= enforcing setenforce 1 getenforce | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | 配置SSH访问 system1 & system2 | 允许 group8.example.com 域的客户对 system1 和 system2 进行 ssh 访问 禁止 my133t.org 域的客户对 system1 和 system2 进行 ssh 访问 备注: my133t.org 是在 172.13.8.0/24 网络 | firewall-config firewall-cmd --list-all | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | 自定义用户环境 system1 & system2 | 在系统system1和system2上创建自定义命令为qstat ,要求: 此自定义命令将执行以下命令:/bin/ps -Ao pid,tt,user,fname,rsz 此命令对系统中的所有用户有效 | vim /etc/profile alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz' source /etc/profile qstat | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | 配置端口转发 system1 | 在 172.24.8.0/24 网络中的系统,访问system1的本地端口 5423 将被转发到 80 此设置必须永久有效 | firewall-config firewall-cmd --list-all 题目已经明确源IP,建议使用firewall富规则配置 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | 配置链路聚合 system1 & system2 | 此链路使用接口eth1和eth2 此链路在一个接口失效时仍然能工作 此链路在system1使用下面的地址172.16.3.40/255.255.255.0 此链路在system2使用下面的地址172.16.3.45/255.255.255.0 此链路在系统重启之后依然保持正常状态 | nm-connection-editor JSON配置: {"runner":{"name":"activebackup"}} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | 配置IPv6地址 system1 & system2 | system1上的地址应该是2003:ac18::305/64 system2上的地址应该是2003:ac18::30a/64 两个系统必须能与网络2003:ac18/64内的系统通信 地址必须在重启后依然生效 两个系统必须保持当前的IPV4地址并能通信 | nm-connection-editor ping6 2003:ac18::305 ping6 2003:ac18::30a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.1 | 配置本地邮件服务 system1 & system2 | 这些系统不接收外部发送来的邮件 | vim /etc/postfix/main.cf local_transport = error:local →新增100行 inet_interfaces = loopback-only →修改116行 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.2 | 从这些系统上发送的邮件显示来自于server.group8.example.com | myorigin = server.group8.example.com →修改99行 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.3 | 在这些系统上本地发送的任何邮件都会自动路由到mail.group8.example.com | relayhost = [mail.group8.example.com] →修改313行 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.4 | 重启postfix相关服务,并将服务加入到开机启动项 | systemctl restart postfix systemctl enable postfix | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.5 | 测试验证 | mail dave | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.1 | 配置SMB共享目录 system1 | 安装samba服务 | yum install -y samba samba-client | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.2 | 创建SMB共享目录 | mkdir /common | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.3 | 修改SMB目录SELinux上下文安全域 | chcon -R -t samba_share_t /common/ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.4 | 您的SMB服务器必须是STAFF工作组的一个成员 | vim /etc/samba/smb.conf workgroup = STAFF | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.5 | 共享/common目录,共享名必须为common 只有group8.example.com 域内的客户端可以访问common共享 共享目录/common必须是可以浏览的 | [common] path = /common hosts allow = 172.24.8. browseable = yes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.6 | 用户andy必须能够读取共享中的内容,如果需要的话,验证密码是redhat | smbpasswd -a andy | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.7 | 配置防火墙策略 | firewall-cmd --permanent --add-service=samba firewall-cmd --reload | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.8 | 重启SMB相关服务,并将服务加入到开机启动项 | systemctl restart smb nmb systemctl enable smb nmb | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.1 | 配置多用户SMB挂载 system1 | 在system1通过SMB共享目录/devops ,并满足下列要求: | mkdir /devops | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.2 | 修改SMB目录SELinux上下文安全域 | chcon -R -t samba_share_t /devops/ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.3 | 配置用户akira目录/devops读写权限 | setfacl -m u:akira:rwx /devops/ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.4 | 共享名为devops 共享目录devops只能group8.example.com域中的客户端使用 共享目录devops必须可以被浏览 用户silene必须能以读的方式访问此共享,访问密码是redhat 用户akira必须能以读写的方式访问此共享,访问密码是redhat | vim /etc/samba/smb.conf [devops] path = /devops hosts allow = 172.24.8. browseable = yes writable = no write list = akira | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.5 | 创建SMB用户 | smbpasswd -a silene smbpasswd -a akira | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.6 | 重启SMB相关服务,并将服务加入到开机启动项 | systemctl restart smb nmb systemctl enable smb nmb | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.8 | 配置多用户SMB挂载 system2 | 安装SMB相关客户端服务 | yum install -y samba-client cifs-utils | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.9 | 查看system1的SMB共享 | smbclient -L //172.24.8.11/ -U silene | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.10 | 此共享永久挂载在system2.group8.example.com上的/mnt/dev 目录 | mkdir /mnt/dev | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.11 | 并使用用户silene作为认证任何用户,可以通过用户akira来临时获取写的权限 | vim /etc/fstab //172.24.8.11/devops /mnt/dev cifs defaults,multiuser,username=silene,password=redhat,sec=ntlmssp 0 0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.12 | 挂载/etc/fstab中所有文件系统 | mount -a df -h | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.13 | 测试验证,用户akira可读写 | su - akira cd /mnt/dev cifscred add 172.24.8.11 touch 123 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.14 | 测试验证,用户silene只读 | su - silene cd /mnt/dev cifscred add 172.24.8.11 cat 123 touch 456 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.1 | 配置NFS服务 system1 | 安装NFS服务 | yum install -y nfs-utils | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.2 | 以只读的方式共享目录/public | mkdir /public | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.3 | 以读写的方式共享目录/protected,目录/protected应该包含名为project | mkdir -p /protected/project | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.4 | 子目录project所有者为andres andres能以读写方式访问/protected/project | chown andres /protected/project ls -ld /protected/project | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.5 | 修改SELinux上下文安全域 | chcon -R -t public_content_t /public/ chcon -R -t public_content_t /protected/ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.6 | 访问/protected需要通过Kerberos安全加密,您可以使用下面URL提供的密钥 http://server.group8.example.com/pub/keytabs/system1.keytab | wget -O /etc/ krb5.keytab http://server.group8.example.com/pub/keytabs/ system1 .keytab vim /etc/sysconfig/nfs RPCNFSDARGS="-V 4.2" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.7 | NFS只读目录/public,只能被group8.example.com域中的系统访问 NFS读写目录/protected,只能被group8.example.com域中的系统访问 | vim /etc/exports /public 172.24.8.0/24(ro) /protected 172.24.8.0/24(rw, sec=krb5p ) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.8 | 配置防火墙策略 | firewall-cmd --permanent --add-service= nfs firewall-cmd --permanent --add-service= rpc-bind firewall-cmd --permanent --add-service= mountd firewall-cmd --reload | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.9 | 重启NFS相关服务,并将服务加入到开机启动项 刷新并重新加载NFS配置 | systemctl restart nfs-server rpcbind nfs-secure-server systemctl enable nfs=server rpcbind exportfs -ra 版本若为7.0,则执行以下操作: systemctl restart nfs-server rpcbind nfs-secure-server systemctl enable nfs=server rpcbind nfs-secure-server exportfs -ra | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.1 | 挂载一个NFS共享 system2 | 检查system1 NFS共享状态 | showmount -e 172.24.8.11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.2 | /public挂载到目录/mnt/nfsmount | mkdir /mnt/nfsmount | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.3 | /protected挂载到目录/mnt/nfssecure | mkdir /mnt/nfssecure | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.4 | 挂载/protected需要使用安全的方式,密钥下载URL如下: http://server.group8.example.com/pub/keytabs/system2.keytab | wget -O /etc/krb5.keytab http://server.group8.example.com/pub/keytabs/system2.keytab | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.5 | 这些文件系统在系统启动时自动挂载 | vim /etc/fstab 172.24.8.11:/public /mnt/nfsmount nfs defaults 0 0 172.24.8.11:/protected /mnt/nfssecure nfs4 defautls, sec=krb5p 0 0 版本若为7.0,则执行以下操作: vim /etc/fstab 172.24.8.11:/public /mnt/nfsmount nfs defaults 0 0 172.24.8.11:/protected /mnt/nfssecure nfs defautls,sec=krb5p, v4.2 0 0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.6 | 重启NFS相关服务,并将服务加入到开机启动项 | systemctl restart nfs-secure nfs-client.target systemctl enable nfs-client.target 版本若为7.0,则执行以下操作: systemctl restart nfs-secure systemctl enable nfs-secure | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.7 | 挂载/etc/fstab中所有文件系统 | mount -a df -h | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.8 | 测试验证 | su - andres kinit cd /mnt/nfssecure/project/ touch 123 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.1 | 实现一个Web服务器 system1 | 安装HTTPD服务 | yum install -y httpd | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.2 | 拷贝HTTPD配置文件模板到配置文件目录 | cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.3 | 编辑HTTPD配置文件 | vim /etc/httpd/conf.d/httpd-vhosts.conf DocumentRoot "/var/www/html" ServerName system1.group8.example.com | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.4 | 从http://server.group8.example.com/pub/system1.html 下载文件,并且将文件重名为index.html不要修改此文件的内容 | wget -O /var/www/html/index.html http://server.group8.example.com/pub/system1.html | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.5 | 配置防火墙策略 | firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.6 | 重启httpd相关服务,并将服务加入到开机启动项 | systemctl restart httpd systemctl enble httpd | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12.7 | 来自于my133t.org域的客户端拒绝访问此web服务 | firewall-config firewall-cmd --list-all | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.1 | 配置安全Web服务 system1 | 安装HTTPS模块 | yum install -y mod_ssl | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.2 | 下载公钥、私钥和证书到/var/www/html目录 | cd /var/www/html wget http://***.crt wget http://***.key wget http://***ca.crt | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.3 | 提取SSL配置模板参数 | grep SSL /etc/httpd/conf.d/ssl.conf > /etc/httpd/conf.d/ssl vim /etc/httpd/conf.d/ssl SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA SSLHonorCipherOrder on SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.4 | 编辑HTTPD配置文件 | vim /etc/httpd/conf.d/httpd-vhosts.conf DocumentRoot "/var/www/html" ServerName system1.group8.example.com SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLHonorCipherOrder on SSLCertificateFile /var/www/html/system1.crt SSLCertificateKeyFile /var/www/html/system1.key SSLCACertificateFile /var/www/html/ssl-ca.crt | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.5 | 重启httpd相关服务,并将服务加入到开机启动项 | systemctl restart httpd systemctl enble httpd | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.6 | 来自于my133t.org域的客户端拒绝访问此web服务 | firewall-config firewall-cmd --list-all | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14.1 | 配置虚拟主机 system1 | 设置DocumentRoot 为 /var/www/virtual | mkdir /var/www/virtual | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14.2 | 从http://server.group8.example.com/pub/www8.html下载文件重名为 index.html ,不要对文件 index.html 的内容做任何修改 | wget -O /var/www/virtual/index.html http://server.group8.example.com/pub/www8.html | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14.3 | 确保andy用户能够在/var/www/virtual 目录下创建文件 | setfacl -m u:andy:rwx /var/www/virtual/ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14.4 | 并将文件index.html放到虚拟主机的DocumentRoot目录下,并编辑HTTPD配置文件 | vim /etc/httpd/conf.d/httpd-vhosts.conf DocumentRoot "/var/www/virtual" ServerName www8.group8.example.com | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14.5 | 重启httpd相关服务,并将服务加入到开机启动项 | systemctl restart httpd systemctl enble httpd | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15.1 | 配置Web内容访问 system1 | 在您的system1上的web服务器的DocumentRoot目录下,创建一个名为private的目录 | mkdir html/private mkdir virtual/private | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15.2 | 从http://server.group8.example.com/pub/private.html下载一个文件副本到这个目录,并且重命名为 index.html | wget -O /var/www/html/private/index.html http://server.group8.example.com/pub/private.html wget -O /var/www/virtual/private/index.html http://server.group8.example.com/pub/private.html | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15.3 | 参考httpd主配置文件,摘取内容访问控制配置模板 | cat /etc/httpd/conf/httpd.conf AllowOverride none Require all denied | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15.4 | 从 system1 上,任何人都可以浏览 private 的内容,但是从其它系统不能访问这个目录的内容。 | /etc/httpd/conf.d/httpd-vhosts.conf AllowOverride none Require all denied Require local AllowOverride none Require all denied Require local | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15.5 | 重启httpd相关服务,并将服务加入到开机启动项 | systemctl restart httpd systemctl enble httpd | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.1 | 实现动态Web内容 system1 | 安装HTTPD动态脚本模块mod_wsgi | yum install -y mod_wsgi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.2 | 创建动态脚本目录,并下载动态脚本 | mkdir /var/www/wsgi/ cd /var/www/wsgi/ wget http://server.group8.example.com/pub/webinfo.wsgi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.3 | 虚拟主机侦听在端口8909,编辑httpd配置文件 | vim /etc/httpd/conf.d/httpd-vhosts.conf Listen 8909 ServerName wsgi.group8.example.com WSGIScriptAlias / /var/www/wsgi/webinfo.wsgi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.4 | 配置SELinux安全端口 | semanage port -l | grep http semanage port -a -t http_port_t -p tcp 8909 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.5 | 配置防火墙策略,开放TCP 8909端口 | firewall-cmd --permanent --add-port=8909/tcp firewall-cmd --reload | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.6 | 重启httpd相关服务,并将服务加入到开机启动项 | systemctl restart httpd systemctl enble httpd | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 | 创建一个脚本 system1 | 创建脚本 注意最后脚本文件需要赋予755权限 | #! /bin/bash case $1 in redhat) echo fedora ;; fedora) echo redhat ;; *) echo '/root/foo.sh redhat | fedora' ;; esac | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18.1 | 创建添加用户的脚本 system1 | 下载用户清单文件 | cd /root wget http://server.group8.example.com/pub/userlist | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18.2 | 创建脚本 注意最后脚本文件需要赋予755权限 | #! /bin/bash if [ $# -eq 0 ]; then echo 'Usage: /root/batchusers userfile' exit 1 fi if [ ! -f $1 ]; then echo 'Input file not found' exit 1 fi while read line do useradd -s /bin/false $line done < $1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19.1 | 配置iscsi服务端 system1 | 创建LVM逻辑卷iscsi_store 使用 iscsi_store 作其后端逻辑卷名称,其大小为 3G | fdisk /dev/sda, 划分出3G逻辑分区 pvcreat /dev/sda6 vgcreat iscsi_vg /dev/sda6 lvcreat -l 100%VG -n iscsi_store iscsi_vg | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19.2 | 安装iscsi | yum install -y targetd targetcli | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19.3 | 配置iscsi服务端 | targetcli cd /backstores/block creat disk0 /dev/iscsi_vg/iscsi_store cd /iscsi creat iqn.2014-08.com.example.group8:system1 cd iqn.2014-08.com.example.group8:system1/ tpg1/luns create /backstores/block/disk0 cd iqn.2014-08.com.example.group8:system1/ tpg1/acls create iqn.2014-08.com.example.group8: system2 cd iqn.2014-08.com.example.group8:system1/ tpg1/portals delete 0.0.0.0 3260 create 172.24.8.11 exit | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19.4 | 重启iscsi服务,并加入到开机启动项 | systemctl restart target systemctl enable target | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19.5 | 此服务只能被 system2.group8.example.com 访问 | firewall-config 开通仅允许system2访问3260端口 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.1 | 配置iscsi客户端 system2 | 安装iscsi客户端服务程序,RHEL7默认已经安装 | yum install -y iscsi-initiator-utils | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.2 | 扫描发现system1的iscsi服务 | iscsiadm -m discovery -t st -p 172.24.8.11 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.3 | 编辑iscsi客户端服务配置文件 | vim /etc/iscsi/initiatorname.iscsi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.4 | 重启iscsi客户端服务,并加入到开机启动项 | systemctl restart iscsi iscsid systemctl enable iscsi iscsid | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.5 | 登录system1的iscsi服务 | iscsiadm -m node -T iqn.2014-08.com.example.group8:system2 -p 172.24.8.11 --login | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.6 | 块设备 iSCISI 上包含一个大小为 2100 MiB 的分区,并格式化为 ext4 | fdisk /dev/sdb mkfs.ext4 /dev/sdb1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.7 | 此分区挂载在 /mnt/data 上,创建目录 | mkdir /mnt/data | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.8 | 同时在系统启动的期间自动挂载,编辑fstab文件 注意:一定要用UUID挂载,lsblk,blkid | vim /etc/fstab UUID=****** /mnt/data ext4 defaults, _netdev 0 0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20.9 | 挂载iscsi | mount -a df -h | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21.1 | 配置一个数据库 system1 | 安装mariaDB | yum install -y mariadb* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21.2 | 数据库只能被 localhost 访问,修改数据库配置文件 | vim /etc/my.conf skip-networking=1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21.3 | 重启数据库服务,并加入到开机启动项 | systemctl restart mariadb systemctl enable mariadb | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21.4 | 下载需要恢复的数据库文件 | cd /root wget http://server.group8.example.com/pub/users.mdb | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21.5 | 进入数据库,创建数据库,并恢复数据库表文件 在 system1上创建一个 Maria DB 数据库,名为 Contacts | mysql -u root -p create database Contacts; show databases; use Contacts; source /root/users.mdb; 21.6 | 21.7 除了 root 用户,此数据库只能被用户 Mary 查询,此用户密码为 redhat | 初始化数据库,root 用户的数据库密码为 redhat ,同时不允许空密码登录 grant select on Contacts.* to Mary @localhost identified by 'redhat'; | mysql_secure_installation 系统运维 2019-11-12 14:11:00 「深度学习福利」大神带你进阶工程师,立即查看>>> Step 1.创建一个目录来存储服务器密钥 & 证书 $ mkdir /usr/local/nginx/conf/vhost/sslkey Step 2. 生成CSR 说明:会提示填:1.国家 2.省份 3.城市 4.公司名称....等,填完后会生成 sasha-lab.csr sasha-lab.key这两个文件 $ openssl req -new -newkey rsa:2048 -nodes -keyout sasha-lab.key -out sasha-lab.csr Step 3.将sasha-lab.csr 复制到godaddy (1.点开Rekey & Manage 2.点开Re-Key certificate将 sasha-lab.csr 内容复制到框框里,保存即可) Step 4.下载ssl证书(选择Apache) Step 5. 把下载的ssl证书上传服务器 & 解压证书 Step 6.合并证书 $ cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> sasha-lab.crt Step 7.配置nginx server { listen 80; server_name coolexample.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name coolexample.com; ssl_certificate /usr/local/nginx/conf/vhost/sslkey/sasha-lab.crt; ssl_certificate_key /usr/local/nginx/conf/vhost/sslkey/sasha-lab.key; root /usr/share/nginx/coolexample.com/; index index.php index.html index.htm; } 系统运维 2019-11-12 11:41:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 简介 Kafka是基于发布订阅的消息系统。最初起源于LinkedIn,于2011年成为开源Apache项目,然后于2012年成为Apache顶级项目。Kafka用Scala和Java编写,因其分布式可扩展架构及可持久化、高吞吐率特征而被广泛使用。 消息队列 通常在项目中,我们会因为如下需求而引入消息队列模块: 1.解耦:消息系统相当于在处理过程中间插入了一个隐含的、基于数据的接口层。无需预先定义不同的接口地址和请求应答规范,这允许数据上下游独立决定双方的处理过程,只需要约定数据格式即可任意扩展服务类型和业务需求。 2.缓冲:消息系统作为一个缓冲池,应对常见的访问量不均衡情形。比如特殊节假日的流量剧增和每日不同时段的访问量差异。以及处理不同数据类型所需的不同实时性。使整个业务处理架构以较低成本获得一定灵活性。 3. 异步:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。 Kafka的特点 作为一种分布式的,基于发布/订阅的消息系统。Kafka的主要设计目标如下: 1.以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。 2.高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。 3.支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。 4.同时支持离线数据处理和实时数据处理。 5.支持在线水平扩展。 Kafka体系架构 如上图所示,一个典型的Kafka体系架构包括若干Producer(可以是服务器日志,业务数据,页面前端产生的page view等等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer (Group),以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。 名词解释: Topic & Partition 一个topic可以认为一个一类消息,每个topic将被分成多个partition,每个partition在存储层面是append log文件。任何发布到此partition的消息都会被追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型的数字,它唯一标记一条消息。每条消息都被append到partition中,顺序写磁盘因此效率非常高。这是Kafka高吞吐率的重要基础。 Producer发送消息到broker时,会根据Paritition机制选择将其存储到哪一个Partition。如果Partition机制设置合理,所有消息可以均匀分布到不同的Partition里,这样就实现了负载均衡。如果一个Topic对应一个文件,那这个文件所在的机器I/O将会成为这个Topic的性能瓶颈,而有了Partition后,不同的消息可以并行写入不同broker的不同Partition里,极大的提高了吞吐率。可以通过配置项num.partitions来指定新建Topic的默认Partition数量,也可在创建Topic时通过参数指定,同时也可以在Topic创建之后通过Kafka提供的工具修改。 Kafka的复制机制 Kafka 中的每个主题分区都被复制了 n 次,其中的 n 是主题的复制因子(replication factor)。这允许 Kafka 在集群服务器发生故障时自动切换到这些副本,以便在出现故障时消息仍然可用。Kafka 的复制是以分区为粒度的,分区的预写日志被复制到 n 个服务器。 在 n 个副本中,一个副本作为 leader,其他副本成为 followers。顾名思义,producer 只能往 leader 分区上写数据(读也只能从 leader 分区上进行),followers 只按顺序从 leader 上复制日志。 日志复制算法(log replication algorithm)必须提供的基本保证是,如果它告诉客户端消息已被提交,而当前 leader 出现故障,新选出的 leader 也必须具有该消息。在出现故障时,Kafka 会从失去 leader 的 ISR 里面选择一个 follower 作为这个分区新的 leader ;换句话说,是因为这个 follower 是跟上 leader 写进度的。 每个分区的 leader 会维护一个 ISR。当 producer 往 broker 发送消息,消息先写入到对应 leader 分区上,然后复制到这个分区的所有副本中。只有将消息成功复制到所有同步副本(ISR)后,这条消息才算被提交。由于消息复制延迟受到最慢同步副本的限制,因此快速检测慢副本并将其从 ISR 中删除非常重要。 Kafka 复制协议的细节会有些细微差别。 Kafka的同步机制 Kafka不是完全同步,也不是完全异步,而是一种ISR(In-Sync Replicas)机制: 1. leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR,每个Partition都会有一个ISR,而且是由leader动态维护 。 2. 如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其从ISR中移除 3. 当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。 Kafka提供了数据复制算法保证,如果leader发生故障或挂掉,一个新leader被选举并被接受客户端的消息成功写入。Kafka确保从同步副本列表中选举一个副本为leader,或者说follower追赶leader数据。leader负责维护和跟踪ISR中所有follower滞后的状态。当producer发送一条消息到broker后,leader写入消息并复制到所有follower。消息提交之后才被成功复制到所有的同步副本。消息复制延迟受最慢的follower限制,重要的是快速检测慢副本,如果follower“落后”太多或者失效,leader将会把它从ISR中删除。 消息传输保障 前面已经介绍了Kafka如何进行有效的存储,以及了解了producer和consumer如何工作。接下来讨论的是Kafka如何确保消息在producer和consumer之间传输。有以下三种可能的传输保障(delivery guarantee): At most once: 消息可能会丢,但绝不会重复传输 At least once:消息绝不会丢,但可能会重复传输 Exactly once:每条消息肯定会被传输一次且仅传输一次 Kafka的消息传输保障机制非常直观。当producer向broker发送消息时,一旦这条消息被commit,由于副本机制(replication)的存在,它就不会丢失。但是如果producer发送数据给broker后,遇到的网络问题而造成通信中断,那producer就无法判断该条消息是否已经提交(commit)。虽然Kafka无法确定网络故障期间发生了什么,但是producer可以retry多次,确保消息已经正确传输到broker中,所以目前Kafka实现的是at least once。consumer从broker中读取消息后,可以选择commit,该操作会在Zookeeper中存下该consumer在该partition下读取的消息的offset。该consumer下一次再读该partition时会从下一条开始读取。如未commit,下一次读取的开始位置会跟上一次commit之后的开始位置相同。当然也可以将consumer设置为autocommit,即consumer一旦读取到数据立即自动commit。如果只讨论这一读取消息的过程,那Kafka是确保了exactly once, 但是如果由于前面producer与broker之间的某种原因导致消息的重复,那么这里就是at least once。考虑这样一种情况,当consumer读完消息之后先commit再处理消息,在这种模式下,如果consumer在commit后还没来得及处理消息就crash了,下次重新开始工作后就无法读到刚刚已提交而未处理的消息,这就对应于at most once了。读完消息先处理再commit。这种模式下,如果处理完了消息在commit之前consumer crash了,下次重新开始工作时还会处理刚刚未commit的消息,实际上该消息已经被处理过了,这就对应于at least once。 要做到exactly once就需要引入消息去重机制。Kafka文档中提及GUID(Globally Unique Identifier)的概念,通过客户端生成算法得到每个消息的unique id,同时可映射至broker上存储的地址,即通过GUID便可查询提取消息内容,也便于发送方的幂等性保证,需要在broker上提供此去重处理模块,目前版本尚不支持。针对GUID, 如果从客户端的角度去重,那么需要引入集中式缓存,必然会增加依赖复杂度,另外缓存的大小难以界定。不只是Kafka, 类似RabbitMQ以及RocketMQ这类商业级中间件也只保障at least once, 且也无法从自身去进行消息去重。所以我们建议业务方根据自身的业务特点进行去重,比如业务消息本身具备幂等性,或者借助Redis等其他产品进行去重处理。 Kafka作为消息队列: 传统的消息有两种模式:队列和发布订阅。 在队列模式中,消费者池从服务器读取消息(每个消息只被其中一个读取); 发布订阅模式:消息广播给所有的消费者。这两种模式都有优缺点,队列的优点是允许多个消费者瓜分处理数据,这样可以扩展处理。但是,队列不像多个订阅者,一旦消息者进程读取后故障了,那么消息就丢了。而发布和订阅允许你广播数据到多个消费者,由于每个订阅者都订阅了消息,所以没办法缩放处理。 kafka中的Consumer Group有两种形式: a、队列:允许同名的消费者组成员共同处理。 b、发布订阅:广播消息给多个消费者组。 kafka的每个topic都具有这两种模式。 传统的消息系统按顺序保存数据,如果多个消费者从队列消费,则服务器按存储的顺序发送消息,但是,尽管服务器按顺序发送,多个并行请求将会是异步的,因此消息可能乱序到达。这意味着只要消息存在并行消费的情况,顺序就无法保证。消息系统常常通过仅设1个消费者来解决这个问题,但是这意味着没用到并行处理。 kafka有比传统的消息系统更强的顺序保证。通过并行topic的parition,kafka提供了顺序保证和负载均衡。每个partition仅由同一个消费者组中的一个消费者消费到。并确保消费者是该partition的唯一消费者,并按顺序消费数据。每个topic有多个分区,则需要对多个消费者做负载均衡,但请注意,相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。 Kafka作为存储系统 所有发布消息到消息队列和消费分离的系统,实际上都充当了一个临时存储系统。Kafka还是一个非常高性能的存储系统。写入到kafka的数据将写到磁盘并复制到集群中保证容错性。并允许生产者等待消息应答,直到消息完全写入。kafka的存储结构保证无论服务器上有50KB或50TB数据,执行效率是相似的,因此可达到水平扩展的目标。还可以认为kafka是一种专用于高性能,低延迟,提交日志存储,复制,和传播特殊用途的分布式文件系统。 Kafka流处理 Kafka的更高目标是实时流处理。在kafka中,流处理持续获取输入topic的数据,进行处理加工,然后写入输出topic。例如,一个零售APP,接收销售和出货的输入流,统计数量或调整价格后输出。 简单的需求可以直接使用producer和consumer API进行处理。对于复杂的转换,Kafka提供了更强大的Streams API。可构建聚合计算或连接流到一起的复杂应用程序。 综上所述,Kafka 的设计可以帮助我们解决很多架构上的问题。但是想要用好 Kafka 的高性能、低耦合、高可靠性等特性,我们需要非常了解 Kafka,以及我们自身的业务需求,综合考虑应用场景。 系统运维 2019-11-12 11:22:00 「深度学习福利」大神带你进阶工程师,立即查看>>> vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.1.128 NETMASK=255.255.255.0 GATEWAY=192.168.1.2 DNS1=192.168.1.2 service network restart 设置静态IP脚本:setIP.sh 它的参数就是要设置的IP,如./setIP.sh 192.168.1.1 #!/bin/sh FILE="/etc/sysconfig/network-scripts/ifcfg-ens33" TEXT="TYPE=Ethernet\n\ PROXY_METHOD=none\n\ BROWSER_ONLY=no\n\ BOOTPROTO=static\n\ DEFROUTE=yes\n\ IPV4_FAILURE_FATAL=no\n\ IPV6INIT=yes\n\ IPV6_AUTOCONF=yes\n\ IPV6_DEFROUTE=yes\n\ IPV6_FAILURE_FATAL=no\n\ IPV6_ADDR_GEN_MODE=stable-privacy\n\ NAME=ens33\n\ DEVICE=ens33\n\ ONBOOT=yes\n\ IPADDR=192.168.119.150\n\ NETMASK=255.255.255.0\n\ GATEWAY=192.168.119.2\n\ DNS1=192.168.119.2" IPADDR="IPPADDR=$1" IPADDR=$1 _ckIPaddr () { ckStep1=`echo $1 | awk -F"." '{print NF}'` if [ $ckStep1 -eq 4 ] || [ $ckStep1 -eq 6 ] then ckStep2=`echo $1 | awk -F"." '{if ($1!=0 && $NF!=0) split ($0,IPNUM,".")} END \ { for (k in IPNUM) if (IPNUM[k]==0) print IPNUM[k]; else if (IPNUM[k]!=0 && IPNUM[k]!~/[a-z|A-Z]/ && length(IPNUM[k])<=3 && IPNUM[k]<255 && IPNUM[k]!~/^0/) print IPNUM[k]}'| wc -l` if [ $ckStep2 -eq $ckStep1 ] then echo 0 else echo 1 fi else echo 1 fi } CK_IPADDR=`_ckIPaddr $IPADDR` if [ $CK_IPADDR -eq 1 ] then echo "The string $IPADDR is not a correct ipaddr!!!" exit 1 fi echo "" > $FILE echo -e $TEXT > $FILE IPADDRSTR="IPADDR="$IPADDR echo -e $IPADDRSTR >> $FILE echo "NETMASK=255.255.255.0" >> $FILE GATEWAY="GATEWAY=" DNS1="DNS1=" sum=0 IPADDR=${IPADDR//./ } for element in $IPADDR do let "sum++" if [ $sum -ge 4 ];then break fi GATEWAY=$GATEWAY$element"." DNS1=$DNS1$element"." done GATEWAY=$GATEWAY"2" DNS1=$DNS1"2" echo -e $GATEWAY >> $FILE echo -e $DNS1 >> $FILE service network restart 系统运维 2019-11-12 11:30:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 概述 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址…… 对程序配置的期望值也越来越高:配置修改后实时生效,分环境、分集群管理配置,代码安全、审核机制…… 在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。 所以,配置中心应运而生。 环境简介 目前公司使用阿里云管理所有服务,原因是为了降低运维成本——傻瓜式运维。 服务部署使用edas,配置管理使用acm。 调研目的 将所有代码中的基础依赖(如数据库、分布式存储等)相关配置回收到配置中心(acm或其他开源工具)管理,提升安全性,使资源可复用,减少因版本差异带来的开发工作量。 方案比较 方案 优点 缺点 备注 edas-acm | 第三方 运维介入少,便于维护 | 扩容方便 扩容不方便,每次扩容都要重新为ecs实例单独授权,授权期间扩容实例服务不可用(4xx、5xx) | 运维成本较高(服务器、人力),负载能力、稳定性待验证 edas团队有优化计划,但目前无排期 | 第三方配置中心产品 Disconf:百度开源的配置管理中心, 目前已经不维护了 Spring Cloud Config: Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。 Apollo: 携程开源的配置管理中心,具备规范的权限、流程治理等特性。 Nacos: 阿里开源的配置中心,也可以做DNS和RPC的服务发现。 由于Disconf不再维护,下面对比一下Spring Cloud Config、Apollo和Nacos。 产品功能特点比较 功能点 Spring Cloud Config Apollo Nacos | 开源时间 | 2014.9 | 2016.5 | 2018.6
调研结果 首先会进一步跟进阿里云edas优化的排期,但是眼下好像是很渺茫... ... 其次,如果接入开源配置中心,根据以上数据分析,建议使用Apollo(功能完善,但是配置复杂)或nacos(功能简单,配置简单,能满足要求,但是文档不够丰富)。 参考文档 Apollo wiki nacos手册 Spring Cloud Config 剧终 最终还是选择等待阿里云做优化了... 吐槽: 时间都浪费在LD的犹豫和不明确表达需求上... 请关注,楼主公众号! 系统运维 2019-11-12 11:03:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 导读 Nginx作为一个轻量级的HTTP服务器,相比Apache优势也是比较明显的,在性能上它占用资源少,能支持更高更多的并发连接,从而达到提高访问效率;在功能上它是一款非常优秀的代理服务器与负载均衡服务器;在安装配置上它安装,配置都比较简单。 关于Nginx部署、配置的文章公众号已经发布过很多: 深度总结|深入浅出Nginx HTTP服务器Nginx服务介绍续 Nginx优化配置详解 1分钟搞定 Nginx 版本的平滑升级与回滚 指南:提高Nginx服务器硬度的12个技巧 大流量、高负载场景 Nginx+ Linux 性能调优 利用ELK分析Nginx日志生产实战(高清多图) 文章很多,就不再逐一列举了,有兴趣的、需要的可以去公众号通过检索功能查找相关的文章。 对于Nginx一些配置的详细解释,之前也写过相关的文章: Nginx优化配置详解 但在实际的生产配置环境中,肯定会经常遇到需要修改、或者重新增加Nginx配置的问题,有的时候需求更是多种多样,修修改改经常会出现这样、那样的一些错误,特别的烦索。 基于以上的原因,肯定很多读者伙伴经常会收集一些配置文档、或者电脑里也保存着一些自己日常的常用配置案例,但是终究还是不是很便利。今天,民工哥给大家介绍一款「超级牛掰的神器」,可以在线一键生成Nginx的配置。 NGINX Config 支持 HTTP、HTTPS、PHP、Python、Node.js、WordPress、Drupal、缓存、逆向代理、日志等各种配置选项。在线生成 Web 服务器 Nginx 配置文件。 操作配置也非常简单,你需要做的只需要2步: 打开官方网站 按需求配置相关参数 系统就会自动生成特定的配置文件。虽然界面是英文的,但是功能的页面做的非常直观,生成的Nginx格式规范。 登陆之后大概的界面如下: 配置域名:mingongge.com 实现用户访问*.mingongge.com 域名时会自动跳转到 mingongge.com 此配置,并且开启http强制跳转到https的配置。 这时,Nginx的配置就会实时自动生成在下面,我把生成的配置复制过来,如下: /etc/nginx/sites-available/mingongge.com.conf #文件名都给你按规则配置好了 server { listen 443 ssl http2; server_name mingongge.com; # SSL ssl_certificate /etc/letsencrypt/live/mingongge.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mingongge.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/mingongge.com/chain.pem; # security include nginxconfig.io/security.conf; # additional config include nginxconfig.io/general.conf; } # subdomains redirect server { listen 443 ssl http2; server_name *.mingongge.com; # SSL ssl_certificate /etc/letsencrypt/live/mingongge.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mingongge.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/mingongge.com/chain.pem; return 301 https://mingongge.com$request_uri; } # HTTP redirect server { listen 80; server_name .mingongge.com; include nginxconfig.io/letsencrypt.conf; location / { return 301 https://mingongge.com$request_uri; } } 非常的方便与快速。 官方还提供一些Nginx的基础优化配置,如下: /etc/nginx/nginx.conf # Generated by nginxconfig.io user www-data; pid /run/nginx.pid; worker_processes auto; worker_rlimit_nofile 65535; events { multi_accept on; worker_connections 65535; } http { charset utf-8; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; log_not_found off; types_hash_max_size 2048; client_max_body_size 16M; # MIME include mime.types; default_type application/octet-stream; # logging access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; # load configs include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 还有基于安全的配置,如下: /etc/nginx/nginxconfig.io/security.conf # security headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always; # . files location ~ /\.(?!well-known) { deny all; } 都相当于是提供一些基础的模板配置,可以根据自己的实际需求去修改。 有了这个神器在手,再也不用为配置Nginx的各类配置而烦恼了!!民工哥也不敢私藏这么好的神器在手里,今天给大家分享一下,感觉有帮助的读者朋友们记得转发分享出去哦,感谢支持!!! 原文来自: https://www.linuxprobe.com/nginx-online-configuration.html 系统运维 2019-11-12 08:43:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 查看系统负载: w/uptime 最后面三个数字表示1分钟,5分钟,15分钟平均有多少个进程占用CPU 占用CPU的进程可以是Running,也可以是Waiting 某一时刻1颗CPU只能有一个进程在使用其资源 #查看cpu信息:lscpu或cat /proc/cpuinfo top命令: top 回车就可以进入到top界面 每3秒刷新一次 默认按cpu百分比排序,可以按M键按照内存使用率大小排序 按数字1,可以显示所有CPU使用率详情 top -bn1 静态显示所有进程的情况,也是按cpu百分比排序 静态显示进程信息,方便在shell脚本中使用top命令 free命令: free查看内存和swap使用情况,关注最后一列的available,这个数字是真正剩余的物理内存大小 free -k -m -g -h 手动增加swap:(厂商为了避免影响磁盘性能,购买云服务器一般没有swap空间) dd if=/dev/zero of=/newswap bs=1M count=1000 mkswap /newswap #格式化 chmod 600 /newswap #变更权限(为了安全) swapon /newswap #挂载 监控磁盘: yum install -y sysstat iostat -dx 1 iostat -dx 1 5 #主要关注最后一列(util)当百分比数值过大,可能磁盘性能出问题了 yum install -y iotop iotop 回车 动态显示,按IO使用率大小排序 综合工具,断定瓶颈点: vmstat 1 vmstat 1 10 关注:r、b、si、so、bi、bo、id、wa 监控网卡流量: sar -n DEV 1 10 yum install -y epel-release yum install nload nload 回车后查看网卡流量,动态显示 ethtool ens33 mii-tool ens33 查看进程: ps aux 、 ps -elf 、 ps -eLf (查看线程) STAT S Sleep R Running s 父进程 N 低优先级 < 高优先级 + 前台进程 l 多线程进程 Z 僵尸进程 ls -l /proc/pid/ #查看一个进程的一些详细信息 查看网络连接状况: netstat -lnp 、netstat -lntp 、 netstat -lntup netstat -an或ss -an (查看tcp通信状态,establish/ESTAB表示正通信,time_wait表示通信完成还没断开) 抓包工具: tcpdump (安装:yum install -y tcpdump) tcpdump -nn -i ens33 port 80 tcpdump -nn -i ens33 -c 100 -w 1.cap tcpdump -i ens33 -nn not port 22 and not port 80 and not host 192.168.222.1 tcpdump -nn -r 1.cap wireshark (安装:yum install -y wireshark) tshark -i ens33 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" #wireshark可以在Windows端安装,图形显示,可以分析tcpdump抓的.cap文件 补充: buffer和cached buffer : 这部分内存是从CPU产生即将写入到磁盘里去的那部分数据 cached 这部分数据是先从磁盘里读出来,然后临时存到内存里的那部分数据 系统运维 2019-11-11 22:57:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 今天在工作上遇到一个问题,在做安全扫描的时候发现,openssh有比较多的漏洞,按照绿盟扫描器的建议需要升级到最新版本。但是生产环境升级的时候会遇到很多的问题,所以决定在测试环境下打成rpm包上传到生产环境下进行升级。 备份 在做所有的变更都要备份,如果有问题可以随时回滚。 mkdir /opensshbackup cd /opensshbackup mkdir -p /opensshbackup/ssh mkdir -p /opensshbackup/binssh mkdir -p /opensshbackup/sbinssh cp /etc/ssh/* /opensshbackup/ssh cp /etc/pam.d/sshd . cp /usr/bin/ssh* /opensshbackup/binssh cp /usr/sbin/ssh* /opensshbackup/sbinssh 安装基础依赖 yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip wget -y 使用rpmbuild进行构建 解压包 tar xvf openssh-8.1p1.tar.gz cd openssh-8.1p1 创建一个目录SOURCES mkdir SOURCES cd SOURCES cp /root/openssh-8.1p1/contrib/redhat/openssh.spec . 修改配置文件 sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh.spec sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh.spec 构建包 rpmbuild -ba openssh.spec rpm在/root/rpmbuild/RPMS/x86_64目录下,直接将包放到生产环境更新就可以了。 安装的方式有两种 第一种 yum install -y ./openssh-* 第二种 rpm -ivh openssh-* --nodeps 修改/etc/ssh/sshd_config 如果不修改会导致连接不上 PermitRootLogin yes #加一行运行root登陆 PasswordAuthentication yes #允许密码登陆 问题 问题一: 如果报,是因为/root/rpmbuild/SOURCES/下面没有包,复制过去就OK cp openssh-8.1p1.tar.gz rpmbuild/SOURCES/ 问题二: wget http://ftp.riken.jp/Linux/momonga/6/Everything/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz 系统运维 2019-11-11 20:10:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 下载安装vagrant: 点击这里 下载安装virtual box: 点击这里 这里使用的是win7系统,可能会出现powershell过低的情况,所以需要先检查本机的powershell版本 首先打开powershell,然后可以通过如下命令查看: $PSVersionTable 我这边直接升级到5.1(需要重启): 下载Win7AndW2K8R2-KB3191566-x64.zip 打开cmd,运行vagrant检查是否正常 将提前准备好的镜像加入到vagrant管理 vagrant box add centos/7 d: 系统运维 2019-11-11 15:22:00 「深度学习福利」大神带你进阶工程师,立即查看>>> Sosreport 是 RHEL / CentOS 上的一个命令,它会收集 系统配置 和你linux机器上的诊断信息,如正在运行的内核版本、加载的模块和系统和服务配置文件之类的信息。这个命令同样可以运行外部的程序来收集更多的信息,并存储这些输出到一个结论文档中。 Sosreport在你需要获得redhat的技术支持时需要它。Redhat的支持工程师会要求你服务器上的sosreport来用于故障排除。 要运行sosreport,需要安装 sos 包。sos包是大多是linux的默认安装包中的一部分。如果因为某种原因没有安装,那么运行下面的yum命令来安装 sos 包 : # yum install sos 生成报告 打开终端输入sosreport命令: # sosreport 这条命令正常情况下会在 几分钟 里完成。根据本地配置,在某些情况下,某些选项可能需要更长的时间才能完成。一旦完成,sosreport将在 / tmp目录 目录中生成一个压缩文件。不同版本使用不同的压缩方案(** gz,bz2,或xz**)。该文件应提供给红帽的支持代表(在开放的情况下通常作为附件)。 注意 :sosreport需要root权限才能运行。 sosreport命令中不同的选项: sosreport命令有一个 模块化结构 ,并允许用户启用和禁用模块,并通过在命令行指定模块。要 列出可用的模块 (插件),请使用以下命令: # sosreport -l 要禁用一个模块,用逗号隔开的列表传给-n/–skip-plugins选项。比如要kvmand 、amd这两个模块: # sosreport -n kvm,amd 各个模块可以通过-k选项提供额外的选项。例如,在Red Hat Enterprise Linux 5中安装的sos rpm模块默认收集“rpm -Va”的输出。因为这是个耗时行为,因此可以通过下面的命令禁用: # sosreport -k rpm.rpmva=off 系统运维 2019-11-09 17:27:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 九款Java性能调试工具,有什么更好、更多的工具,欢迎补充。 NetBeans Profiler NetBeans中可以找到NetBeans Profiler。 NetBeans分析器是NetBeans的扩展,用于为NetBeans IDE提供分析功能。NetBeans IDE是一个开源的集成开发环境。NetBeans IDE支持开发所有Java应用程序类型(Java SE(包括JavaFX),Java ME,Web,EJB和移动应用程序)。 该分析器包括CPU,内存和线程分析等功能,还提供基本JVM监控的工具和功能。对于需要解决内存或性能相关问题的开发人员来说,这是非常有用的。 JProfiler JProfiler是一个非常好的Java分析器。将CPU,内存和线程分析结合到一个应用程序中。可用于分析性能瓶颈,内存泄漏,CPU负载和解决线程问题。支持本地分析(分析在安装了JProfiler软件的同一台机器上运行的应用程序)和远程分析(这是可以分析在未安装JProfiler远程机器上运行的Java应用程序)。 JProfiler是由ej-technologies GmbH开发的商业的Java分析工具,主要用于与Java EE和Java SE应用程序一起使用。 GC查看器 GC查看器的截图 GC Viewer可以免费下载,并且开源。可用来可视化JVM的数据(使用vmflags -verbose:gc和-Xloggc:配置)GC Viewer可用于计算与垃圾回收相关的性能指标,包括吞吐量,累积暂停,最长暂停等。当通过更改生成大小或设置初始堆大小来调整应用程序的垃圾回收时,这非常有用。 VisualVM VisualVM是从NetBeans平台派生的工具,模块化架构,意味着它可以通过使用插件来扩展。 Visual VM允许在Java虚拟机(JVM)上运行时获取有关Java应用程序的详细信息。生成的数据可以由JDK工具生成和检索,并且可以快速查看多个Java应用程序的所有数据和信息,包括本地和远程的应用程序。也可以保存和捕获有关JVM软件的数据,并将数据保存到本地,然后再查看数据或与其他人共享数据。 Visual VM可以执行CPU分析,内存分析,运行垃圾收集,快照等。 Java性能分析工具(Patty)* Beta Patty在行动(图片最初来自 http://patty.sourceforge.net。) “Patty”项目是可从Source Forge的开源项目,旨在为Java 1.5.0及更高版本的虚拟机提供分析工具。Patty非常重视目标分析,这是与其他分析器的区别,还允许用户在运行时切换分析功能。 目前它处于beta状态,但是关于方法执行的分析,代码覆盖,线程中用到一些强大的功能可用于分析开销(内存CPU等)。可以把信息通过TCP / IP套接字发送到其他计算机。有一个易于使用的GUI界面,可用于堆的分析。 JRockit - 任务控制 JRockit是一个专有的Java虚拟机(JVM)。最初由Appeal Virtual Machines开发,并于2002年被BEA Systems收购,后来通过Sun Microsystems成为Oracle的一部分。 Oracle JRockit是Java SE的完整解决方案,包括高性能JVM,分析,监控和诊断工具,可用于预测Java应用程序中的延迟。 JRockit的当前迭代版本与一组名为JRockit Mission Control的工具捆绑在一起。这些工具能够可视化垃圾回收和其他性能统计信息,还有用于管理的控制台,。也可以用作运行时性能分析工具,称为运行时分析器,也可以分析内存问题。 Eclipse内存分析器 内存分析器(MAT)在Eclipse IDE中找到。 Eclipse内存分析器是一个Java堆分析器,可帮助你查找内存泄漏并减少内存消耗。它更适合作为分析Java堆转储和计算其大小的通用工具包。它也可以用来报告泄漏嫌疑和内存消耗的反模式。 Java Interactive Profiler JIP是一种高性能,低开销的分析器。它目前根据BSD许可证发行 ,可从Source Forge下载 。对于使用JIP的开发人员,可以在VM运行时打开和关闭分析器,可以过滤类和包,并控制输出。 Profiler4J Profiler4j是专用的CPU分析器。界面友好,支持远程分析,并可以“即时”配置。值得注意的功能包括基于动态字节码的检测,它不需要本地库,也不需要可执行文件。Profilter4J可以提供带有调用图,调用树,内存监视器和类列表的图形信息,支持细粒度的配置。它目前在Apache许可证v2.0下发布, 可从Source Forge 下载 。 如果文章对您有帮助,请记得点赞关注哟~ 欢迎大家关注我的公众号<情系IT>,每日推送技术文章供大家学习参考。 系统运维 2019-11-09 09:17:00 「深度学习福利」大神带你进阶工程师,立即查看>>> dockerfile 与 docker-compose的区别 先简单理解 docker 的使用过程 ,它分为镜像构建与容器启动。 镜像构建:即创建一个镜像,它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。 容器启动:容器最终运行起来是通过拉取构建好的镜像,通过一系列运行指令(如端口映射、外部数据挂载、环境变量等)来启动服务的。针对单个容器,这可以通过 docker run 来运行。 而如果涉及多个容器的运行(如服务编排)就可以通过 docker-compose 来实现,它可以轻松的将多个容器作为 service 来运行(当然也可仅运行其中的某个),并且提供了 scale (服务扩容) 的功能。 简单总结: 1.dockerfile: 构建镜像; 2.docker run: 启动容器; 3.docker-compose: 启动服务; 从头说起。 假如你不用 docker ,搭建 wordpress 怎么弄?先找台 server ,假设其 OS 为 Ubuntu ,然后按照文档一步步敲命令,写配置,对吧? 用 docker 呢? 随便找台 server ,不管什么操作系统,只要支持 docker 就行, docker run ubuntu, docker 会从官方源里拉取最新的 Ubuntu 镜像,可以认为你开了个 Ubuntu 虚拟机,然后一步步安装,跟上面一样。 但是这样安装有个显著的缺点,一旦 container 被删,你做的工作就都没了。当然可以用 docker commit 来保存成镜像,这样就可以复用了。 但是镜像一般比较大,而且只分享镜像的话,别人也不知道你这镜像到底包含什么,这些问题都不利于分享和复用。 一个直观的解决方案就是,写个脚本把安装过程全部记录下来,这样再次安装的时候,执行脚本就行了。 Dockerfile 就是这样的脚本,它记录了一个镜像的制作过程。 有了 Dockerfile, 只要执行 docker build . 就能制作镜像,而且 Dockerfile 就是文本文件,修改也很方便。 现在有了 wordpress 的镜像,只需要 docker run 就把 wordpress 启动起来了。 如果仅仅是 wordpress, 这也就够了。但是很多时候,需要多个镜像合作才能启动一个服务,比如前端要有 nginx , 数据库 mysql, 邮件服务等等,当然你可以把所有这些都弄到一个镜像里去,但这样做就无法复用了。 更常见的是, nginx, mysql, smtp 都分别是个镜像,然后这些镜像合作,共同服务一个项目。 docker-compose 就是解决这个问题的。你的项目需要哪些镜像,每个镜像怎么配置,要挂载哪些 volume, 等等信息都包含在 docker-compose.yml 里。 要启动服务,只需要 docker-compose up 就行,停止也只需要 docker-compse stop/down 简而言之, Dockerfile 记录单个镜像的构建过程, docker-compse.yml 记录一个项目(project, 一般是多个镜像)的构建过程。 你说有些教程用了 dockerfile+docker-compose, 是因为 docker-compose.yml 本身没有镜像构建的信息,如果镜像是从 docker registry 拉取下来的,那么 Dockerfile 就不需要;如果镜像是需要 build 的,那就需要提供 Dockerfile. docker-compose 是编排容器的。例如,你有一个php镜像,一个mysql镜像,一个nginx镜像。如果没有docker-compose,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。而用了docker-composer之后,你就可以把这些命令一次性写在docker-composer.yml文件中,以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-composer up命令就ok了。 dockerfile 的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。Dockerfile - 为 docker build 命令准备的,用于建立一个独立的 image ,在 docker-compose 里也可以用来实时 build docker-compose.yml - 为 docker-compose 准备的脚本,可以同时管理多个 container ,包括他们之间的关系、用官方 image 还是自己 build 、各种网络端口定义、储存空间定义等 参考文献: https://blog.csdn.net/DDFFR/article/details/77049118 系统运维 2019-11-09 07:21:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 安装方式: 1):通过ppa(源) 方式安装. 2):通过官网安装包安装.JDK官网下载地址 一:使用ppa(源)方式安装: 1):添加ppa源 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 2):安装oracle-java-installer(jdk8版本) sudo apt-get install oracle-java8-installer 注:安装器会提示是否同意条款,根据提示选择yes即可,若不想手动输入,则可以采用以下方式自动完成: echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections 3):设置默认的jdk,可以安装多个jdk版本 sudo update-java-alternatives -s java-8-oracle 4):测试jdk是否安装成功 java -version javac -version 二:使用安装包安装:JDK官网下载地址 1):官方下载对应的.gz包,这里以jdk-8u181-linux-x64.tar.gz为例 2):创建一个目录用于存放解压后的文件,并解压缩到该目录下 sudo mkdir /usr/lib/jvm sudo tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm 3):修改环境变量 sudo vi ~/.bashrc 4):文件末尾追加如下内容 #set oracle jdk environment export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181 ## 这里要注意目录要换成自己解压的jdk 目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 5):使环境变量生效 source ~/.bashrc 6):设置默认jdk sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_181/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_181/bin/javac 300 sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_181/bin/jar 300 sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_181/bin/javah 300 sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_181/bin/javap 300 7):执行 sudo update-alternatives --config java 8):测试是否安装成功 java -version javac -version 系统运维 2019-11-08 22:50:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 1.前言 最近在优化网站的访问速度,为网站开启http2协议,这个协议有什么优点呢?如下: http2是下一代的传输协议,以后都会普遍用它,是一个趋势。 http2有多路复用特性,意思是访问一个域名下面的资源,多个请求共用一条TCP链路,所以比http1.1要快得多。 2.准备工作 需要重新编译openssl1.0.2以上版本,因为我们系统的版本都是centos6的,不支持直接yum更新openssl,如果是centos7,直接yum update openssl -y 即可更新 编译完成openssl后,需要重新使用openssl的库文件重新编译Tenginx,我们使用的Tengine版本是Tengine/2.2.2。 3.操作步骤 安装 openssl-1.0.2t #进入/usr/local/src,一般软件包都放这里 cd /usr/local/src #下载安装包 wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz tar -zxvf openssl-1.0.2t.tar.gz cd openssl-1.0.2t ./config shared zlib #默认安装找/usr/local/ssl make && make install #先备份之前的老版本 mv /usr/bin/openssl /usr/bin/openssl.old mv /usr/include/openssl /usr/include/openssl.old #建立软连接 ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl /usr/include/openssl #把动态库加入系统配置路径 echo "/usr/local/ssl/lib" >> /etc/ld.so.conf #查看动态库是否生效 ldconfig -p #检查openssl版本 openssl version 安装Tenginx cd /usr/local/src wget http://tengine.taobao.org/download/tengine-2.2.2.tar.gz tar tengine-2.2.2.tar.gz cd tengine-2.2.2 #这里需要修改一下tengine的代码,因为我们是手动编译的openssl,依赖库路径和原来系统安装的不太一样,所以需要手动指定 vim auto/lib/openssl/conf #在大概32行配置原来配置如下: CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a" CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a" #修改成如下,保存退出 CORE_INCS="$CORE_INCS $OPENSSL/include" CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h" CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a" CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a" #先安装一些依赖(我是升级,其实不需要安装依赖了,如果是首次安装tenginx,就需要安装依赖) yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake jemalloc jemalloc-devel #开始编译tenginx cd /usr/local/src/tengine-2.2.2 && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_concat_module --with-jemalloc --with-http_v2_module --with-http_secure_link_module --with-openssl=/usr/local/ssl make ##注意,如果是第一安装tegninx,只需要只需执行以下命令 make install #但是我是安装过了,所以需要备份老的tenginx cp -af /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak cp -af /usr/local/nginx/sbin/dso_tool /usr/local/nginx/sbin/dso_tool_bak #拷贝编译好的tenginx到对应目录 cp /usr/local/src/tengine-2.2.2/objs/nginx /usr/local/nginx/sbin/ cp /usr/local/src/tengine-2.2.2/objs/dso_tool /usr/local/nginx/sbin/ #然后重启Tenginx,就算编译安装完成啦 Tenginx http2配置 #配置http2很简单,如下: server { #http 不支持http2的传输协议,所以80端口不变 listen 80 # listen在原https配置文件基础上添加http2 listen 443 ssl http2; server_name www.oneq.work; ..... } #另外附上一份完整的支持http2的Tenginx配置 upstream server_backend { server ip:80 weight=10; server ip:80 weight=10; keepalive 800; #下面检测端口的配置需要Tenginx的才有效,不是Tenginx需要安装额外的插件或者直接注释即可 check interval=5000 rise=3 fall=3 timeout=5000 type=tcp; } server { listen 80; listen 443 ssl http2; server_name xxx.xxx.xxx; req_status server; ssl_certificate /usr/local/nginx/certs/xxx.xxx.xxx.crt; ssl_certificate_key /usr/local/nginx/certs/xxx.xxx.xxx.key; ssl_session_timeout 5m; ssl_protocols TLSv1.1 TLSv1.2 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass_header User-Agent; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Connection ""; proxy_http_version 1.1; access_log logs/access.log main; location / { proxy_pass http://server_backend/; access_log logs/server_backend.log main; } error_page 404 /404.html; location = /404.html { root html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 4.效果展示 5.总结 1.第一次安装tenginx和升级步骤有所区别,需要注意下 2.http不支持http2的传输协议,所以80端口还是使用http1.1的协议,https使用http2的传输协议 > 作者博客 青叶的博客 系统运维 2019-11-08 20:52:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 1. 微服务项目部署的缺点?如何解决? 答: 假如在一个机子上部署会导致配置的混乱,每个系统的配置可能不同。解决方案:使用虚拟化技术 2. 如何部署项目到Docker上,并且 生成 一个 Docker镜像? 答: 直接使用docker-maven-plugin插件可完成从打包到构建镜像、构建 容器等过程。 步骤: 在pom.xml中配置插件,提交到仓库中,在linux上使用 git 将代码下下来,然后按照命令启动, 详细位置: 学成在线20天讲义maven构建镜像 3. jekins 如何 构建 一个 容器 的步骤? 答: 从 代码库中 拉取代码,构建镜像,推送到 镜像私服,拉取镜像,创建容器。 4. 使用 jekins 构建一个任务需要哪些配置? (1)配置代码位置(代码 中 maven要将需要装的插件装好) ( 2 )构建镜像,创建容器(添加命令) 5. 是否可以用一句命令实现打包,构建镜像.,构建容器步骤? 答:可以,在 项目pom文件中需要安装相应的插件。 6。 打包,构建镜像等等这些命令能够执行的前提是什么? 答: 在项目中添加了相应的插件(要在pom.xml中配置) 系统运维 2019-11-08 19:17:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 常用选项: -E :开启扩展(Extend)的正则表达式。 -i :忽略大小写(ignore case)。 -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。 -n :显示行号 -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。 -o :只显示被模式匹配到的字符串。 --color :将匹配到的内容以颜色高亮显示。 -A n:显示匹配到的字符串所在的行及其后n行,after -B n:显示匹配到的字符串所在的行及其前n行,before -C n:显示匹配到的字符串所在的行及其前后各n行,context 当grep只需要找一个单词里的几个字符时需要使用'',比如需要找test中的es则需要表示为 grep 'es' filename ;当列出的选项中有其他干扰选项的时候,比如aes,则需要剔除包含以a开头含有es的单词,可以这样表示 grep '[^a]es' filename 同理,当列出的内容中包含过多的其他内容,比如Aces,则需要剔除es前除了大写字符的所有内容。表达如下grep '[^a-z]es' filename 当需要列出以特定字符开头的行时可以这样表达 grep -n '^test' filename tip: 在[]中的^表示不以[]中的内容开头,而在[]外的^则表示以后面的内容开头。 系统运维 2019-11-08 17:43:00 「深度学习福利」大神带你进阶工程师,立即查看>>> 7.3.1 Nessus 7.4.1 IP资源漏洞扫描 8.1.1 应急流程 Nessus https://www.tenable.com/downloads/nessus Docker方式安装 docker pull sometheycallme/docker-nessus docker run -t --name nessus -p 8834:8834 sometheycallme/docker-nessus IP资源漏洞扫描 yum install nmap yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel gcc -y git clone https://github.com/vanhauser-thc/thc-hydra (9头蛇工具探测) ./configure make Make install git clone https://github.com/robertdavidgraham/masscan.git Make git clone https://github.com/grayddq/PublicMonitors.git pip install -r requirements.txt 参考文档 https://github.com/grayddq/PublicMonitors 应急流程 什么是应急响应 PDCERF模型 P (Preparation准备) D(Detection诊断) C(Containment抑制) E(Eradication根除) R(Recovery恢复) F(follow-up跟踪) 准备阶段 应急工具:ls, ifconfig, ps, top 已经被黑,无法用来查看真正信息 busybox webshell检测,病毒查杀 诊断:CPU被占,挖矿病毒 阻断:联系相应负责人,避免扩大,蠕虫及时处理 根除:寻找攻击者原因,攻击者的源头 黑客如何攻进来的?利用什么漏洞?在服务器中做了什么?清楚攻击者后门、webshell等 恢复、监控:清楚后门口恢复上线 应急报告、自省,改进措施 系统运维 2019-11-08 16:12:00 |