一 nginx web服务软件php
用户访问网站的流程:html
利用DNS进行域名的解析python
利用tcp的三次握手过程创建连linux
http请求报文数据:nginx
1.0:tcp的短连接web
什么是短连接:在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的区别:http://www.cnblogs.com/fangjie0410/p/7688365.html
利用编译安装方式安装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/nologin
id www
第三步:编译安装nginx软件
编译安装软件三步曲:
#①. 配置软件 mkdir /server/tools/ -p cd /server/tools/ wget http://nginx.org/download/nginx-1.12.2.tar.gz tar 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/nginx
ps -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.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 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.200 HTTP/1.1 401 Unauthorized Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:13:41 GMT Content-Type: text/html Content-Length: 195 Connection: keep-alive [root@oldboyedu-s6 nginx-1.12.2]# [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/documents/index.html HTTP/1.1 403 Forbidden Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:14:42 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/documents/w.jpg HTTP/1.1 500 Internal Server Error Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:15:56 GMT Content-Type: text/html Content-Length: 193 Connection: close [root@oldboyedu-s6 nginx-1.12.2]# [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/images/www.jpg HTTP/1.1 404 Not Found Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:16:52 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive