linux实用实战(3)

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一个状态码

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • I/O模型: 阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步:关注消息通知机制 消息通知:同步:等待对方返...
    Net夜风阅读 1,989评论 0 1
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,988评论 0 9
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,860评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 889评论 0 4
  • 大多数 Nginx 新手都会频繁遇到这样一个困惑,那就是当同一个location配置块使用了多个 Nginx 模块...
    SkTj阅读 7,578评论 0 12