Nginx
什么是Nginx
Nginx是一个开源且高性能、可靠的Http web服务、代理服务
开源:体现在直接获取Nginx的源代码
高性能:体现在支持海量的并发
高可靠:服务稳定
为什么选择Nginx
- 高性能、高并发
体现在单一时间如果有大量请求,nginx比其他的web服务器响应的更快 - 高扩展性
功能模块化, - 高可靠性
普通的web服务器,几周就要重启一次,而nginx一年内宕机的时间是以秒计算的 - 热部署
不停止服务的情况下升级nginx。(就像游戏的热更新) - 应用广泛
Nginx技术成熟,具备企业常用的功能,如代理,代理缓存,负载均衡,静态资源,动静分离,https,lnmp,lnmt等等 - 网络模型
nginx使用的是epool模型,apache使用的是select模型
select: 用户发起请求,会进行进行全局扫描,然后确定请求的目标
epool:用户发起请求,直接确定请求的目标。
Nginx的组成
- 第一部分:nginx 的二进制可执行文件
- 第二部分:nginx.conf 配置文件
前两部分定义了nginx处理请求的方式
- 第三部分:access.log记录nginx处理过的每一条信息
- 第四部分:error.log 查看异常问题
Nginx的安装
Nginx官网
必须安装官方版本
- 进入官网
- 下滑到底部选择稳定版的安装方式
- 选择自己的操作系统
- 在指定的目录中创建nginx.repo的文件,将框内的复制粘贴进去。(其实就是创建一个nginx的yum仓库)
- yum install nginx 不要用-y,确认源是来自nginx官方仓库
- systemctl enable nginx
- systemctl start nginx
- 如果本机开启了httpd,需要关闭。
Nginx配置文件介绍
- 默认的显示页面所在目录
vim /usr/share/nginx/html/index.html
- 查看nginx软件包含的内容以及各个部分的作用
- nginx配置文件内容详解
cat /etc/nginx/nginx.conf 配置文件所在目录
配置文件分三个部分,每个部分以 { } 来标记开始和结束。
第一部分 :核心模块
user nginx; 用户
worker_processes auto; 运行的worker进程数量(核心数就是cpu数),auto就是有几个就启动几个)
error_log /var/log/nginx/error.log notice; 错误日志存放目录
pid /var/run/nginx.pid; 启动后的进程id
第二部分:事件模块
events {
worker_connections 1024; 每个worker进程支持的最大连接数
use epoll 事件驱动模型,因为是默认所以此处省略
}
第三部分:内核模块 (调用的是conf.d中的所有.conf文件)
http {
协议
include /etc/nginx/mime.types;
包含的资源类型
default_type application/octet-stream;
当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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
长连接的保持和超时时间
#gzip on;
是否压缩
include /etc/nginx/conf.d/*.conf;
包含conf.d下的所有配置文件
}
- conf.d下有一个默认的配置文件default.conf,里面是编写.conf文件的帮助说明,在conf.d文件中可以创建多个不同的.conf的配置文件,这个文件决定了网页的端口,域名,资源所在位置。首先会先请求指定目录内文件的内容,如果没有则默认返还index.html里的内容,index.html决定了网页最终呈现的样子。
以域名的方式创建web页面
文件所在位置:/etc/nginx/conf.d
文件配置,注意每个句子结束一定要以分号;结尾。
server {
服务器
listen 80;
响应的端口
server_name game.chris.com;
响应的域名
location / {
/ 通用匹配的符号,如果不指定就是全局匹配,后面会有详细解释
root /code;
目录
index index.html;
默认返还该文件内的信息
}
}
:wq保存
nginx -t 检查语法
systemctl reload nginx重启加载配置
前往指定目录放入代码,或其他数据。
在浏览器输入域名,检查效果。
如没有域名,可以找到C:\Windows\System32\drivers\etc下的host文件,
将域名和ip添加到文件中,ip在前,域名在后。
通过域名的方式在一台服务器运行多个业务
只需要在/etc/nginx/conf.d/目录中创建多个不同的域名的.conf文件即可。步骤参考
以域名的方式创建web页面
.conf文件里的条件设置
如果需要条件作用于全局将设置写在第一个的域名下面,如果只需要作用于单个页面,写在location下面
目录索引(浏览设置)
- autoindex on | off
自动识别返还index.html,默认是off,需要主动设置 - autoindex_exact_size on | off
自动识别转换目录中的文件大小,默认是off,需要主动开启 - autoindex_localtime on | off
以本地时间为标准显示目录中文件的创建时间 - charset utf-8;
设定字符集,防止中文乱码
访问的控制(权限设置)
1. 基于IP的控制设置
allow 允许指定ip访问
deny 拒绝指定ip访问
两者的排序是有影响的,如果先指定允许,那么只有允许的ip可以访问,非指定ip不符合第一条规定则会跳往第二条,可是第二条规定是拒绝所有人,所以,会影响正常访问。
所以一般会先指定拒绝访问的ip,再允许除指定ip以外的访问。
如下:
deby 172.16.1.1/32;
allow all
2. 基于密码的身份验证
下载:
yum install httpd-tools
使用
htpasswd -c -b /etc/nginx/passwd_file chris 123456
解析:-c是创建一个新的文件
-b在命令行中直接输入用户名和密码
指定文件创建的目录后 输入 用户名 和 自定义密码 回车
然后在server文件中建议一个新的
locatinon /nginx {
auth_basic "hello";
自定义一个字符串
auth_basic_user_file "通过htppasswd创建的文件目录";
}
3.限流限速
限定同一个用户同一时间能够发起的http请求,或者限制某个用户的下载速度。
limit 必须放在http层
- 限制同一时间同一用户的请求次数limit_req官网教程
http {
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
zone是区域名称 速率是每秒1个
server {
limit_req zone=perip burst=5 nodelay;
5是延迟处理,多了就报错
- 限制同一用户同一时间的可以请求并发连接数limit_conn官网教程
http{
limit_conn_zone $binary_remote_addr zone=addr:10m;
server{
limit_conn addr 1;
并发连接数为1
- 限制同一用户的下载速度limit_rate官网教程
limit_rate_after 300m;
limit_rate 100k;
300兆以后将下载速度降至100k每秒
Nginx状态监控
不用创建目录,是一个监控端口,可以单独建立在一个location下面,单独设置即可。
- stub_status 监控设置
Active connections: 1 当前活动的连接数
server accepts:当前建立的tcp连接数
handled:已经处理 的连接数
requests:一共的请求数
reading:当前读取的请求数
writing:响应的请求数
waiting:等待等待的空闲客户端连接数
Nginx location(定位)
locationg_官网教程
location 是用来控制访问网站的uri路径(文件在所在目录)的。
location @name
@ 是内部重定向跳转
location /
通用匹配 优先级5
location ~*
不区分大小写的匹配 优先级4
location ~
区分大小写 优先级3
location ^~
以某个字符串开头 优先级2
location =
精确匹配 优先级1