linux---集群架构初探(17)Nginx基础模块

官方文档:http://nginx.org/en/docs/

一、索引目录(ngx_http_autoindex_module

nginx默认不允许使用索引目录,自定义配置文件/etc/nginx/conf.d/pm.conf

二、状态监控(ngx_http_stub_status_module

 在/etc/nginx/conf.d/pm.conf的server区块中添加

注:因为这个页面是不对外开放的,只是运维人员便于监控,所以没必要记录日志。

访问网址 http://192.168.1.7/pm_stub_status

此时刷新页面,requests数会增加,因为TCP是长连接,只有在超时后刷新才会再次尝试连接,在/etc/nginx/nginx.conf中

代表连接65s后超时,如果将该值设置为0,再刷新页面时,每次刷新上述3个值都会增加(在成功连接的情况下)

注:如果使用restart重启服务,上述3个连接数都会被重置,而使用reload则不会。

三、访问控制

基于IP的访问控制:ngx_http_access_module

控制顺序:从上向下,匹配成功即停止。

企业思路:1.先写允许的ip,最后拒绝所有。2.先写拒绝的ip,最后允许所有

如监控的页面,我们只希望内网或某个ip能访问,可以这么写。

基于用户登陆认证的访问控制:ngx_http_auth_basic_module

首先配置用户名密码文件

配置需要登陆的页面(/etc/nginx/conf.d/pm.conf)

重启服务访问页面:

四、访问限制(ngx_http_limit_conn_module

通过对同一个ip的连接数,并发数进行限制,来抵御大流量的恶意攻击访问。

模块可以根据定义的key来限制每个键值的连接数,如同一IP的连接数。

HTTP请求建立在一次TCP连接上,一次TCP连接至少会产生一次HTTP请求。(三次握手-->http请求和响应-->四次挥手)

限制ip连接数

变量:

$binary_remote_addr  长度固定为4字节,正好能保存一个ip地址的长度,32位

$remote_addr      长度为7~15字节

限制请求频率(ngx_http_limit_req_module

limit_req zone=req_pm burst=3 nodelay; 每秒超出的请求数作延迟处理,若再超出burst的值,则返回503

使用ab工具进行压力测试(需先安装httpd-tools)

ab -n 20 -c 10 http://192.168.1.7/index.html

意思是有10个连接同时每次进行20次请求

五、日志配置(ngx_http_log_module

 access_log代表成功访问的日志  error_log代表出现错误的日志

log_format用于设置日志的格式,main为其格式名

  • $remote_addr  记录客户端IP地址
  • $remote_user 记录客户端用户名称
  • $request 记录请求的URL和HTTP协议(GET,POST,DEL,等)
  • $status 记录请求状态
  • $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
  • $bytes_sent 发送给客户端的总字节数。
  • $connection 连接的序列号。
  • $connection_requests 当前通过一个连接获得的请求数量。
  • $msec 日志写入时间。单位为秒,精度是毫秒。
  • $pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
  • $http_referer 记录从哪个页面链接访问过来的
  • $http_user_agent 记录客户端浏览器相关信息
  • $request_length 请求的长度(包括请求行,请求头和请求正文)。
  • $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
  • $time_iso8601 ISO8601标准格式下的本地时间。
  • $time_local 通用日志格式下的本地时间。
  • $http_x_forwarded_for 若客户端使用代理,会记录原始ip地址

access_log off;  代表关闭日志记录

error_log 路径 级别

  • debug:调试级别,记录的信息最多;
  • info:普通级别;
  • notice:可能需要注意的信息;
  • warn:警告消息;
  • error:错误消息;
  • crit:严重错误消息;

六、虚拟站点

在一台服务器上配置多个网站,几种方式:

基于IP:不同的IP地址(基本不会用这种方式)

基于端口:相同IP,不同的端口号

基于域名:相同的IP,相同的端口,不同的域名

基于域名就是将上图中,listen后面都改为80,server_name后面改为对应的域名,并在本地hosts文件中添加DNS解析,如

192.168.1.7  www.pm.com bbs.pm.com blog.pm.com

注:不同的站点请设置独立日志,混在一起无法区分。即在各自的server区块内设置access_log

七、Location

location用于控制网站路径。

语法规则:location [=|~|~*|^~] /uri/ { … }

 匹配符  匹配规则        优先级

=      精确匹配        1

     没有匹配符的精确匹配   2

^~    以某个字符串开头     3

~      区分大小写的正则匹配   4

~*    不区分大小写的正则匹配     5

!~    区分大小写的非正则匹配     6

!~*     不区分大小写的非正则匹配  7

/      通用匹配,任何请求都会匹配到  8

location = /abc {

    ……   

那么,如下是对的:

http://baidu.com/abc

http://baidu.com/abc?p1

如下是错的:

http://baidu.com/abc/

http://baidu.com/abcde

location ~ .avi$ {

  deny all;

}

表示凡是以  .avi  结尾的路径都不允许访问。

原文地址:https://www.cnblogs.com/1016391912pm/p/13129395.html