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, 超过阈值请求都会进行控制 }
复制