1、搭建时间服务器,日志服务器并简述sudo安全切换
server# yum –y install ntp chrony
server# vim /etc/chrony/chrony.conf
server 0.ntp.aliyun.com iburst
server 1.ntp1.aliyun.com iburst
allow 192.168.1.0/24
server# systemctl restart chrony
搭建日志服务器
rserver~]# vim /etc/rsyslog.conf
### Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
### Provides TCP syslog reception$ModLoad imtcp
$InputTCPServerRun 514
*.info;mail.none;authpriv.none;cron.none
:ommysql:192.168.1.91,Syslog,rsyslog,123
rclient ~]# yum -y install mariadn mariadb-server
rclient ~]# vim /etc/my.cnf.d/server.cnf
skip_name_resolve=on
innodb_file_per_table=on
rclient ~]# yum -y install rsyslog-mysql
rclient ~]# mysql
\. /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql grant all on Syslog.* to ‘rsyslog’@’192.168.1.%’ identified by ‘123’; flush privileges;
rclient ~]# vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.1.88
rclient ~]#yum –y install httpd php
documentroot /var/www/rsyslog
requireall granted
allowoverride none
rclient ~] cp -a loganalyzer-4.1.6/src /var/www/rsyslog
rclient ~] cp -a /loganalyzer-4.1.6/contrib/*.sh /var/www/rsyslog/
rclient ~] chmod +x /var/www/rsyslog/configure.sh
rclient ~] configure.sh
rclient ~]
sudo安全切换:
sudo 能够让获得授权的用户以另外一个用户(一般为root用户)的身份运行指定的命令
授权配置文件/etc/sudoers,但是一般使用visudo命令进行编辑。因为误操作引起系统异常。
授权配置文件的格式:
users hosts=(runas) commands
含义是,users列表中的用户(组),可以在hosts列表的位置上,以runas用户的身份来运行commands命令列表中的命令。
各个字段可能的值 为:
users: sudo命令的发起用户
用户名 或uid
%用户组名 或%gid (这里要注意用户需把基本组切换为该用户组,才能使用sudo)
User_Alias 用户别名
hosts: 允许的地址
ip地址
主机名
NetAddr
Host_Alias 主机别名
runas: 以某一用户的身份执行
用户名 或uid
Runas_Alias 用户别名
commands: 指定的命令列表
command(命令建议使用完整的绝对路径)
!command 表示禁止某一命令
directory
sudoedit:特殊权限,可用于向其它用户授予sudo权限
Cmnd_Alias 命令别名
这几个字段中hosts,runas, commands都可以用ALL来表示所有。
定义别名的方法:
ALIAS_TYPE NAME=item1,item2,item3,...
NAME:别名名称,必须使用全大写字符
ALIAS_TYPE :User_Alias,Host_Alias,Runas_Alias ,Cmnd_Alias
sodu命令执行时会要求用户输入自己的密码,为了避免频繁验密与安全其见,能记录成功认证结果一段时间,默认为5分钟,即5分钟内不需要再验证用户密码。
以sudo的方式来运行指定的命令
sudo [options] COMMAND
-l 列出sudo配置文件中用户能执行的命令
-k 清除此前缓存用户成功认证结果,之后再次运行sudo时要验证用户密码。
如果想要让用户输入部分命令时不需要进行密码验证,在sudo配置文件中commands列表部分,可以在命令列表前面加上"NOPASSWD",则其后的命令不需要密码,如果某些命令又需要密码就在前面加上“PASSWD”,所以commands列表可以为这种格式:
NOPASSWD 不需要密码的命令列表 PASSWD 需要密码的命令列表
安全提示:在sudo配置文件中
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
上面配置中root用户这行没有问题,但是%wheel这行要注意,如果把某用户加入到%wheel组,当用户把基本组切换为wheel组时就可以像root用户一样运行命令,较有风险的命令举例如下:
sudo su - root 不需要密码就可以切换到root用户
sudo passwd root 修改root用户密码,不需要输入原密码。
建议把%wheel改为
%wheel ALL=(ALL) ALL,!/bin/su,!/usr/bin/passwd root
2、详解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一个状态码
}