一、Nginx
1.1简介
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。
Ngin解决C10k的问题,c10k用来命名并发处理10k连接的问题
Nginx可以用做正向代理和反向代理,也可作为负载均衡使用
1.2发展趋势
1.3优势
1.高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应
2.内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所有它是轻量级的
3.简单稳定:配置简单,基本在一个conf文件中配置,性能比较稳定,可以7*24小时长时间不间断运行
4.模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。
5.支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。
6.低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的,如果使用F5等硬件来做负载均衡,硬件成本比较高。
7.支持多系统:Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows,由于Nginx是免费开源的,可以在各系统上编译并使用。
8.可以做正向代理与反向代理
二、http协议详解
2.1简介
HTTP–Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。
2.2URI
HTTP 请求的内容通称为"资源"。”资源“这一概念非常宽泛,它可以是你能够想到的格式。每个资源都由一个 (URI) 来进行标识。URL即统一资源定位符,它是 URI 的一种。一份文档,一张图片,或所有其他。
URI包含URL,URN
URL 用于定位 全称叫做:统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址
URN仅用于命名,而不指定地址。用于标识唯一书目的ISBN系统是一个典型的URN使用范例。例如,ISBN 0486275574(urn:isbn:0-486-27557-4)无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。
== URI可以被分为URL、URN或两者的组合。如果你一直使用URI这个术语,就不会有错。==
2.3统一资源标识符的语法 (URL)
- 协议:
"http://"
告诉浏览器使用何种协议。对于大部分 Web 资源,通常使用 HTTP 协议或其安全版本,HTTPS 协议。
另外,浏览器也知道如何处理其他协议。例如, “mailto:” 协议指示浏览器打开邮件客户端;“ftp:”协议指示浏览
器处理文件传输。
- 主机
www.example.com 既是一个域名,也代表管理该域名的机构。它指示了需要向网络上的哪一台主机发起请
求。当然,也可以直接向主机的 IP address 地址发起请求。但直接使用 IP 地址的场景并不常见。 - 端口
:80 是端口。它表示用于访问 Web 服务器上资源的技术“门”。如果访问的该 Web 服务器使用HTTP协议的标准
端口(HTTP为80,HTTPS为443)授予对其资源的访问权限,则通常省略此部分。否则端口就是 URI 必须的部分。 - 路径
/path/to/myfile.html 是 Web 服务器上资源的路径。在 Web 的早期,类似这样的路径表示 Web 服务器上的物理文件位置。现在,它主要是由没有任何物理实体的 Web 服务器抽象处理而成的。 - 查询
?key1=value1&key2=value2 是提供给 Web 服务器的额外参数。这些参数是用 & 符号分隔的键/值对列表。Web 服务器可以在将资源返回给用户之前使用这些参数来执行额外的操作。每个 Web 服务器都有自己的参数规则,想知道特定 Web 服务器如何处理参数的唯一可靠方法是询问该 Web 服务器所有者。 - 片段
#SomewhereInTheDocument 是资源本身的某一部分的一个锚点。锚点代表资源内的一种“书签”,它给予浏览器显示位于该“加书签”点的内容的指示。 例如,在HTML文档上,浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点代表的那个时间。值得注意的是 # 号后面的部分,也称为片段标识符,永远不会与请求一起发送到服务器。 - 示例
三、Nginx 部署-Yum
官网:http://www.nginx.org
安装完成后:
systemctl start nginx 开启nginx
systemctl enable nginx 设置开机自启
测试:
安装部署成功
四、Nginx基本配置
主配置文件 : /etc/nginx/nginx.conf
子配置文件: /etc/nginx/conf.d/
nginx默认网站主页配置文件 /etc/nginx/conf.d/default.html
实战:启动一个新的nginx网站
1 . 创建配置虚拟文件:
vim /etc/nginx/conf.d/zhao.conf
zhao.conf 即为所创建网站的配置文件
在 默认主页文件里写入东西,就是打开网站的内容 index.html
2 . 重启服务
systemctl restart nginx
3.域名解析
主机hosts 里写入IP 和网站名
浏览器访问 域名访问
这样,一个nginx网站就部署完成了
五、Nginx 日志Log
Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
日志格式以及存放位置:
5.1存放位置:
/var/log/nginx/
5.2格式
格式在主配里可以看到:
日志变量 | 值 |
---|---|
$remote_addr, | 远程地址: 记录客户端IP地址 |
$remote_user | 远程用户:记录客户端用户名称 |
[$time_local] | 本地时间:服务器自身时间 |
$request | 记录用户请求的URL也即访问的具体东西地址和HTTP协议类型 |
$status | 状态:记录请求状态 |
$body_bytes_sent | 发送给客户端的字节数,不包括响应头的大小 |
$http_referer | 记录从哪个页面链接访问过来的 (超链接) |
$http_user_agent | 记录客户端浏览器相关信息 |
$http_x_forwarded_for | 代理IP |
其中$status 为状态码 例如 404 ,403 200等
接下来具体看一条正确日志:
5.3错误日志
如果用户访问时出现了错误,那么错误日志便会记录下来
例如:
如果我们访问nginx网站,访问一个不存在的页面,便会出现404,只不过页面是默认的,例如:
那么怎么设置个性化页面呢?
1.修改主配置文件
在里面添加一条; error_page 404 /404.html;
2.修改子配置文件
在即将要访问的网站的配置文件里修改:
配置完成后重启nginx服务。
3.创建404个性页面
在即将要访问的网站的文件里创建
4.访问验证
这就是自己创建404 页面的完整过程;
补:
如果在网站文件下创建新的html文件,访问时只需要在域名后面加上/ 文件名即可.
六、NginxWEB模块
6.1针对默认主页做随机主页
对访问的网站进行微更新,每次访问不完全一样
1.创建主页的目录
2.启动随机主页
在nginx的默认页面中修改
/etc/nginx/conf.d/default.html
重启nginx
检验:
注意: 做这个实验一定要记住清空子配置文件里的除了默认主页面配置文件的其他配置文件!!!!!!!
6.2针对默认主页进行某个词语替换
1.修改默认主页配置文件
/etc/nginx/conf.d/default.conf
重启服务
测试:
6.3防盗链
1.构建两个网站,分别设置默认主页内容;
2.加入盗链
在b.com 的默认主页中设置内容时,路径设置为a.com下的文件
相当于设置默认主页时,把内容盗取的是其他网站上拿的,只要写上路径即可;
3.访问即查看b.com日志
a.com
/var/log/nginx/a.com.log 日志需要在网站的配置文件里写入!!!
再次访问b.com时发现,默认主页为a.com的主页内容;
那么就是b.com网站盗取了a.com网站里的内容;
4.启动防盗链功能
在a.com 的配置文件中加入防盗功能
再次访问b.com 文件不显示,应为a.com的网站里的文件被防止盗取,设置了防盗链。
设置后就可以访问了。
6.4访问控制
6.4.1基于主机
网站的访问可以设置基于主机,即设置谁可以访问网站
/etc/nginx/conf.d/default.conf
6.4.2基于用户
设置访问时需要用户和密码才可以访问
1.建立认证文件
生成密匙工具 :yum install -y httpd-tools
生成会话密匙:htpasswd -cm /etc/nginx/conf.d/passwd 用户名
2.启动
/etc/nginx/conf.d/default.conf