用户访问网站的流程
- 浏览器中输入www.baidu.com 到显示页面过程
1.域名解析ip DNS解析过程
2.tcp三次握手
3.http 请求报文
4.处理请求
5.http 响应报文
6.tcp四次挥手
7.显示页面
使用curl命令显示请求和响应的过程
[root@wsm ~]# curl -v www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
* Trying 220.181.38.149...
* Connected to www.baidu.com (220.181.38.149) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Thu, 13 Jun 2019 03:27:58 GMT
< Etag: "588604c8-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
衡量网站访问量大的单位
ip 网站每天有多少个独立的io 访问
uv unique user 独立的用户
pv page view 页面访问量
nginx实现http协议
利用nginx搭建网站环境
nginx编译安装
根据源代码 ./configure make make install 三步
- 创建安装目录
mkdir -p /server/tools - 下载nginx
wget -P /server/tools/ http://nginx.org/download/nginx-1.14.2.tar.gz - 解压nginx-1.14.2.tar.gz
[root@wsm tools]# tar xf nginx-1.14.2.tar.gz
[root@wsm nginx-1.14.2]# ll
total 732
drwxr-xr-x. 6 1001 1001 4096 Jun 14 12:29 auto
-rw-r--r--. 1 1001 1001 288742 Dec 4 2018 CHANGES
-rw-r--r--. 1 1001 1001 440121 Dec 4 2018 CHANGES.ru
drwxr-xr-x. 2 1001 1001 168 Jun 14 12:29 conf
-rwxr-xr-x. 1 1001 1001 2502 Dec 4 2018 configure
drwxr-xr-x. 4 1001 1001 72 Jun 14 12:29 contrib
drwxr-xr-x. 2 1001 1001 40 Jun 14 12:29 html
-rw-r--r--. 1 1001 1001 1397 Dec 4 2018 LICENSE
drwxr-xr-x. 2 1001 1001 21 Jun 14 12:29 man
-rw-r--r--. 1 1001 1001 49 Dec 4 2018 README
drwxr-xr-x. 9 1001 1001 91 Jun 14 12:29 src
- 安装nginx所需的环境
yum install -y pcre-devel openssl-devel 保证nginx使用时可用正则 - ./configure
--prefix= 指定安装位置
--user=www 指定nginx运行用户
--group=www 指定nginx运行用户组
--with-http_stub_status_module 安装nginx状态模块
--with-http_ssl_module 安装ssl模块 用来实现https
最后执行./configure --prefix=/application/nginx-1.14.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
创建虚拟用户 useradd www -s /bin/nologin
- make 编译
- make install 安装
- 安装完成检查 tree /application/nginx-1.14.2/
[root@wsm nginx-1.14.2]# tree -L 1 /application/nginx-1.14.2/
/application/nginx-1.14.2/
├── conf
├── html
├── logs
└── sbin
- 删除原目录存在的解压文件,进入编译后目录
[root@wsm nginx-1.14.2]# pwd
/application/nginx-1.14.2
[root@wsm nginx-1.14.2]# rm -rf /server/tools/nginx-1.14.2/
- 测试nginx启动
[root@wsm nginx-1.14.2]# /application/nginx-1.14.2/sbin/nginx -t
nginx: the configuration file /application/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.14.2/conf/nginx.conf test is successful
- 启动nginx
[root@wsm nginx-1.14.2]# /application/nginx-1.14.2/sbin/nginx
- 检查进程与端口
[root@web nginx-1.14.2]# ps -ef |grep nginx
root 10887 1 0 14:00 ? 00:00:00 nginx: master process /application/nginx-1.14.2/sbin/nginx
www 10888 10887 0 14:00 ? 00:00:00 nginx: worker process
root 10890 7751 0 14:00 pts/0 00:00:00 grep --color=auto nginx
[root@web nginx-1.14.2]# ss -lntup |grep 80
tcp LISTEN 0 128 *:80
- 使用浏览器访问web ip 提示 Welcome to nginx!表明部署成功
- nginx启动命令创建为软链接
[root@web nginx-1.14.2]# ln -s /application/nginx-1.14.2/ /application/nginx
[root@web nginx-1.14.2]# ln -s /application/nginx-1.14.2/sbin/nginx /sbin/
[root@web nginx-1.14.2]# which nginx
/usr/sbin/nginx
nginx配置文件及目录
drwxr-xr-x. 2 root root 4096 Jun 15 13:59 conf #配置文件 nginx.conf
drwxr-xr-x. 2 root root 40 Jun 15 13:59 html #站点目录 网站根目录
drwxr-xr-x. 2 root root 58 Jun 15 14:00 logs #日志 access.log访问日志
drwxr-xr-x. 2 root root 19 Jun 15 13:59 sbin #nginx管理命令
nginx #启动命令
nginx -t #检查语法
nginx -s reload #平滑重启 (必须在开启状态下)
nginx -s stop #关闭nginx(必须在开启状态下)
- 配置文件
[root@web conf]# ll
-rw-r--r--. 1 root root 2656 Jun 15 13:59 nginx.conf
-rw-r--r--. 1 root root 2656 Jun 15 13:59 nginx.conf.default
- 文件内容
过滤掉nginx.conf文件内的#和空行并定义到nginx.conf内
[root@test01 conf]# egrep -v "^$|#" nginx.conf.default >nginx.conf
worker_processes 1; #worker进程的数量
events { #事件区块开始
worker_connections 1024; #最大进程连接数
} #事件区块结束
http { #http模块开始
include mime.types;
default_type application/octet-stream;
sendfile on; #开启高效的传输模式
keepalive_timeout 65; #连接超时时间
server { #第一个server区块开始,表示一个独立的虚拟主机站点
listen 80; #默认端口80
server_name localhost; #提供服务的域名主机名
location / {
root html;
index index.html index.htm; #默认的首页文件
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
虚拟主机--搭建多个站点
多个server标签
[root@test01 conf]# vim nginx.conf
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.wsm.com; #修改域名主机名
location / {
root html/www; #创建或修改站点目录
index index.html index.htm; #修改首页文件内容
}
}
server {
listen 80;
server_name blog.wsm.com;#修改域名主机名
location / {
root html/blog;#创建或修改站点目录
index index.html index.htm; #修改首页文件内容
}
}
"nginx.conf" 27L, 557C written
[root@test01 conf]# nginx -t
nginx: the configuration file /application/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.14.2/conf/nginx.conf test is successful
[root@test01 conf]# nginx -s reload
[root@test01 conf]# mkdir -p /application/nginx-1.14.2/html/{www,blog}
[root@test01 conf]# for i in www blog
do
echo $i gcy >/application/nginx-1.14.2/html/$i/index.html
done
[root@test01 conf]# for i in www blog ; do cat /application/nginx-1.14.2/html/$i/index.html ; done
www gcy
blog gcy
- 在本地修改hosts解析,测试是否成功
nginx处理用户的请求流程
- 1.用户连接的是哪个端口
- 2.你要的站点是否存在 server_name
- 使用curl命令取出状态码
[root@test01 conf]# curl -s -w "%{http_code}\n" -o /dev/null 10.0.0.111
200
优化nginx配置文件
- 在conf目录下创建conf.d目录,用来放置多站点server配置文件
[root@web conf]# mkdir -p conf.d
- 在conf.d先创建多个server对应的配置文件并进行修改
[root@web conf]# vim conf.d/www.conf
[root@web conf]# vim conf.d/blog.conf - 删除主配置文件nginx.conf内多站点server并在http模块内写入 include conf.d/*.conf
[root@web conf]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include conf.d/*.conf;
}
nginx 访问日志
- 格式
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 logs/access.log main;
log_format:规定格式
remote_addr:客户端ip地址
remote_user:远程用户 默认是空
[time_local] :当前时间
request:请求起始行
status:状态码
body_bytes_sent:服务器向客户相应的内容的大小
http_referer:用户从哪里跳转
http_user_agent:用户使用的浏览器
http_x_forwarded_for:记录用户真实的ip地址(使用负载均衡时涉及到)
location匹配规则 匹配uri
应用场景
- 隐藏网站重要目录(禁止访问)
- 网站加速 让用户访问缓存(CDN)
“~”用于区分大小写(大小写敏感)的匹配; ~ /images {}
“~” 用于不区分大小写的匹配。还可以用逻辑操作符!对上面的匹配取反,即!~ 和 !~。
“^~”作用是在常规的字符串匹配检查之后,不做正则表达式的检查
location = / { www.oldboy.org符合) www.oldboy.org/ 符合) www.oldboy.org/index.html (不符合)
[ configuration A ]
}
location / { 默认规则 其他条件都不匹配的时候
[ configuration B ]
}
location /documents/ { 匹配路径 www.oldboy.org/admin/
[ configuration C ]
}
location /admin/ { www.oldboy.org/images/admin
你不能访问
}
nginx状态模块
root@web01 conf.d]# curl 10.0.0.7/status/
Active connections: 1 #与服务器已经建立的连接 当前并发数量
server accepts handled requests #总数
4 4 4
Reading: 0 Writing: 1 Waiting: 0
server accepts 一共接收多少请求
handled 一共处理多少请求
requests 客户一共发起了多少次请求
Reading: 0 正在读取多少个用户的请求头 (请求)
Writing: 1 正在响应多少个用户的请求 (响应)
Waiting: 0 有多少个用户在等待
workerprocess
nginx简易的认证
- auth_basic "closed site";
- auth_basic_user_file conf/htpasswd;
yum install httpd-tools -y
配置模块内容(注意使用绝对路径)
location /status/ {
stub_status ;
auth_basic "oldboy trainning";
auth_basic_user_file conf/htpasswd;
}
htpasswd -bc /application/nginx-1.14.2/conf/htpasswd oldboy 123456
chmod 400 /application/nginx-1.14.2/conf/htpasswd
chown www /application/nginx-1.14.2/conf/htpasswd
- 修改vim conf.d/www.conf
server {
listen 80;
server_name www.wsm.com;
location / {
root html/www;
index index.html index.htm;
}
location /status/ {
stub_status ;
auth_basic "oldboy trainning";
auth_basic_user_file /application/nginx-1.14.2/conf/htpasswd;
}
}
- 检查语法并重启nginx
[root@test01 conf]# nginx -t
nginx: the configuration file /application/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.14.2/conf/nginx.conf test is successful
[root@test01 conf]# nginx -s reload
- 在浏览器上验证
访问http://www.wsm.com/status/
页面显示
输入用户密码登陆成功
nginx rewrite功能
nginx处理用户请求(静态页面)
动态页面交给PHP代码(php处理)或 java代码(tomcat处理)
- 静态页面 用户浏览器进行处理 服务器只负责 请求与响应 处理速度快 支持并发大
- 动态 页面 服务器进行处理 把处理完成的结果 发送给用户 速度慢 支持并发不高 一般涉及到数据库
修改配置文件,添加rewrite
[root@test01 conf]# cat conf.d/www.conf
server {
listen 80;
server_name gcy.org;
rewrite (^.*$) http://www.wsm.com/$1 permanent;
}
server {
listen 80;
server_name www.wsm.com;
location / {
root html/www;
index index.html index.htm;
}
location /status/ {
stub_status ;
auth_basic "oldboy trainning";
auth_basic_user_file /application/nginx-1.14.2/conf/htpasswd;
}
}
执行curl -Lv gcy.org 跟随跳转到新地址
[root@test01 conf]# curl -Lv gcy.org
* About to connect() to gcy.org port 80 (#0)
* Trying 10.0.0.111...
* Connected to gcy.org (10.0.0.111) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: gcy.org
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.14.2
< Date: Wed, 19 Jun 2019 21:14:55 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Location: http://www.wsm.com//
<
* Ignoring the response-body
* Connection #0 to host gcy.org left intact
* Issue another request to this URL: 'http://www.wsm.com//'
* About to connect() to www.wsm.com port 80 (#1)
* Trying 10.0.0.111...
* Connected to www.wsm.com (10.0.0.111) port 80 (#1)
> GET // HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.wsm.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.14.2
< Date: Wed, 19 Jun 2019 21:14:55 GMT
< Content-Type: text/html
< Content-Length: 8
< Last-Modified: Tue, 18 Jun 2019 23:01:15 GMT
< Connection: keep-alive
< ETag: "5d096d3b-8"
< Accept-Ranges: bytes
<
www gcy
* Connection #1 to host www.wsm.com left intact
rewrite 小结
- 1.用户访问的url和实际url不同 与开发对接 url规则
- 2.伪静态 更容易被搜索引擎 收入
- 3.新老网站变化