一 nginx web服务软件
用户访问网站的流程:
利用DNS进行域名的解析
利用tcp的三次握手过程建立连
http请求报文数据:
1.0:tcp的短链接
什么是短链接:在http/1.0中默认使用短链接,也就是客户端和服务端每进行一次http操作都会建立一次链接,同时操作完毕之后也会就会立即断开连接。也就是说客户端每访问一次服务端就会建立一次链接,访问结束以后就会立即断开连接
1.1:tcp的长连接
什么是长连接:从http/1.1过后默认使用长连接,用于保持连接的特性,如果使用长连接的http请求会在响应头加上Connection:keep-alive这段代码。在使用长连接的额情况下,客户端和服务端之间建立的http协议在一次请求建立连接过后就会保持链接,客户端再次访问服务器的时候还是基于这次的链接进行访问。keep-alive不是永久保存链接的,他只有一段时间的保持链接不断,可以在不同服务器上面设置保存链接的时间
http响应报文数据:
curl -I www.baidu.com : 利用命令显示响应报文起始行和包头信息。
curl -v www.baidu.com :显示http协议访问访问网站的详细过程信息。
wget --debug www.baidu.com : 显示输出信息
利用tcp的四次挥手过程断开连接
url和uri的区别:
url:是uniform resource locator缩写,是统一资源定位器,它是一种具体的url。可以用来标识一个资源,并且还指明如何locate(定位)这个资源。
uri:是uniform resource identifier的缩写,廷议资源标识符,用于标识一个资源的。
网页资源:静态资源页面和动态资源页面
静态资源页面几个特征:
1) 每个页面都有一个固定的URL地址,且URL一般以.html、.htm、.shtml等常见形式为后缀,而且地址中不含有问号“?”或“&”等特殊符号。2) 网页内容一经发布到网站服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件。3) 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)。4) 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大,当网站信息量很大时,完全依靠静态网页比较困难(缺点)。5) 网页的交互性较差,在程序的功能实现方面有较大的限制(缺点)。6) 网页程序在用户浏览器端解析,如IE浏览器,程序解析效率很高,由于服务器端不进行解析,并且不需要读取数据库,因此服务器端可以接受更多的并发访问。当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析)。待客户端拿到数据后,在浏览器端解析并展现出来(优点)。
动态资源页面几个特征:
1) 网页扩展名后缀常见为:.asp、.aspx、.php、.js、.do、.cgi等。 ※2) 网页一般以数据库技术为基础,大大降低了网站维护的工作量。 3) 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等。4) 动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能通过读取数据库来返回一个完整的网页内容。5) 动态网页中的“?”在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓取网址中“?”后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求。(缺点)程序在服务器端解析,这相当于顾客点餐,饭店厨师做饭做菜,耗时长、效率低。在这个过程中,会消耗大量的CPU和内存、I/O等资源,并且多数还要提供读取数据库等服务,因此,其访问效率远不如静态网页,在服务器端解析动态程序的服务常见的有PHP引擎、Java容器(Tomcat、Resin、Jboss、Weblogic)等。
伪静态资源页面:从网站的URL地址看,伪静态表面上看起来是静态内容(如地址结尾带html),但这其实是通过rewrite规则实现的URL地址重写。改写后的URL地址规范、美观,有利于搜索引擎抓取,以及提升用户访问体验。如:http://oldboy.blog.51cto.com/2561410/803606和http://www.discuz.net/forum-3967-1.html这两个地址都是伪静态的。因为伪静态网页还是动态网页,所以从性能上考虑,伪静态功能不但没有提升网站性能,反而会降低网站的性能。这一点读者要理解。可能有些读者就会有疑问了,为什么动态网页不能直接转成静态网页呢?
应用部署nginx网站服务:
支持高并发:能够支持几万并发连接(特别是静态小文件业务环境)
资源消耗小:在3万并发连接下,开启10个nginx线程消耗的内存不懂200mb
可以做http反向代理和加速缓存,及负载均衡功能,内置对RS节点服务器健康检查功能,这个就相当于是专业的Haproxy软件或LVS的功能
具备Squuid等专业的缓存软件的缓存功
支持异步网络I/O事件模型epoll
select和epoll的区别:
利用编译安装方式安装nginx软件的方法:
linux的几种安装方式:
1. yum安装软件 2. rpm -ivh安装软件 3. 编译安装软件 4. 利用软件二进制包方式(绿色软件)
第一步:解决软件的依赖关系
yum install pcre-devel openssl-devel -y
第二步:创建nginx进程管理用户
useradd www -M -s /sbin/nologin : 创建虚拟用户
id www : 检查指定用户是否存在第三步:编译安装nginx软件
编译安装软甲三部曲:
①. 配置软件 cd /server/tools/ tar xf nginx-1.12.2.tar.gz cd /server/tools/nginx-1.12.2 ./configure --help --- 检查软件可以配置的参数信息 ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module ②. 编译软件 make ③. 编译安装 make install
第四步:创建软连接
ln -s /application/nginx-1.12.2/ /application/nginx
第五步:启动nginx服务
/application/nginx/sbin/nginx ps -ef|grep nginx setenforce 0 --- 关闭selinux安全功能 /etc/init.d/iptables stop --- 关闭iptables防火墙功能
nginx详细配置说明:
conf --- nginx程序配置文件保存目录 nginx.conf --- 程序主配置文件 grep -Ev "#|^$" nginx.conf.default >nginx.conf --- 精简化nginx默认配置文件
nginx配置文件的案例:
cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.etiantian.org; root html/www; index index.html index.htm; } server { listen 80; server_name bbs.etiantian.org; root html/bbs; index index.html index.htm; } server { listen 80; server_name blog.etiantian.org; root html/blog; index index.html index.htm; } }
创建出相应站点目录和网站页面文件
mkdir /application/nginx/html/{www,bbs,blog} -p for name in www bbs blog;do echo "10.0.0.7 $name" >/application/nginx/html/$name/index.html;done for name in www bbs blog;do cat /application/nginx/html/$name/index.html;done
重启nginx服务加载新的nginx的配置文件:/application/nginx/sbin/nginx -s reload
利用浏览器默认访问网站
做好DNS解析:
10.0.0.10 www.etiantian.org bbs.etiantian.org blog.etiantian.org html --- 站点目录 logs --- nginx程序日志目录 tail -f access.log --- 追踪日志信息(实时产生的日志信息)
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; $remote_addr --- 访问者(客户端)的源公网IP地址信息 $remote_user --- 登录用户信息 [$time_local] --- 访问时间信息 $request --- 请求的页面 $status --- 显示响应状态信息 $body_bytes_sent --- 响应报文主体大小 $http_referer --- 记录有什么网站进行盗链了 $http_user_agent --- 表示客户端用什么浏览器浏览的网站 $http_x_forwarded_for --- 当配置反向代理负载均衡时候 sbin --- nginx程序命令保存目录 nginx命令参数说明 -t --- 检查nginx配置文件语法是否正确 -s --- 控制服务运行状态 -s stop --- 停止nginx服务 -s reload --- 平滑重启nginx服务
二 nginx的反向代理和负载均衡
安装负载均衡服务软件
第一步:解决软件以=依赖关系
yum install pcre-devel openssl-devel -y
第二步:创建nginx进程管理用户
useradd www -M -s /sbin/nologinid www
第三步:编译安装nginx软件
编译安装软件三步曲:
#①. 配置软件mkdir /server/tools/ -pcd /server/tools/wget http://nginx.org/download/nginx-1.12.2.tar.gztar xf nginx-1.12.2.tar.gz cd /server/tools/nginx-1.12.2./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module #②. 编译软件make#③. 编译安装make install
第四步:创建软连接
/application/nginx/sbin/nginxps -ef|grep nginx
配置nginx的web服务:for name in www bbs;do echo "$(hostname) $name.etiantian.org" >/application/nginx/html/$name/oldboy.html;done
利用负载均衡服务器测试访问后端节点
[root@python7 ~]# curl -H host:www.etiantian.org 10.0.0.10/oldboy.html web01 www.etiantian.org [root@python7 ~]# curl -H host:bbs.etiantian.org 10.0.0.10/oldboy.html web01 bbs.etiantian.org [root@python7 ~]# curl -H host:www.etiantian.org 10.0.0.20/oldboy.html web02 www.etiantian.org [root@python7 ~]# curl -H host:bbs.etiantian.org 10.0.0.20/oldboy.html web02 bbs.etiantian.org
编写nginx反响代理服务配置文件
01. 定义我可以调度的web节点信息 upstream oldboy { server 10.0.0.10:80; server 10.0.0.20:80; } 02. 接收到请求后。进行调度 location / { proxy_pass http://oldboy; } proxy_set_header host $host; --- 修改反向代理到后端节点中请求报文头部信息 请求报文头部中host信息 ngx_http_proxy_module ngx_http_upstream_module
三 参数location得理解
“~”用于区分大小写(大小写敏感)的匹配; ~ /images {}“~*” 用于不区分大小写的匹配。还可以用逻辑操作符!对上面的匹配取反,即!~ 和 !~*。“^~”作用是在常规的字符串匹配检查之后,不做正则表达式的检查,即如果最明确的那个字符串匹配的location配置中有此前缀,那么不做正则表达式的检查。
[root@oldboyedu-s6 nginx-1.12.2]# cat conf/nginx.confworker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65;server { listen 80; server_name www.etiantian.org etiantian.org; root html/www; location / { return 401; } location /documents/ { return 403; } location ^~ /images/ { return 404; } location ~* \.(gif|jpg|jpeg)$ { return 500; } }}^~~*/documents//第1名:“location ~* \.(gif|jpg|jpeg)$ {” 正则匹配第2名:“location /documents/ {” 匹配常规字符串,如果有正则则优先匹配正则。第3名:“location / {” 所有location都不能匹配后的默认匹配。[root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200HTTP/1.1 401 UnauthorizedServer: nginx/1.12.2Date: Thu, 15 Mar 2018 04:13:41 GMTContent-Type: text/htmlContent-Length: 195Connection: keep-alive[root@oldboyedu-s6 nginx-1.12.2]# [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/documents/index.htmlHTTP/1.1 403 ForbiddenServer: nginx/1.12.2Date: Thu, 15 Mar 2018 04:14:42 GMTContent-Type: text/htmlContent-Length: 169Connection: keep-alive[root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/documents/w.jpgHTTP/1.1 500 Internal Server ErrorServer: nginx/1.12.2Date: Thu, 15 Mar 2018 04:15:56 GMTContent-Type: text/htmlContent-Length: 193Connection: close[root@oldboyedu-s6 nginx-1.12.2]# [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/images/www.jpgHTTP/1.1 404 Not FoundServer: nginx/1.12.2Date: Thu, 15 Mar 2018 04:16:52 GMTContent-Type: text/htmlContent-Length: 169Connection: keep-alive