目录
一、网站页面访问流程
二、HTTP协议请求和响应
1、HTTP请求报文
2、HTTP响应报文
三、HTTP协议资源信息
四、评测网站好坏的指标:
五、常用的网站服务软件
六、nginx软件服务特点
七、nginx安装方式
01.yum安装
a 使用官方ym源进行安装
02.编译安装软件
(1)解决依赖
(2)下载好源码包
(3)解压软件、进入目录
(4)编译安装
八、nginx的目录结构
九、nginx服务的配置文件
1、cat /etc/nginx/nginx.conf 主配置文件
第一个部分:配置文件主区域配置
第二个部分:配置文件事件区域
第三个部分:配置http时间区域
2、cat /etc/nginx/conf.d/default.conf ---扩展配置文件
第四个部分:server区域信息(配置一个网站,即一个虚拟主机)
十、利用nginx搭建一个网站
1、编写虚拟主机配置文件
2、编写网站代码
3、平稳重启nginx
4、编写DNS配置信息(域名解析)
常见错误:
十一、利用nginx搭建多个网站
十二、虚拟主机访问方式
1、基于域名
2、基于地址
3、基于端口
十三、安全访问
1、用户访问地址进行控制
2、根据用户进行认证
十四、利用nginx搭建文件共享服务器
第一步:编写配置文件
第二步:将mime.type媒体资源类型文件里的类型注释掉
十五、中文显示出现乱码
十六、搭建配置文件别名功能
第一步:编写配置文件
十七、nginx日志 /var/log/nginx/
1、访问日志 access.log ---ngx_http_log_module 定义日志格式内容
2、错误日志 error.log ---Core functionality
十八、location作用说明
十九、利用nginx实现跳转功能
1、利用rewrite模块实现跳转功能:http_rewrite_module
2、利用return
00.客户端 浏览器输入网址信息点击回车ww.oldboyedu.com)
01.客户端 完成域名的解析过程(DNs)
02.客户端 直接访问相应网站服务器 建立TcP三次握手过程
03.客户端 访问网站服务器 发送HTTP请求报文多次
04.服务端 响应容户端请求 回复HTTP响应报文多次
05.客户端 浏览器看到网站页面
05.客户端 结束访问网站过程 完成TCP四次挥手过程
1)请求行 ---请求什么信息、协议版本
请求方法: Get --读/看---获取/拿过来
Post --写/提交
请求信息: index.html(首页文件)
请求协议: HTTP:1.1
HTTP:1.0 TCP短连接 只要请求就建立三次和四次握手
HTTP:1.1 TCP长连接 在超时时间内,请求时不再建立三次和四次握手过程
HTTP:2.0 TCP长连接(优化) 提高用户并发(同时)访问效率
2)请求头 ---客户端有关信息介绍说明
请求主机信息 HOST:www.srjxx.com、blog.srjxx.com
请求设备信息 HTTP-User-Agent: firefox、IE、chrome
3)空行 ---隔离上下文、说明请求头部结束
4)请求主体 ---只有POST方法可以提交请求内容
1)起始行 ---响应的状态码/状态信息等
状态码信息 访问请求是否成功
200、301(永久跳转)/302(临时跳转)、403、404、500、502
2)响应头部 ---响应的具体信息
响应的服务server:nginx
响应时间、响应类型、响应字符集。。。
3)空行 ---隔离上下文、说明响应头部结束
4)响应主体 ---响应返回的内容
URL:统一资源定位符
URI:统一资源标识符
learning.xidian.edu.cn / portal/sdfaf/index.html
URL URI
网站页面静态资源:要什么给什么,不用做解析、速度快
index.html、aaa.jpg
网站页面动态资源:要什么需要查询数据库解析后发给客户端,可交互
aaa.asp、aaa.php
出现?、&等符号,不便搜索引擎收录
伪静态页面(实际为动态)---方便搜索引擎收录、也可实现网页、数据库交互
IP:根据用户IP数目进行统计 300~400百万/周
PV:页面访问量 700~800百万/周
UV:记录独立访客数量
cookie:标识用户身份信息,保存在客户端
session:记录用户的一些会话操作,如登录操作
网站并发:(压测技术)
A种理解:网站服务器每秒能够接收的最大用户请求数 √
B种理解:网站服务器每秒能够响应的最大用户请求数 √√
c种理解:网站服务器在单位时间内能够处理的最大连接数 √√√
参考网址:http://alexa.chinaz.com/alexa_more.apx
处理静态资源的服务:
apache软件:http://apache.org
nginx软件:http://nginx.org
处理动态资源的服务:
PHP: php.net 终端浏览器进行访问
Tomcat(java): 利用移动端查看网页 安卓-java
Python: 开发难度低
高并发(特别是静态资源)、占用资源少。
可作为网站服务功能(apache)、负载均衡(LVS)、缓存(Squid)软件,多系统可用、实现网络通讯时,进行的是异步网络IO模型epoll模型(apache---select模型)
epoll模型:
找人:查看人员登记信息
小朋友上厕所:上厕所的都站在某个位置
select模型:
找人:一个一个屋子去问 ---线性轮询
小朋友上厕所:一个一个去询问
安装的是最新版本 软件目录结构比较标准(推荐)
1、更新官方源
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
2、yum安装nginx
yum install -y nginx
echo $?
3、启动nginx,检查是否安装正确
systemctl start nginx
systemctl enable nginx
4、测试是否启动
浏览器输入ip地址,看到nginx界面
b 使用非官方ym源进行安装 安装的不是最新版 目录结构会发生变化
下载安装软件包openssl-devel、pcre-devel
mkdir /server/tools
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -xzvf nginx-1.18.0.tar.gz
a 进行配置
./configure --prefix=... --user=... --group=...
--prefix=PATH 指定程序安装路径
--user 设置虚拟用户管理worker进程
--group 设置虚拟组管理worker进程
--with-http_..._module 开启...模块功能
--without-http_..._module 关闭...模块功能
b 进行软件编译
make 编译
高级语言变为二进制
c 编译安装
make install
实现nginx日志文件定时切割
日志切割方法一:脚本
#!/bin/bash
mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%F).log
systemctl restart nginx
日志切割方法二:利用专用文件切割程序--logrotate
vim /etc/logrotate.conf# see "man logrotate" for details
# rotate log files weekly ---默认切割日志的周期
weekly# keep 4 weeks worth of backlogs ---只保留几个切割后的文件
rotate 4# create new (empty) log files after rotating old ones
create ---创造出一个相同的源文件# use date as a suffix of the rotated file
dateext ---定义角标(扩展名称信息)# uncomment this if you want your log files compressed
#compress ---是否对切割后的文件压缩处理# RPM packages drop log rotation information into this directory
include /etc/logrotate.d ---加载/etc/logrotate.d的目录配置# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp { ----单独对某个文件进行切割
monthly
create 0664 root utmp
minsize 1M ---最小尺寸1M,小于1M不切割
rotate 1
}/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}# system-specific logs may be also be configured here.
总结:
01./etc/nginx 配置文件
02./var/log/nginx 日志文件
03./usr/bin/nginx 命令文件
04./usr/share/nginx/html 站点目录
/etc/nginx/nginx.conf ---主配置文件
/etc/nginx/conf.d/default.conf ---扩展配置文件
user www; ---定义worker进程管理的用户
注:nginx进程
master process:主进程---管理服务是否正常运行
worker process:工作进程---处理用户访问请求worker_processes 1; ---有几个worker进程(处理并发请求) ==CPU核数 / 核数两倍 ---lscpu(CPU(s)= 1)
error_log /var/log/nginx/error.log warn; ---定义错误日志
pid /var/run/nginx.pid; ---定义pid文件(有这个文件,代表服务已启动)
events {
worker_connections 1024; ---一个worker进程同时接受1024访问请求
}
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; ---指定日志路径格式
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; ---超时时间
#gzip on;
include /etc/nginx/conf.d/*.conf; ---加载配置文件
}
server {
listen 80; ---监听的端口
server_name localhost; ---指定网站域名
location / { ---进行匹配
root /usr/share/nginx/html; ---定义站点目录位置
index index.html index.htm; ---定义首页文件
}
error_page 500 502 503 504 /50x.html; ---优雅显示错误页面信息
location = /50x.html {
root /usr/share/nginx/html;
}
}
cd /etc/nginx/conf.d
vim www.confserver{
listen 80;
server_name srjxx.com;
location / {
root /usr/share/nginx/html
index index.html
}}
1、systemc reload nginx
2、nginx -s reloadnginx命令参数:
-t 检查语法
-T 即测试又将所有配置信息打印
-s stop/reload 将服务重启或停止
1、网站文件配置不正确
404 找不到
解决方法一:修改nginx配置文件---location
解决方法一:在站点目录中创建相应目录或文件数据
403 禁止访问
解决方法一:不要禁止
解决方法一:没有首页文件
2、DNS配置不正确
3、nginx配置文件修改需要重启
站点目录中代码文件信息调整,不需要重启
1、创建多个虚拟主机配置文件
2、创造站点目录和首页文件
3、重启并测试
只用指定的地址访问,必须systemctl重启,不能平滑,否则不起作用
listen 10.0.0.7:80;
当www.srjxx.com设置为8080,但客户端访问www.srjxx.com:80时,优先满足端口,服务端找到端口为80的内容,再发送过去
内网用户可以看
外网用户不能看
查看文档模块ngx_http_access_module
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
指令用法:
Syntax: allow address | CIDR | unix: | all;
Default: —
Context:http, server, location, limit_excepteg:
location /av {
root /home/cq/test;
index index.html
allow 10.0.0.0/24;
}
补充:location外面为全局信息,里面为局部信息
nginx认证模块: ngx_http_auth_nasic_module
指令用法:
location / {
auth_basic "说明"; ---开启认证功能
auth_basic_user_file ./passwd/htpasswd; ---加载用户密码文件
}(1)编写配置文件
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
auth_basic "说明";
auth_basic_user_file ./passwd/htpasswd;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
(2)创建密码文件(文件中密码文件信息必须是密文的)
命令:htpasswd 创建有密文信息的文件
安装:yum install -y httpd-tools命令参数说明:
-c Create a new file.
创建一个密码文件
-n Don't update file; display results on stdout.
不会更新文件;显示文件内容
-b Use the password from the command line rather than prompting for it.
免交互方式生成密码文件
-i Read password from stdin without verification (for script usage).
读取密码信息,采取标志输入,不做检查
-m Force MD5 encryption of the password (default).
用md5加密算法
-2 Force SHA-256 crypt() hash of the password (secure).
用SHA-256加密算法
-B Force bcrypt aencryption of the password (very secure).
用bcrypt加密算法
-p Do not encrypt the password (plaintext, insecure).
不进行加密
-D Delete the specified user.
删除指定用户修改密码文件权限:
chmod 600 ./htpasswd
chown www ./htpasswd nginx的working进程为www用户,所以属主改为www才能正确读取密码信息,否则报500错误eg: curl 10.0.0.7 -u cq:chengqi(-u 指定用户名和密码)
500 Internal Server Error
01:内部程序不正确
02:无法正确读取密码文件
应用模块:ngx_http_autoindex_modulelocation / {
autoindex on;
}
但是默认会查询首页文件,即是将配置文件里的index注释。可以index写一个找不到的文件即可
#text/plain txt;
此时识别不了txt文件,会将其下载
charset设置字符编码
location / {
charset utf-8;
}
server_name localhost srjxx.com;
第二步:建立host映射
10.0.0.7 srjxx.com
作用:
1、方便测试
2、定位要访问的网站服务器(负载均衡定位服务器)
3、利用nginx状态模块对网站进行监控
状态模块:ngx_http_stub_status_module
location = /basic_status {
stub_status;
}
第一步:重新创建虚拟主机,编写配置文件
vim server.conf
server{
listen 80;
server_name status.test.com;
stub_status;
}
第二步:重启nginx,编写映射关系
10.0.0.7 status.test.com
第三步:分析数据Active connections: 2
激活的连接数信息
accepts
发送的连接数汇总 TCP
handled
处理的连接数汇总 TCP
requests
总计请求数量 HTTP(长链接时,一个TCP可有多个HTTP连接)
Reading: 0
nginx服务读取请求报文的数量
Writing: 1
nginx服务响应报文信息数量
Waiting: 1
nginx队列机制,要处理的报文数量(先进行保存,等前面响应完,再处理)
注意:日志一定要做切割处理
cat /etc/logrotate.d/nginx/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
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; 调用日志格式
默认都在access.log,也可以每个虚拟主机单独设置。
$remote_addr:显示用户访问源ip地址
$remote_user:显示认证的用户名信息
$time_local:访问网站时间
"$request":请求报文请求行信息
$status:用户访问状态码信息
$body_bytes_sent:显示响应的数据大小信息(统计流量)
$http_referer:记录调用网站资源的连接地址信息(防止盗链)
$http_user_agent:记录用户使用什么客户端软件进行访问(谷歌、安卓、IE)
$http_x_forwarded_for:负载均衡
Syntax: error_log file [level]; 指定错误日志路径及记录的级别
Default:error_log logs/error.log error;
Context:main, http, mail, stream, server, locationeg: error_log /var/log/nginx/error.log warn;
错误级别:
debug: 调试级别,服务运行的状态信息和错误信息详细显示 信息越多
info: 信息级别,只显示重要的运行信息的错误信息
notice: 通知级别,更加重要的信息进行通知说明
warn: 警告级别,可能出现了一些错误信息,但不影响服务运行
error: 错误级别,服务运行出现错误,需要进行纠正 推荐选择
crit: 严重错误级别:必须进行修改调整
alert: 严重警告级别:即警告,必须进行错误修改
emerg: 灾难级别,服务以及不能进行正常运行 信息越少
模块说明:ngx_http_core_module
location进行匹配(uri)
错误页面优雅显示
location /cq {
root /home/cq;
error_page 404 /cq.jpg;
}location详细配置
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, locationlocation = / { ---精确匹配 优先级老大
[ configuration A ]
}location / { ---默认匹配 优先级最低
[ configuration B ]
}location /documents/ { ---按照目录进行匹配 优先级老三
[ configuration C ]
}location ^~ /images/ { --优先匹配/不识别uri信息中的符号 优先级老二
[ configuration D ]
}location ~* \.(gif|jpg|jpeg)$ { ---不区分大小写 优先级老三
[ configuration E ]
}
Syntax: rewrite regex replacement [flag];
rewrite 匹配的正则信息 替换成什么信息
Default: —
Context: server, location, ifeg: rewrite ^/(.*) http://www.test.com/$1 permanent;
^/ (.*) permanent
test.com / aaa.html 跳转方式(永久)
www.test.com/aaa.html
跳转方式
永久跳转:permanent 301 客户端缓存跳转的信息
临时跳转:redirect 302 客户端不会保存
打破出现无限循环方法:
1、在默认server上面再加一个server,server_name=test.com,rewrite=..
server{
listen 80;
server_name test.com;
rewrite ^/(.*) http://www.test.com/$1 permanent;
}
server {。。。}
2、利用if判断
if ( $host ~* "^test.com$" ) {
rewrite ^/(.*) http://www.test.com/$1 permanent;
}
server{
listen 80;
server_name test.com;
return 301 http://www.test.com;
}
server {。。。}