一:Nginx介绍:
1.1:介绍:
Nginx(发音同 engine x)是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛索耶夫)所开发,最初供俄国大型网站Rambler.ru及搜寻引擎Rambler使用。
1.2、特点
- 优点
特点 | 描述 |
高并发量 | 基于 epoll/kqueue 模型开发,支持高并发量,官方说其支持高达 5w 并发连接数的响应 |
内存消耗少 | 善于处理静态文件,相较于其他web(比如:apache),占用更少的内存及资源 |
简单稳定 | 配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定 |
模块化程度高 | 功能模块插件化设计,可以自由配置相应的功能 |
低成本 | Nginx的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低 |
- 缺点
特点 | 描述 |
动态处理差 | nginx善于处理静态文件,但是处理动态页面相较于Apache之类重量级的web软件能力稍欠缺 |
二:Nginx部署:
2.1:软件安装:
# 使用命令安装
apt install nginx -y
检查nginx运行端口:
python@ubuntu:~$ sudo netstat -tnulp | grep nginx
[sudo] python 的密码:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1620/nginx -g daemo
tcp6 0 0 :::80 :::* LISTEN 1620/nginx -g daemo
Nginx启动,关闭,重启:
python@ubuntu:~$ sudo systemctl start nginx
python@ubuntu:~$ sudo systemctl stop nginx
python@ubuntu:~$ sudo systemctl restart nginx
Nginx服务的操作指令:
查看Nginx版本:
nginx -V :版本详细信息
nginx -v : 版本
使用配置文件启动:
sudo nginx -c /etc/engix/engix.config
退出
sudo nginx -s stop
重启:
sudo nginx -s reload
2.2: 默认配置信息:
- nginx软件默认目录
目录 | 描述 |
工作目录 | /etc/nginx |
执行文件 | /usr/sbin/nginx |
日志目录 | /var/log/nginx |
web目录 | /var/www/html/,首页文件是index.nginx-debian.html /usr/share/nginx/html/ 首页文件是index.html |
- nginx默认配置文件
文件目录 | 描述 |
默认文件 | /etc/nginx/nginx.conf |
其他目录 | /etc/nginx/{sites-available/sites-enabled/conf.d} |
- 文件结构
配置段 | 描述信息 |
全局配置段 | nginx的基础配置属性 |
http配置段 | nginx的web服务基础配置属性 |
server配置段 | 项目或者应用配置属性 |
location配置段 | url配置属性 |
2.3: Nginx访问原理:
主配置文件中指定从配置文件。/etc/nginx/nginx.config
在从配置项配置:前端传过来的路径会和root拼接,这样找到服务器中的绝对路径。
$uri :指的是前端传过来的路径
$uri/ : 指的是如果找不到就路径后面再加一个/,然后找这个文件夹中的index.html文件。
=404: 指的是如果都找不到就报404错误。
三:配置信息:
3.1:Server配置:
3.1.1:配置样式:
server {
listen 端口;
server_name 主机名;
...
}
3.1.2:listen属性:
# 1:精确样式
listen 192.168.203.153:8000
# 2:只写ip则默认是80端口
listen 192.168.203.153
# 3: 所有ip都可以
listen 0.0.0.1:8000
# 4: 只写端口默认ip都可以
listen 8000
# 5: 默认地址---下面两个相同
listen default_server
listen 127.0.0.1:80
3.1.2:server_name属性:
作用:当A主机只有一个开发的端口80,但是却存在多个网站,我们可以通过Server_name指定的域名,进行匹配后的下一步操作。
sever_name www.meiduo.site
3.1.3: root 属性:
作用:定义Server相应请求的html文件所在路径。
root /var/www/html;
3.1.4:index属性:
作用:定义响应请求后返回的文件名称或格式。
index index.html index.htm index.nginx-debian.html;
3.2:Location配置:
location 匹配规则 匹配的字符 {规则}
location / {
root /var/www/html; # 指定响应请求的文件所在路径
index index.php index.html index.htm; # 指定响应请求的默认文件名称
try_files $uri $uri/ =404; # 如果root指定的路径下有查找的文件,就返回,否则报错
}
3.2.1:匹配规则:
- 正则匹配
类型 | 含义 | 匹配方式 | 优先级 | 样式 |
~ 或 !~ | 普通正则-敏感 或 不敏感 | 正则符号 | 3 | location ~ .(jpe?g)$ {} |
~*或 !~ | 普通正则-不敏感 或 敏感 | 正则符号 | 3 | location ~* .(jpe?g)$ {} |
- 普通匹配
类型 | 含义 | 匹配方式 | 优先级 | 样式 |
=/路径 | 精确匹配 | 前缀 | 1 | location = /image {} |
^~ | 优先匹配 | 前缀 | 2 | location ^~ /page {} |
@ | 内部重定向 | 前缀 | location @name {} | |
空 / | 通用匹配 | 前缀 | 4 | location / {} |
- 匹配示例
常见示例:
location = / { location ~ \.(gif|jpg|png|js|css)$ { location !~* \.xhtml$ {
#精确规则A #正则规则D #正则规则G
} } }
location = /login { location ~* \.png$ { location / {
#精确规则B #正则规则E #通用规则H
} } }
location ^~ /static/ { location !~ \.xhtml$ {
#优先规则C #正则规则F
} }
访问效果如下:
访问根目录/, 比如http://a.com/ 将匹配规则A
访问 http://a.com/login 将匹配规则B
访问 http://a.com/static/a.html 将匹配规则C
访问 http://a.com/a.gif, http://a.com/b.png 规则D和E均适合,按顺序优先使用规则D
访问 http://a.com/static/c.png 则优先匹配到规则C
访问 http://a.com/a.PNG 则匹配规则E,因为规则E不区分大小写。
访问 http://a.com/a.XHTML 使用规则F。
访问 http://a.com/category/id/1111 则最终匹配到规则H。
3.2.2:location的匹配规则:
- (1)、多个location匹配字符都能匹配成功的情况下,选择优先级最高的location规则去处理!
- (2)、多个locaiton匹配字符都能匹配成功,且他们的优先级一样的情况下,选择先定义的location规则去处理!
3.2.3:root 和 alias的区别:
root 表示 location 匹配内容的相对路径
alias 表示 一个绝对路径,而且必须以"/"结尾
root标志的绝对路径,不要"/"结尾
规律:
- (1)、
alias
指定目录的时候,是把alias目录
和剩余未匹配路径
拼接,得出静态文件绝对路径; - (2)、
root
指定目录的时候,是把root目录
和完整的请求路径
拼接,得出静态文件绝对路径;
效果一: 效果二:
location /img/ { location /img/ {
alias /var/www/image/; root /var/www/image;
} }
注意:
一般情况下,在location /中配置root,在location /other中配置alias
配置的目录必须有nginx的访问权限,否则全部失效,不要设置为X用户的家目录。