https://www.jianshu.com/p/6a3e298b31be
第五章 企业简单应用
1.基于域名访问
www.baidu.com
基于IP地址访问
172.16.1.7
配置文件地址被改动一定要重启服务
基于端口访问
10.0.0.51:80
根据请求报文结构进行匹配 先进行匹配IP地址 (符合)
进行匹配端口 符合的端口进行下一步筛选 (符合)
进行匹配服务名称 (符合)
PS在匹配服务名称时会默认按照英文字母顺序进行匹配
(符合): 直接进行传输数据显示页面
(当除IP外有一项不符合) 会从符合的选项中显示第一个匹配项 按照字母从大到小进行排列
第一步: 编写扩展配置文件
vim /etc/nginx/conf/www.conf
server{
listen 80; # 指定端口 默认为80
server_name bbs.oldboy.com; # 指定域名信息
root /html/www; # 指定站点目录
index index.html; # 指定页面默认主页显示加载文件(默认指定显示index.html文件内容)
}
第二步: 创建站点目录 , 编写配置默认主页文件
mkdir -p /html/www
vim /html/bbs/index.html
PS: 使用 nginx -t
检查配置文件语法是否错误 无误后在进行下一步操作
第三步: 重启nginx服务
systemctl restart nginx
PS: 注意 修改配置文件关于IP地址信息不要用平滑重启 做DNS解析后登陆页面查看是否和预期一致
建立nginx和php的通讯
(1) 编写nginx扩展配置文件
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.php index.html;
}
location ~ \.php$ { # 指定匹配 .php结尾访问
root /html/blog; # 指定php解析的站点目录
fastcgi_pass 127.0.0.1:9000; # 指定php服务地址 : 端口
fastcgi_index index.php; # 指定php解析的默认网页文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
(将站点目录和网页文件传输信息给PHP服务)
include fastcgi_params; # 指定解析变量使php服务识别
}
}
更新yum源
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
下载php服务
yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
和配置一个静态网页差不多 设置多个配置文件及指定站点目录
第一步: 编写多个扩展配置文件
vim /etc/nginx/conf/www.conf
server{
listen 80; # 指定端口 默认为80
server_name bbs.oldboy.com; # 指定域名信息
root /html/bbs; # 指定站点目录
index index.html; # 指定页面默认主页显示加载文件(默认指定显示index.html文件内容)
}
第二步: 创建站点目录 , 编写配置默认主页文件
mkdir -p /html/bbs
vim /html/bbs/index.html
PS: 使用nginx -t检查配置文件语法是否错误 无误后在进行下一步操作
第三步: 重启nginx服务
systemctl restart nginx
PS: 注意 修改配置文件关于IP地址信息不要用平滑重启
(1) 修改扩展配置文件
server{
listen 80;
server_name www.old.com;
root /html/www;
index index.html;
autoindex on; # 指定不显示默认主页 显示目录结构
charset utf-8; # 指定语言解码方式
}
重启服务
实现IP地址限制需要编写nginx扩展配置文件 加入location模块
location /psp { # 匹配站点子目录
allow 10.0.0.1; # 进行什么处理
deny all; # all代表所有
}
location /hp {
deny 10.0.0.1; # 允许指定IP进行访问指定目录
allow all; # 禁止指定IP进行访问指定目录
} # 在server模块内嵌入编写即可
设置指定站点目录需要账号密码才可以进行访问
(1) 编写配置文件
server{
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
location /php{ # 指定加密目录
auth_basic "sss(内容自己定义无意义)"; # 指定开启服务
auth_basic_user_file /html/www/password.txt; # 指定密码文件路径
}
}
(2) 创建密码文件 密码文件需要以密文形式书写 确保安全性 利用htpasswd命令进行创建HTTP服务专用密码文件
默认htpasswd命令Linux系统没有安装 需要手动安装
yum install -y httpd-tools
# 安装服务
htpasswd参数集
-c 创建密码文件 并覆盖写入指定用户和密码信息
-bc 免交互创建密码文件
-b 免交互追加用户信息
-D 删除指定用户
语法: htpasswd -bc /html/www/password.txt zin 123456
(命令) (参数) (密码文件路径) (用户名) (密码)
(3) 重启服务
systemctl restart nginx
网站简易监控功能只监控开始监控之后的数据
(1) 编写配置文件 使用模块:
location / {
stub_status;
}
具体范例:
server {
listen 80;
server_name state.oldboy.com;
stub_status; --- 开启访问状态监控功能
}
(2) 重启后访问网站 默认显示为当前网站访问信息
当客户端发起连接会经过TCP三次握手连接上 期间长链接会在一次连接传输多个HTTP报文后 , 等待设定时间后在进行四次挥手断开连接
Active connections: 11
在线连接数 同时有多少客户端和网站服务端建立了三次握手过程
server accepts 289
从服务运行开始, 接收的所有连接请求总和
handled 289
从服务运行开始, 处理的所有连接请求总和
(一般两者数量相同 高并发或服务器限制了连接数量时会波动)
requests 1005
从服务运行开始, 所有HTTP请求包的数量(默认长连接)
修改配置文件可改为短链接: keepalive_timeout 65; --- 主配置文件参数, 数值为0表示开启短连接/数值非0表示开启长连接
Reading: 0
当前服务器正在读取客户端请求头的数量(连接数)
Writing: 1
当前服务器正在写响应信息的数量(连接数)
Waiting: 10
当前多少客户端在等待服务器的响应 (排队等待连接的客户端数)
网站收到攻击 爬虫 非内部人员测试时 会使网站的压力过大,这时就需要进行访问限制
说明: 一个源IP会释放多个连接数消耗服务器资源
这时就要控制一个源ip地址只能建立一个连接
方法: 使用http_limit_conn_module
模块进行限制
配置指令信息:
Syntax: limit_conn_zone key zone=name:size; 模块本体
Default: — 默认值
Context: http 指定可以在什么模块内使用
解释:
key: 变量信息,在连接建立后,收集什么信息做控制管理
$remote_addr
变量的长度为7字节到15字节 存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
(变量指定收集源IP地址存储指定的存储空间) $remote_addr
变量收集的信息占用存储空间大
$binary_remote_addr
变量的长度是固定的4字节 存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
(变量指定收集源IP地址存储指定的存储空间) $binary_remote_addr 变量收集的信息占用存储空间小
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
zone
: 定义共享存储空间
name
: 存储空间的名称信息
size
: 存储空间大小信息
Syntax: limit_conn zone number; 模块内定义功能
Default: — 默认值
Context: http, server, location 可在什么模块内使用
解释:
zone
: 调用响应的存储空间
number
: 限制存储空间源IP地址可以处理的数量
limit_conn_zone $binary_remote_addr zone=oldboy:10m;
定义收集的源IP放入oldboy存储空间 空间大小为10MB
server { ß 模块只能在http模块内使用 不能放入server模块
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
limit_conn oldboy 1; ß 定义oldboy存储空间的每个源IP只能有一个并行连接数
}
利用http_limit_req_module
模块
配置指令信息:
Syntax: limit_req_zone key zone=name:size rate=rate [sync]; 模块主体
Default: — 默认值
Context: http 可在什么模块内进行使用
具体指令说明
key: 变量信息,在连接建立后,收集什么信息做控制管理
$remote_addr
变量的长度为7字节到15字节 存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
$binary_remote_addr
变量的长度是固定的4字节 存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
zone
: 定义共享存储空间
name
: 存储空间的名称信息
size
: 存储空间大小信息
rate
: 多个请求频次信息
Syntax: limit_req zone=name [burst=number] [nodelay]; 主体模块指令
Default: — 默认值
Context: http, server, location 可在什么模块内使用
burst=number: 最大的请求阈值(频次 次数), 超过阈值请求都会进行控制
实例:
limit_req_zone $binary_remote_addr zone=creq:10m rate=1r/s;
rate 指定多久处理一次同一IP的请求 r=次数 s=时间
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
limit_req zone=creq burst=10;
指定最大的请求阈值为10, 超过阈值请求都会进行控制
}