第10周总结 (nginx介绍并安装) (nginx配置信息详解) (nginx使用方法详解)
*************************************ansible批量管理剧本编写(利用角色编写)******************************
01. 课程知识介绍
1) ansible剧本整合功能
2) 网站服务概念知识(名词概念)
a 用户访问网站原理过程
b HTTP协议组成部分
c 网站资源信息(图片 视频 -- 静态资源 表格信息 搜索信息 评价 -- 动态资源)
d 网站用户访问度量方式(IP数 PV数 UV数)
3) 常用网站服务软件 nginx php tomcat apache
02. 课程知识回顾
1.剧本设置变量方法 shell变量
a 对剧本进行设置变量
b 对主机清单进行设置变量
· 针对一个主机设置变量
· 针对一个主机组设置变量
b 对剧本执行的命令添加参数信息 -e
PS: 如何调用变量: {{ 变量名 }} "{{ 变量名 }}"
2.剧本判断功能配置 when --> setup
单个进行判断
多个进行判断 or/and
对剧本进行取反操作 !=
3.剧本循环功能配置
loop with_itmes
PS: 当一个name中, 出现重复模块信息
4.剧本忽略错误功能
调试剧本/shell 创建用户
5.剧本标记功能配置
调试剧本/然后也可以对执行完的剧本进行标记
6.剧本执行输出功能
register -- debug(msg)
7.剧本执行触发功能
notify --> 配置文件分发 --> 重启服务
8.剧本执行提升效率 了解 gather_fact: no 收集受控主机信息
提升剧本执行速度
03. 如何实现一键化部署服务
nginx tomcat mysql docker
1) 掌握服务部署流程
a rsync服务 服务端部署/客户端服务
b nfs服务 服务端部署/客户端服务
c 全网备份 服务端部署/客户端服务
d 实时同步 服务端部署/客户端服务
存储服务器: (备份服务器上rsync服务必须配置)
a 安装软件程序 inotify+sersync
b 编写配置文件
c 启动服务程序
2) 如何将服务的部署过程利用模块实现
实时同步:
a 安装软件程序
ansible 172.16.1.31 -m yum -a "inotify-tools"
下载软件
ansible 172.16.1.31 -m get_url -a "url=https://github.com/wsgzao/sersync/archive/master.zip dest=/server/tools/sersync.zip"
ansible 172.16.1.31 -m unarchive -a "src=/server/tools/sersync_installdir_64bit.zip dest=/usr/local/ copy=no"
b 编写配置文件
ansible 172.16.1.31 -m copy -a "src=xxx dest=/usr/local/sersync_installdir_64bit/sersync/conf/"
c 启动服务程序
ansible 172.16.1.31 -m file -a "path=/usr/local/sersync_installdir_64bit/sersync/bin/sersync mode=755"
ansible 172.16.1.31 -m shell -a "/usr/local/sersync_installdir_64bit/sersync/bin/sersync -dro /usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml"
3) 将模块信息整合到剧本文件中 (剧本语法结构)
- hosts: 172.16.1.31
tasks:
- name: 01 install software
yum: name=inotify-tools state=installed
#get_url: url=https://github.com/wsgzao/sersync/archive/master.zip dest=/server/tools/sersync.zip
- name: 02 unarchive software
unarchive: src=/server/tools/sersync_installdir_64bit.zip dest=/usr/local/ copy=no
- name: 03 copy conf file
copy: src=/etc/ansible/ansible_playbook/confxml.xml dest=/usr/local/sersync_installdir_64bit/sersync/conf/
- name: 04 change file execute
file: path=/usr/local/sersync_installdir_64bit/sersync/bin/sersync mode=755
- name: 05 boot server
shell: /usr/local/sersync_installdir_64bit/sersync/bin/sersync -dro /usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml
4) 进行剧本测试执行过程
测试前需要:配置好主机清单
vim /etc/ansible/roles/hosts
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.7
[nfs_server]
172.16.1.31
[nfs_client]
172.16.1.41
172.16.1.7
5) 将多个剧本进行整合(需要确认主机清单配置)
整合剧本方法:
方法一: 将多个剧本信息整合在一个文件 简单易懂
(在同个目录内创建一个新的文件,将其他的剧本名称加入,然后使用命令执行这个心文件即可)
include: 将多个剧本进行包含
# cat summary.yaml
- include: auto_rsync.yaml
- include: auto_nfs.yaml
- include: auto_sersync.yaml
import_playbook : 将多个剧本进行包含
# cat summary.yaml
- import_playbook: auto_rsync.yaml
- import_playbook: auto_nfs.yaml
- import_playbook: auto_sersync.yaml
方法二: 利用角色功能进行多个剧本整合 官方推荐 看的明白
第一个历程: 创建角色目录
对不同的服务定义不同角色信息:
/etc/ansible/roles/rsync/
/etc/ansible/roles/nfs/
/etc/ansible/roles/sersync/
/etc/ansible/roles/all/
第二个历程: 创建角色目录中数据信息
vars: main.yaml 保存变量设置文件信息
tasks: main.yaml 保存所有任务配置文件
files: 所有要分发传输文件信息
templates: ??? 保存所有模板文件信息
headlers: main.yaml 保存所有触发器信息
mkdir all/{files,vars,tasks,headlers,templates}
ansible-galaxy init nfs
第三个历程: 编写角色目录中文件信息
编写tasks: main.yaml
[root@m01 tasks]# cat main.yml
---
# tasks file for rsync
- name: 01:安装软件程序
yum: name=rsync state=installed
- name: 02:编写文件信息
copy:
src: /etc/ansible/ansible_playbook/rsyncd.conf
dest: /etc/
- name: 03:创建虚拟用户
user:
name: rsync
shell: /sbin/nologin
create_home: no
when: ansible_eth1.ipv4.address == "172.16.1.41"
- name: 04:创建备份目录
file: path=/backup state=directory owner=rsync group=rsync
when: ansible_eth1.ipv4.address == "172.16.1.41"
- name: 05:创建密码文件
copy: content="rsync_backup:oldboy123" dest=/etc/rsync.password mode=600
when: ansible_eth1.ipv4.address == "172.16.1.41"
- name: 06:启动服务程序
service: name=rsyncd state=started enabled=yes
when: ansible_eth1.ipv4.address == "172.16.1.41"
- name: 02:创建密码文件
copy: content="oldboy123" dest=/etc/rsync.password mode=600
when: ansible_eth1.ipv4.address != "172.16.1.41"
编写files: rsyncd.conf
编写handlers: main.yml
# handlers file for rsync
- name: rsync_restart
service: name=rsyncd state=restarted
编写汇总剧本 site.yml
- hosts: rsync
roles:
- rsync
templates: 模板文件
01. 在templates目录中编写模板文件
port = {{ port }}
02. 设置模板变量信息
# cat vars/main.yml
---
# vars file for rsync
port: 874
03. 任务中必须调用模板目录中的文件
template:
src: rsyncd.conf
dest: /etc/
nfs + rsync + sersync
04. ansible课程总结
1) 掌握ansible主机清单配置 主机组配置
2) 掌握ansible模块使用方法
command shell script file copy fetch yum service cron user ping debug mount setup get_url unarchive
shell 万能模块
3) 掌握ansible剧本编写方法
a 注意剧本编写规范 3点 缩进 字典 列表
b 剧本执行过程方法 ansible-playbook --syntax-check / -i 主机清单文件
c 剧本文件扩展编写 变量* 判断* 循环* 忽略错误 标记 触发*
4) 掌握ansible剧本整合方法
简单方法: - include / - import_playbook
复杂方法: roles --> 不同目录(ansible-galaxy init 角色目录) --> 子目录信息(vars-main.yml tasks-main.yml file/template handlers-main.yml)
sersync rsync nfs 全网备份 nginx php mysql nginx负载均衡 keepalived zabbix
*************************************综合架构nginx网站架构服务简介以及安装******************************
04. 课程知识说明
1) HTTP报文信息
HTTP请求报文: 请求行 请求头
HTTP响应报文: 起始行(状态码)
2) 网站资源信息
网站静态资源
网站动态资源
网站伪静态处理
3) 网站访问量度量方法
IP PV UV
4) 如何部署安装nginx软件程序
a yum安装
b 编译安装
05. 网站访问原理过程:
1) 进行域名解析过程 DNS解析原理(本地查询 递归查询 迭代查询(A记录))
2) 和网站服务建立连接 三次握手过程
3) 发送HTTP请求信息 HTTP请求报文
4) 发送HTTP响应信息 HTTP响应报文
5) 和网站服务断开连接 四次挥手过程
03. HTTP网络协议介绍
超文本传输协议
HTTP请求报文: 客户端 ---> 服务端
1) 请求行:
> GET / HTTP/1.1
1) 请求方法 GET(获得 客户端 -- 从 -- 服务端获得页面数据信息 ) POST(提交 客户端 -- 发送数据 --- 服务端)
2) 请求内容 请求网站资源信息(页面文件 图片 视频 音频) 没有具体只需求会默认请求首页文件(index.html)
3) 请求使用的协议 HTTP/1.0 HTTP/1.1 HTTP/2.0(高可用)
TCP长链接: HTTP/1.1 一次链接,可以发送多个请求
TCP短链接: HTTP/1.0 一次链接,可以发送一次请求
2) 请求头:
> User-Agent: curl/7.2 --- 请求客户端软件信息
> Host: www.baidu.com --- 显示不同的网站页面信息
3) 空行
4) 请求主体:
get 方法访问网站是无法看到请求主体信息
post 方法访问网站是可以看到请求主体信息 ???
HTTP响应报文: 服务端 ---> 客户端
1) 起始行:
HTTP/1.1 200 OK
a 协议版本
b 状态码信息: 表示客户端访问结果
c 状态码描述:
200 OK --- 可以正常访问网站
301 Moved Permanently --- 永久跳转 会将跳转信息在浏览器中进行缓存 域名信息永久更换
302 Moved Temporarily --- 临时跳转 不会将跳转信息在浏览器中进行缓存 域名频繁变化情况
304 --- 本地进行缓存
401 --- 访问认证失败 VIP 账号/密码
403 --- 禁止用户访问 根据IP网段或地址
oldboy/* 可以访问 AV/* 内网人员访问
404 --- 访问页面资源无法找到
500 --- 网站架构服务器出现问题了
502 1) 服务器负载过高
503 2) 服务器网络异常
504 3) 服务器程序代码异常
4) 服务器是否服务停止 tail -f 日志
5) 服务器硬件资源不足
PS: 记忆常见状态码
======================================================================================
架构设计思想
用户01访问网站 北京 CDN服务器 --> 负载均衡 ---> 负载均衡 --> web01服务器
用户10万访问网站 web02服务器
网站资源缓存到本地 web03服务器
负载均衡 --> web01服务器
web02服务器
回源 web03服务器
用户01访问网站
用户10万访问网站 深圳 CDN服务器
用户10万访问网站 上海 CDN服务器
======================================================================================
2) 响应头:
3) 空行
4) 响应主体:
网站页面源代码信息 --- 浏览器解析 --- 查看页面内容
04. 网站的资源信息
识别哪些资源: .txt 文本 jpg图片 png img avi mp3 静态资源
不能识别资源: php 动态资源
媒体资源类型文件: /etc/nginx/mime.types --- 定义可以识别处理的静态文件信息
URL: 全称为Uniform Resource Location, 中文翻译为统一资源定位符
URI: 全称为Uniform Resource Identifier,中文翻译为统一资源标识符
www.taobao.com /markets/coolcity/coolcityHome?spm=a21bo.2017.201867-main.19.5af911d9lFFVW9
URL URI
静态资源:
1) 每个页面都有一个固定的URL/URI地址,且URL一般以.html、.htm、.shtml等常见形式为后缀,
而且地址中不含有问号“?”或“&”等特殊符号。
2) 网页的内容保存在网站服务器文件系统上,也就是说,
静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件。(缺点)
3) 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)
4) 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大,当网站信息量很大时,
完全依靠静态网页比较困难(缺点)。
5) 网页的交互性较差,在程序的功能实现方面有较大的限制(缺点)
6) 当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据,待客户端拿到数据后,
在浏览器端解析并展现出来, 这样可以应对大量的高并发请求.(优点)
动态资源:
1) 网页扩展名后缀常见为:.asp、.aspx、.php、.js、.do、.cgi等.
2) 网页一般以数据库技术为基础,大大降低了网站维护的工作量。(优点)
3) 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等。(优点)
4) 动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,
服务器解析这些程序并可能通过读取数据库来返回一个完整的网页内容。(缺点)
5) 动态网页中的“?”在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,
或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓取网址中“?”后面的内容,因此在企业通过搜索引擎进行推广时,
需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求。
伪静态资源:
1) 网页一般以数据库技术为基础,大大降低了网站维护的工作量。
2) 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等
3) 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)
05. 网站访问量度量方法:
IP: 记录每一个用户源IP地址,进行统计 不同IP访问 IP数据累加 awk数组 分析日志 ELK(开源软件程序) 第三方 百度统计
参考数值: NAT映射 网络拨号
PV: 记录统计页面访问量pageview awk数组 分析日志 ELK(开源软件程序) 第三方 百度统计
参考数值:
UV: 记录独立访客数
cookie: 会员卡 网站根据访问用户进行生成 保存记录到浏览器中 开发程序 第三方 百度统计
session: 会员记录表 网站根据用户访问情况生成 保存记录到缓存服务器 ???
统计网站: 站长之家:
http://alexa.chinaz.com/alexa_more.aspx
IP:20w PV: 30w 架构规模: 30-40 优化 web 数据库 CDN 阿里云
06. 常用网站服务软件:
处理静态资源网站服务: nginx(国内) apache(少量)
处理动态资源网站服务: php(php编写动态页面) tomcat(java编写动态页面) python(框架编写动态页面)
https://w3techs.com/technologies/overview/web_server/all
07. nginx软件概述说明
特点: 处理高并发能力(大量小文件), 比较强; 占用本地服务器资源比较少(内存资源)
功能: 1v3
nginx 可以实现网站web服务功能 apache
nginx 可以实现负载均衡功能 lvs haproxy
nginx 可以实现数据缓存功能 squid
缓存作用: 用于减缓后端压力
08. 如何部署nginx软件程序
1. yum
a 官方源yum安装nginx 软件目录结构(标准) 最新稳定版
第一个历程: 更新yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
第二个历程: 安装软件
yum install -y nginx
b 非官方源yum安装nginx 软件目录结构 历史版本
yum install -y nginx
2. 编译安装
第一个历程: 下载软件源码包
wget http://nginx.org/download/nginx-1.16.1.tar.gz
第二个历程: 下载nginx所需的依赖软件
openssl-devel : 可以让网站实现HTTPs访问
pcre-devel : 兼容perl语言正则表达式
第三个历程: 解压软件程序 进入到软件源码目录编译安装
编译安装软件三步曲
1) 配置过程
./configure --prefix=/application/nginx-1.16.1 --with-http_ssl_module --with-http_stub_status_module
--prefix=PATH set installation prefix
程序安装好后存储数据目录
--sbin-path=PATH set nginx binary pathname
设置命令文件保存目录
--modules-path=PATH set modules path
设置模块保存目录
--conf-path=PATH set nginx.conf pathname
配置文件保存目录
--error-log-path=PATH set error log pathname
--pid-path=PATH set nginx.pid pathname
--lock-path=PATH set nginx.lock pathname
--user=USER set non-privileged user for worker processes
指定worker进程管理用户
--group=GROUP set non-privileged group for worker processes
指定worker进程管理用户组
--with-http_ssl_module enable ngx_http_ssl_module
激活ssl模块功能
--with-http_stub_status_module enable ngx_http_stub_status_module
?????
2) 编译过程 == 翻译
make
3) 编译安装
make install
*************************************综合架构nginx软件配置信息详解******************************
02. 课程知识介绍
1) 网站目录结构信息 (配置文件目录 日志文件目录)
2) 网站配置文件信息 主配置文件 扩展配置文件
3) 静态资源网站搭建 多个扩展配置文件--站点目录--代码 运维
4) 网站数据统一存储
03. 网站服务软件目录结构
/etc/logrotate.d/nginx --- 实现日志切割功能
==============================================================================
日志切割方式:
1) 利用系统自带的软件实现日志切割
logrotate 程序
cat /etc/logrotate.conf logrotate程序主配置文件
weekly 日志切割周期(按天 按小时)
rotate 4 切割日志文件留存几次
create 创建新的日志信息
dateext 切割后日志文件标识信息(按照时间进行标识)
include /etc/logrotate.d 加载目录中配置文件信息
(将以下信息放入/etc/logrotate.conf中即可实现日志切割)
/var/log/wtmp { 指定日志文件单独进行切割处理
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
cd /etc/logrotate.d
cat nginx
(单独在/etc/logrotate.d下生成一个想要切割的日志的文件然后编辑下就可以实现切割)
nginx日志切割配置文件
/var/log/nginx/*.log {
daily 指定以天数转储
missingok 发生错误忽略
rotate 52 转储备份数量
compress 转储时候是否压缩
delaycompress 当前转储完成之后在下次转储压缩
notifempty 空的日志不进行转储
create 640 nginx adm 创一个640的属主和属组
sharedscripts 执行完当前转储统一执行脚本
postrotate 转储完成之后执行脚本
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
2) 利用编写脚本实现日志切割
#!/bin/bash
mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%F_%T).log
(编写定时任务把源日志文件更改名字进行切割,同时重启服务让服务从新生成一个日志目录)
systemctl reload nginx
0 */6 * * * /bin/sh 日志切割.sh &>/dev/null
==============================================================================
/etc/nginx --- nginx程序目录
/etc/nginx/nginx.conf --- nginx程序主配置文件 ******
/etc/nginx/conf.d/default.conf --- nginx程序扩展配置文件 ******
/etc/nginx/mime.types --- nginx媒体资源类型文件??? 决定了哪些资源可以被nginx处理
/etc/nginx/fastcgi_params --- 实现nginx将动态请求发送给动态服务 nginx -接口-> php
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params --- 实现nginx程序 -- python
/etc/nginx/koi-utf --- 程序字符编码有关文件
/etc/nginx/win-utf
/etc/nginx/koi-win
/etc/nginx/modules --- 程序模块目录
说明: nginx程序配置文件
/etc/sysconfig/nginx --- 程序进行调试有关(开发)
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service --- 控制服务是否能够正常运行文件 systemctl start nginx
/usr/lib/systemd/system/nginx.service --- shell介绍
/usr/lib64/nginx --- 程序运行需要调用库文件
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx --- 程序命令文件保存路径 ******
-v : show version and exit
显示软件版本
-V : show version and configure options then exit
显示软件版本和配置参数
-t : test configuration and exit *
检测配置文件合法性
(指令信息后面需要有;结尾/ 花括号信息必须成对 / 参数指定要书写正确 并书写在合理位置 )
-T : test configuration, dump it and exit
检测配置文件合法性, 并将配置文件内容进行输出
-q : suppress non-error messages during configuration testing
抑制非错误消息输出
-s signal : send signal to a master process: stop, quit, reopen, reload *
识别信号信息 stop reload
-p prefix : set prefix path (default: /etc/nginx/)
设置加载配置文件程序目录
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
指定需要加载配置文件
-g directives : set global directives out of configuration file
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.16.1 --- 文件文档说明信息
/usr/share/doc/nginx-1.16.1/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx --- 指定程序站点目录
/usr/share/nginx/html
/usr/share/nginx/html/50x.html --- 网站程序代码文件信息
/usr/share/nginx/html/index.html
/var/cache/nginx --- 程序缓存目录
功能强大:
a 网站服务应用 web服务 apache
b 网站负载应用 lb服务 lvs
c 网站缓存应用 缓存服务器 squid 蓝汛
/var/log/nginx --- 日志文件保存目录
04. 网站服务程序配置文件说明
/etc/nginx/nginx.conf
user nginx; --- nginx进程管理用户
==========================================================
nginx进程信息:
master process: 管理服务运行状态 进行存在--服务就可以正常运行 经理
worker process: 处理用户访问请求 HTTP请求报文 -- worker进程处理 工人
==========================================================
worker_processes 1; --- 指定worker进程数量 数量<= 服务器总的核心数
error_log /var/log/nginx/error.log warn; --- 错误日志保存路径 错误日志级别
pid /var/run/nginx.pid; --- 程序PID文件保存路径
events {
worker_connections 2048; --- 每个worker进程并发连接数 连接数*进程数<系统打开文件数
}
一个用户访问建立文件信息---创建socket
=============================================================================
系统打开文件数/系统文件句柄数 (当你的的系统遇到大量访问时,可以把文件打开数调大)
open files (-n) 2 所有程序可以打开文件数
程序运行起来 -- 进程nginx -- 打开一些文件 nginx.conf access.log error.log nginx.pid
修改调整系统打开文件数:
/etc/security/limitsc.conf
* - nofile 65535 20
模拟打开文件数异常情况 ???
============================================================================
http {
include /etc/nginx/mime.types; --- 加载媒体资源文件, 识别静态资源信息
default_type application/octet-stream; --- 默认识别文件类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 定义访问日志格式信息
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; --- 定义使用格式信息 保存日志路径
keepalive_timeout 65; --- 连接会话超时时间
include /etc/nginx/conf.d/*.conf; --- 加载其他配置文件信息
}
主配置区域: 程序核心功能配置信息
事件配置区域: 程序性能参数信息
HTTP配置区域: 网站服务功能信息
server配置区域: 每一个网站页面配置信息
location配置区域: 进行特殊功能设置 安全/跳转
if配置区域: 访问信息进行判断
/etc/nginx/conf.d/default.conf
server {
listen 80; --- 指定服务监听地址/指定服务端口信息
server_name bbs.oldboy.com; --- 指定网站服务域名信息
location / {
root /usr/share/nginx/html; --- 指定站点目录信息
index index.html index.htm; --- 首页文件定义 首页文件不存在,访问网站会报403错误
}
error_page 404 500 502 503 504 /error.html; --- 优雅显示错误页面
location = /error.html {
root /html;
}
}
PS: 错误状态码: 403 首页文件不存在了
*************************************nginx软件使用配置详解**********************************
01. 搭建简单静态网站服务
第一个历程: 安装部署nginx服务
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum install -y nginx
第二个历程: 编写nginx配置文件(扩展配置)
vim /etc/nginx/conf.d/www.conf
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html index.htm;
}
}
vim /etc/nginx/conf.d/bbs.conf
server {
listen 80;
server_name bbs.oldboy.com;
location / {
root /html/bbs;
index index.html index.htm;
}
}
vim /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.html index.htm;
}
}
第三个历程: 编写网站代码信息
# mkdir /html/{www,bbs,blog} -p
# for name in www bbs blog;do echo $name.oldboy.com >/html/$name/index.html;done
# for name in www bbs blog;do cat /html/$name/index.html;done
www.oldboy.com
bbs.oldboy.com
blog.oldboy.com
第四个历程: 配置DNS解析信息(本地地址解析配置)
hosts
10.0.0.7 www.oldboy.com bbs.oldboy.com blog.oldboy.com
02. 网站服务访问方式
方式一: 基于域名进行访问
www.oldboy.com --> IP地址
方式二: 基于端口进行访问
修改文件 listen 8080 --> www.oldboy.com:8080
用户访问网站:
01. 解封装数据包识别网络层地址信息
02. 解封装数据包识别传输层端口信息 可以匹配哪个网站 多个
03. 解封装数据包识别应用层请求报文 Hosts信息
匹配: 根据Hosts信息, 匹配不同网站页面
不匹配: 根据配置文件加载顺序, 显示第一个匹配网站页面信息
方式三: 基于地址进行访问
listen 172.16.1.7:80;
03. 网站页面实现文件资源共享存储功能 ( autoindex on ) ---- 需要关闭首页显示
编写配置文件
server {
listen 80;
server_name bbs.oldboy.com;
location / {
root /html/bbs;
#index index.html index.htm;
autoindex on;
}
}
/etc/nginx/mime.types 此文件决定是否下载或者显示
页面显示出现乱码:charset utf-8;
04. 网站服务安全配置说明 ( auth_basic auth_basic_user_file ) --- 具体内容可以灵活编写
1) 进行网站认证访问
认证模块: ngx_http_auth_basic_module
指令信息:
auth_basic : 开启认证功能
auth_basic_user_file : 设置加载指定密码文件
第一个历程: 编写配置文件
server {
listen 80;
server_name bbs.oldboy.com;
charset utf-8;
location / {
root /html/bbs;
#index index.html index.htm;
autoindex on;
auth_basic "财务网站认证";
auth_basic_user_file /etc/nginx/password;
}
}
第二个历程: 创建密码文件
创建密码文件(第一次创建时)
htpasswd -bc /etc/nginx/password oldboy oldboy123
添加用户信息
htpasswd -b /etc/nginx/password oldgirl oldgirl123
删除用户信息
htpasswd -D /etc/nginx/password oldboy
chown nginx /etc/nginx/password ******************************
需要解决(我没有解决的问题)
(worker 这里把属主改为www为的是可以让普通用户可以获取到密码.在用户输入密码后,
系统会将得到的密码与源密码进行比对,这时访问密码文件的是普通用户,如果文件
权限是644还好,但是如果是644,那么安全性不高,如果更改为600,那么普通用户又不能访问,
所以创建一个www用户,再把权限更改为600,这样密码文件既可以查看也提升了安全性.)
说明: 认证密码文件密码信息必须密文信息;
401 Authorization Required : 网站需要认证访问
500 Internal Server Error : 网站程序文件配置不正确/网站代码文件配置不正确
配置密码文件权限不正确
05. 网站服务状态信息收集:
状态模块: ngx_http_stub_status_module
实现监控网站状态信息:
第一个历程: 修改虚拟软件 虚拟网络编辑器
vmnet8 nat设置中 ---> 端口转发设置
访问 -- bbs.oldboy.com:9000 == 10.0.0.8:80
第二个历程: 编写本地解析文件
hosts:
192.168.16.200 bbs.oldboy.com
第三个历程:
配置方法:(没有试验过.只是理论书写)
server {
listen 80;
server_name bbs.oldboy.com;
location = /basic_status {
stub_status;
}
}
bbs.oldboy.com:9000/basic_status(访问这个网址即可看到监控界面)
Active connections: 2 --- 网站并发访问连接数量 5w
server accepts: 1090 --- 从网站服务运行开始接受了多少次三次握手请求
handled : 1090 --- 对请求建立三次握手的响应次数
处理数量和请求数量一般是一致, 只有到达服务器性能极限时, 会出现不一致情况
worker进程数 2*worker连接数 2048 = 4096
5000请求 4096
requests: --- 客户端总共发送HTTP请求数量
Reading: 0 --- 当前服务正在读取用户HTTP请求报文数量
Writing: 1 --- 当前服务正在处理用户HTTP请求报文数量
Waiting: 4 --- 等待处理请求数量
异步网络模型 epoll 网络编程
请求信息01 请求信息02 请求信息03 -- 队列机制 (内存) -- 秒杀
06. nginx服务访问流量控制 (扩展,老师并未将)
网站受到攻击,使网站压力过大
方式一: 基于IP地址连接数进行控制
说明: 控制一个源IP地址只能建立1个连接
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字节。
· $binary_remote_addr 变量的长度是固定的4字节 存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
zone: 定义共享存储空间
· name: 存储空间的名称信息
· size: 存储空间大小信息
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
zone: 调用响应的存储空间
number: 限制存储空间源IP地址可以处理的数量
配置样例:
[root@web02 conf.d]# cat www.conf
limit_conn_zone $binary_remote_addr zone=oldboy:10m;
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
limit_conn oldboy 1;
}
方式二: 基于用户访问请求的频次
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: 最大的请求阈值, 超过阈值请求都会进行控制
[root@web02 conf.d]# cat www.conf
limit_req_zone $binary_remote_addr zone=creq:10m rate=1r/s;
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
limit_req zone=creq burst=10;
}
07. 网站服务日志信息说明
cat /etc/nginx/ngng.conf
错误日志:
error_log /var/log/nginx/error.log warn;
debug --- 调试级别 输出信息较多
info --- 信息级别
notice --- 通知级别
warn --- 警告级别 错误提示 *
error --- 错误级别 *
crit --- 严重错误
alert --- 极其严重
emerg --- 灾难级别 输出信息会更少
企业配置: 配置在不同网站server中(在不同的www bbs blog 中配置,可以给他们每个都配置日志)
sever {
error_log /var/log/nginx/www_error.log warn;
}
cat /etc/nginx/ngng.conf
访问日志:
定义访问日志格式信息:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr : 访问网站客户端源IP地址
$remote_user : 记录认证用户名称信息
[$time_local]: 访问网站时间信息
$request : 请求行信息
$status : 状态码
$body_bytes_sent : 资源信息传输消耗的网络流量
$http_referer : 调用网站资源域名信息
$http_user_agent : 客户端访问软件信息
$http_x_forwarded_for : ??? 负载均衡
调用格式信息生成日志:
access_log /var/log/nginx/access.log main;(已经生成的日志 可以自由改动)
练习: 盗链练习:
环境准备:
老男孩: 10.0.0.7 www.oldboy.com
老女孩: 10.0.0.41 www.oldgirl.com
盗链代码文件:
<html>
<head>
<title>老女孩教育
</title>
</head>
<body bgcolor=green>
老女孩的网站!
<img src="http://bbs.oldboy.com/oldboy.jpg">
</body>
</html>
- 点赞
- 收藏
- 分享
- 文章举报
- ubunut11.0安装nginx基本目录结构介绍和配置使用方法
- ubunut 安装nginx基本目录结构介绍和配置使用方法
- Windows系统下Nginx服务器的基本安装和配置方法介绍
- 网站升级HTTPS,免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置方法
- Win7下SQLite安装配置与使用方法详解
- 使用阿里云https证书nginx安装配置详解
- 详解使用Nginx和uWSGI配置Python的web项目的方法
- Nginx 服务器安装及配置文件详解介绍
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
- nginx服务器的安装和配置的方法介绍
- windows下nginx安装、配置与使用详解
- YUM解决RPM包安装依赖关系及yum工具介绍本地源配置方法详解
- 全面介绍Github for Windows安装 配置使用方法
- Nginx实战之1.1-1.6 Nginx介绍,安装及配置文件详解
- Nginx服务器安装及配置文件与使用详解
- VPS配置安装nginx和vsftpd方法详解
- centos6使用rpm 安装nginx(可以不联网)、配置静态资源访问、遇到的问题以及解决方法
- postgresql(V-9.1) debian7.x(wheezy)安装过程+配置详解+数据库的基本使用方法
- [Jasper使用总结]Jasper套件的简要介绍和安装配置(一)
- Nginx安装、配置及使用总结