(1)chrony时间服务器
配置文件:/etc/chrony
server:指明时间服务器地址
allow:提供给指定ip范围内的主机同步时间
allow all :允许所有客户端主机
deny:拒绝指定访问的ip
deny all :拒绝所有客户端
bindcmdaddress:命令端接口监听的地址
local startum 10 :即是自己未能通过网络时间服务器同步到时间,也允许将本地时间作为标准时间授权给其他客户端
开始配置chrony服务器:
服务端:vim /etc/chrony.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html)
server ntp6.aliyun.com iburst # 阿里云的时间服务器地址
server cn.ntp.org.cn iburst
server ntp.shu.edu.cn iburst
# Allow NTP client access from local network.
allow 192.168.0.0/16 #取消注释,允许同步时间的ip地址或网段
启动服务: centos7 默认已经安装chrony服务
[root@server ~]# systemctl start chronyd
[root@server ~]# systemctl enable chronyd
查看服务: 默认端口323
[root@server ~]# netstat -tnlpu|grep chronyd
客户端: vim /etc/chrony.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html)
server 10.117.20.221 iburst #填服务器地址
[root@chrony ~]# systemctl start chronyd
查看客户端的状态: 使用chronyc命令
(2)rsyslog日志服务
简介
rsyslog特性:
1.多线程
2.协议:UDP,TCP,SSL,TLS,RELP
3.存储日志信息于 mysql,PGsql,oracle
4.强大的过滤器,实现过滤日志信息中任何部分的内容
5.自定义输出的内容
rsyslog日志收集器重要术语:
1.facility:设施,从功能或程序上对日志收集进行分类
auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,security,suer,uucp,local0-local7,syslog
2.priority:优先级,日志级别
debug(调试),info,notice,warn(warning),err(error),crit(critical),alert,emerg(panic)
指定级别:
* :所有级别
none:没有级别
priority:次级别高于次级别的所有级别
=priority:仅此级别
程序环境:
主程序:rsyslogd
主配置文件:/etc/rsyslog.conf ,/etc/rsyslog.d/*.conf
服务脚本(centos6):/etc/rc.d/init.d/rsyslog
unit file(centos7):/usr/lib/systemd/system/rsyslog.service
开始配置日志服务器:
修改服务端:/etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp #取消这两行的注释
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp #取消这两行的注释
$InputTCPServerRun 514
systemctl start rsyslog #启动服务
修改客户端: /etc/rsyslog.conf
#### RULES ####
*.info;mail.none;authpriv.none;cron.none @10.117.20.220 #填日志服务器ip
systemctl start rsyslog #启动服务
测试: 用客户端下载ntp服务进行测试,日志都在服务端主机/var/log/messages
客户端:安装软件测试
查看记录: 红圈勾起来的就是刚才master主机,安装ntp的记录
使用mysql记录日志:
[root@chrony ~]# yum -y install rsyslog-mysql #安装msyql模块
[root@chrony ~]# rpm -ql rsyslog-mysql #查看生成的文件
[root@chrony ~]# mysql </usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql #导入数据库
[root@chrony ~]# msyql #打开mysql数据库
MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'usyslog'@'localhost' IDENTIFIED BY 'psyslog';
#创建用户usyslog,密码为psyslog,并授权能访问Syslog数据库当中的所有表
MariaDB [(none)]> FLUSH PRIVILEGES;
#刷新权限
MariaDB [(none)]> EXIT
#退出mysql
[root@chrony ~]# vim /etc/rsyslog.conf
#### MODULES ####
$ModLoad ommysql #添加mysql模块
#### RULES ####
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none :ommysql:localhost,Syslog,usyslog,psyslog
#对应上面的参数:mysql模块:主机名,数据库名,用户,密码
[root@chrony ~]# systemctl restart rsyslog
#重启完以后就可以到mysql数据库中,Syslog数据库中的SystemEvents表中查看日志记录
loganalyzer,web的方式查看日志: (下载)https://loganalyzer.adiscon.com/download/
[root@chrony ~]# tar xf loganalyzer-3.6.5.tar.gz #我这里是先下载到电脑,然后用上传到服务器
[root@chrony ~]# cd loganalyzer-3.6.5 #进入到loganalyzer目录
[root@chrony loganalyzer-3.6.5]# cp -r src/ /var/www/html/log/ #loganalyzer目录里面,只需要用的src目录,cp至网站发布目录下面
[root@chrony ~]# cd /var/www/html/log/ #进入到log目录
[root@chrony log]# touch config.php #创建php配置文件
[root@chrony log]# chmod 666 config.php #首次配置需要权限
[root@chrony log]# systemctl restart httpd #重启服务
[root@chrony log]# chmod 644 config.php #首次配置完以后执行,关闭读写权限
(3)sudo用法
visudo命令:专门用来编辑/etc/sudoers
sudo -l #查看用户自身权限
sudo -k #清除登录缓存,
配置文件:/etc/sudoers
##Allow root to run any commands anywhere #找到这一行,在下面定义用户及权限
like ALL=(ALL) NOPASSWD:ALL, !/bin/su, !/usr/bin/passwd root, !/usr/bin/visudo
#说明:用户为like,拥有所有权限,使用sudo的时候不用输入自身密码,但这些命令,su,passwd,visudo,不能使用sudo来使用:
#说明: sudo su - root #这样不用输入root密码,就能直接切户至root用户
sudo passwd root #可以直接修改root密码
sudo visudo #可以直接编辑配置文件,进行修改里面的内容
配置文件图:
查看like用户的权限:
测试like用户权限:
定义别名:
查看定义的test用户权限:
nginx模块,配置文件详解
main配置段常见的配置指令:
分类:
正常运行必备的配置
优化性能的相关配置
用于调试及定位问题相关的配置
事件驱动相关的配置
正常运行必备的配置:
1. user
Syntax: user user[group]
Default: user nobody nobody;
Context: main
2. pid /path/to/pid_file
指定存储nginx主进程进程号码的文件路径
3. include file |mask
指明包含进来的其他配置文件片段
4.load_module file
指明要装载的动态模块
性能优化相关的配置:
1. worker_processes number |auto;
worker进程的数量;通常应该等于当前主机的cpu物理核心数
auto:当前主机物理cpu核心数
2. worker_cpu_affinity 0001 0010 0100 1000 ;
worker_cpu_affinity auto;
CPU MASK;
列如:四核cpu
0001 : 0号cpu
0010 : 1号cpu
0100 : 2号cpu
1000 : 3号cpu
3. worker_priority number;
指定worker进程的nice值,设定worker进程的优先级[-20,20]
4.worker_rlimit_nofile number;
所有worker进程所能打开的文件数量上限,比如:4*1024
调试,定位问题:
1. daemon on|off;
是否以守护进程方式运行nginx
2. master_process on|off;
是否以master/worker模型运行nginx;默认为on
事件驱动相关配置:
events{
.....
}
1. worker_connections 1024; #必须配置
每个worker进程所能够打开的最大并发连接数据
2. use epoll;
指明并发连接请求的处理方法
3.accept_mutex on|off;
处理新的连接请求的方法,on意味者由各worker轮流处理新请求,off意味着每个新请求的到达都会通知所有的worker进程
http协议相关的配置结构
http {
......
server {
listen address:port |port
server_name server_name
root /path/to/doucment_root
}
1. listen port ;
default_server :设定默认主机
ssl:限制仅能通过ssl连接提供服务
backlog=number:后援队列长度
rcvbuf=size:接受缓冲器大小
sndbuf=seize:发送缓冲区大小
2. server_name name ......;
指明虚拟主机的主机名称;后面可跟多个由空白字符隔开的字符串
支持*通配任意长度的任意字符;server_name www.test.com *.test.com www.test.*
匹配机制:
1.首先是字符串精确匹配
2.左侧*通配符
3.右侧*通配符
3.root path ;
设置web资源路径映射,用户指明用户请求的url所对应的本地系统上的文档在目录路径,
4.location [=|~|~*|^~|] url {....}
在一个server中location配置段可以有多个,用户实现从url到文件系统的路径映射,nginx会根据用户的请求的url来检查定义的所有的location
并找出一个最佳匹配,而后应用其配置
= :对url做精确匹配 列如:只匹配www.test.com/ ,不匹配:www.test.com/index.html
~ :对url做正常表达式模式匹配:区分字符大小写
~* :对url做正则表达式模式匹配,不区分字符大小写
^~ :对url的左半部分做匹配检查,不去分字符大小写
匹配优先级: =, ^~, ~/ ~*, /
实列:
server {
listen 80;
server_name www.ilinux.io;
root /data/nginx/vhost1/;
location / {
root /data/nginx/vhost2/; #如果location中定义了root,server中的root就被覆盖了
allow all ;
}
location ^~ /images/ {
root /data/nginx/vhost2/; #这里定义的location ^~ 优先级高于上面的location /
deny all;
}
location ~* \.(jpg|png)$ { #192.168.1.111主机不能访问.jpg|png结尾的文件,但是可以访问其他资源
deny 192.168.1.111;
allow all;
}
}
5.alias path;
定义路径别名,文档映射的另一种机制,仅能用户location上下文
注意:location中使用root指令和alias指令的意义不同
root,给定的路径对应于location中的/usr/左侧的/
alias,给定的路径对应于location中的/usr/右侧的/
6. index file...;
默认资源:http,server,location
7.error_page code :
自定错误状态页
error_page 404 =200 /notfound.html;
location = /notfound.thml {
root /data/nginx/error_pages;
}
定义客户端请求的相关配置:
8. keepalive_timeout timeout ;
设定保护连接超时时长,0表示禁止长连接,默认为75 (关键)
9. keepalive_request number ;
在一次连接上所允许请求的资源的最大数量,默认为100 (关键)
10.keepalive_disable none |browser ;
对哪种浏览器禁用长连接
11. send_timeout time ;
向客户端发送响应报文的超时时长,此处,是指两次写操作之间的时隔时长;
12.client_body_buffer_size seize:
用于接收客户端请求的报文body部分的缓冲区大小,默认为16k,超出此大小时,其将被暂时存到磁盘上的client_body_temp_path指令所定义的位置
13. client_body_temp_path path [level1 level2 level3 ]
用于设定与存储客户端请求报文的body部分的临时存储路径及子目录结构的数量
16进制的数字:
client_body_temp_path /var/tmp/client_body 2 1 1
2:表示256个一级子目录 16^2
1:表示16个二级子目录
1:表示16个三级子目录
14. ngx_http_access_module模块:
实现基于ip的访问控制功能
allow address |all ;
deny address |all ;
15.ngx_http_auth_basic_module模块:
location ~* /admin {
auth_basic "enter admin passwd"; #提示符
auth_basic_user_file /etc/nginx/.ngpasswd; #用户文件路径,
}
注意:htpasswd命令由httpd-tools提供 yum -y install httpd-tools
[root@localhost ]htpasswd -c -m /etc/nginx/.ngpasswd test_user
16. ngx_http_stub_status_module模块:
用户输出nginx的基本状态信息
location /ngxstatus {
stub_status ;
}
[root@centos7 ~]#curl http://www.ilinux.io/ngxstatus
Active connections: 3
server accepts handled requests
72 72 150
Reading: 0 Writing: 1 Waiting: 2
active connections:活动状态的连接数
accept:已经接受的客户端请求的总数
handed:已经处理完的客户端请求的总数
request:客户端发来的总的请求数
reading:处于读取客户端请求报文首部的连接的连接数
warting:处于向客户端发送响应报文过程中的连接数
waiting:处于等待客户端发出请求的空闲连接数
17.ngx_http_log module模块:
(1)ngx_format name string...;
string可以使用nginx核心模块及其他模块内嵌的变量
(2)access_log path [format buffer=size] [gzip=level] [flush=time][if=condition];
access_off ;
access_log /var/log/nginx/vhost1_ssl_access.log main ;
访问日志文件路径,格式及相关的缓冲的配置
buffer=size
flush=time
(3)open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
缓存日志文件相关的元数据信息
max:缓存的最大文件描述符数量
min_uses:在inactive指定的时长访问大于等于此值方可被当作活动项
inactive:非活动时长
valid:验证缓冲中各缓存项是否为活动项的时间间隔
18.ngx_http_gzip_module:
(1)gzip on|off; #定义时放在http中对所有server都生效,也可单独放在location中
是否启用压缩
(2)gzip_comp_level level;
指定压缩级别:默认1, 一般可以设置为6
(3)gzip_types mime_type;
压缩过滤器,仅对此定义的mime类型的内容启用压缩功能
(4)gzip_buffers number size;
支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小
(5)gzip_proxied off |expired |no-cache|no_store|private|no_last_modified|no_etag|auth|any;
nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在任何钟条件下启用压缩功能的
off:对代理的请求不启用
no-cache,no-store,private :表示从被代理服务器收到的响应报文首部的cache-control的值为此三者任何一个,测启用压缩功能
19.ngx_http_ssl_module 模块:
(1)ssl on |off
(2)ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件
(3)ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件
(4)ssl_protocols sslv2 sslv3 tlsv1 tlsv1.1 tlsv1.2 ;
支持ssl协议版本,默认为后三个
(5)ssl_session_cache off|none|builtin[:size] [shared:name:size]
builtin[:size]:使用openssl内建的缓存,此缓存为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存
(6)ssl_session_timeout time;
客户端一侧的连接可以复用 ssl session cache中缓存的ssl参数的有效时长
nginx虚拟主机:
1. 在/etc/nginx/nginx.conf添加 include conf.d/*.conf; #表示配置文件在 conf.d/ 目录下
2. 添加虚拟主机: vim /etc/nginx/conf.d/vhost1.conf
server {
listen 443 ssl;
server_name www.ilinux.com;
root /data/nginx/vhost1;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt ;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
}
20.ngx_http_rewrite_module模块: 放在server中
(1) rewrite regex replacement [flag];
将用户请求的URL基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URL;
rewrite /(.*)\.png$ http://www.lixuan928.xyz/$1.jpg; #把所有.png格式的重写为.jpg
rewrite /(.*)$ https://www.lixuan928.xyz/$1; #把所有访问都重写到https
rewrite /(.*)\.png$ /$1.jpg redirect; #返回重定状态码 302
注意:如果在同一级配置块中存在多个rewrite规则,那么会自上而下追个检查,被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含循环机制;
[flag]所表示的标志位用于控制此循环机制
如果replacement是以http://或https://开头,则替换结果会直接以重定向返回给客户端;
301:永久重定向
[flag]
last:重写完成后停止对当前URL在当前location中后续的其他重写操作,而后对新的URL启动新一轮重写检查,提前重启新一轮循环;
break:重写完成后停止对当前URL在当前location中后续的其他重写操作,而后直接跳转至重写规则配置块之后的其它配置,结束循环
redirect:重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,不能以http://或https://开头;
permanent:重新完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;
(2)return
return code [text];
return code URL;
return URL;
(3)rewrite_log on|off;
是否开启重新日志
(4)if (condition) {...}
引入一个新的配置上下文,条件满足时,执行配置块中的配置指令 server location
condition:
比较操作符:
== :等于
!= :不等于
~ :模式匹配,区分字符大小写
~* :模式匹配,不区分字符大小写
!~ :模式不匹配,区分字符大小写
!~* :模式不匹配,不区分字符大小写
文件及目录存在新判断:
-e ,!-e :是否存在(文件|目标|软连接)
-f ,!-f :文件
-d ,!-d :目录
-x ,!-x :执行
(5)set $variable value
用户指定要变量
21.ngx_referer_module 模块 #防止非法引用
(1)valid_referers none |blocked |server_names|string...;
定义referer首部的合法可用值
none:请求报文首部没有referer首部
blocked:请求报文的referer首部没有值
server_names:参数,其可以有值作为主机名或主机名模式
arbitrary_string:直接字符串,但可使用*作通配符
regular expression:被指定的正则表达式模式匹配的字符串;要使用~打头,列如~.*\.magedu\.com;
配置实列:
valid_referers none blocked server_names *.test.com test.* ~\.test\.;
if($invalid_referer){
return https://www.test.com/ ; #return到自己的网站
return 405; #return一个状态码
}