Nginx入门
这里我用的Ubuntu,首先下载nginx。
nginx主要是通过 nginx.conf 文件进行配置的,这里我们来新写一个nginx.conf文件。由此来逐渐了解nginx的使用
一些常用命令
1
2
3
4
|
# 修改配置后 检查 Nginx 配置文件的语法是否正确
nginx -t
# 校验通过后重载配置
nginx -s reload
|
1.Web服务器
Nginx 的配置是基于一套分层的块(block)结构,最核心的是 http, server, 和 location。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
events{}
http{
#这里的server块定义的是虚拟服务器
server:{
listen 80; #监听80端口,因为一般浏览器默认用80端口进行请求
server_name localhost; #填写ip地址/自己的域名
return 200 "666"; #可以自己定义返回的内容
#注意 这时要删掉return这一行 不然会返回 return这一行
root /var/www/localhost; #指定网站根目录.这里会默认去找localhost文件中的index.html文件
#那么我们如何指定查找html文件
index app.html; #这样就会默认找app.html文件
}
}
|
我们知道一个网站有多个文件。比如css文件。但是这时你引入css文件。打开浏览器会发现css文件类型居然是text/pain.这显然是不对的
nginx中有这样一个文件mime.types文件 里面有文件类型对应的文件后缀。因此我们可以引入这个文件
1
2
3
|
http{
include /etc/nginx/mime.types #这里注意写在http块里面,server块外面 相当于总配置
}
|
实际上nginx采用的是多文件配置。在nginx文件中有一个conf.d文件夹。里面有一个default.conf文件
1
2
3
4
5
|
http{
#注意写在http里面 sever外面 相当于公共配置
include /etc/nginx/mime.types;
include /ect/nginx/conf.d/*.conf;#这里的*是匹配所有后缀为conf文件
}
|
这样我们可以把我们之前写的nginx的server块配置移动到default.conf文件中。以后我们就改这个文件就行了
2.location指令
使用location指令可以更好的指定路径
1
2
3
4
5
6
7
8
9
10
11
12
|
server:{
listen 80;
server_name localhost;
#相当于匹配路径
location /{
root /var/www/localhost;
}
#(实际上是模糊匹配) 如果请求 localhost/apple 也一样会匹配成功
location /app{
root /var/www/localhost; # ** 映射到服务器的/var/www/localhost/app/ ** 所以我们这个文件夹一定要存在
}
}
|
这里我们一定要注意location不仅匹配的uri。还会匹配对应路径的文件
有四种匹配方式
location = /path
: 精确匹配。只有当 URI 完全是 /path
时才匹配。优先级最高。
location /path
: 前缀匹配。匹配所有以 /path
开头的 URI。
location ~ /regex/
: 正则表达式匹配 (区分大小写)。 loaction ~/video[4-9] 相当于匹配video4 video5….
location ~* /regex/
: 正则表达式匹配 (不区分大小写)。
匹配优先级: 精确匹配 (=
) > 前缀匹配 > 正则表达式匹配 (~
, ~*
)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
server{
#可以直接进行重写 用户访问 /temp 实际访问的服务器资源为/app/index.html
rewrite /temp /app/index.html
#但是这只能选择一个文件 如果要选择多个文件要用try_files
location /{
#实际上就是一个一个尝试往下面找 如果有就返回
try_files $uri $uri/ =404; #这是一个很重要的配置 在配置vue .react有很重要的作用
}
#一下是一个vue的例子
location /{
#这里如果都找不到。就去找目录的index.html文件。这样就能让vue路由接管。不然页面是访问不到的。因为Vue/Reacts是单页应用 (SPA)
try_files $uri $uri/ /index.html
}
}
|
3.反向代理
1
2
3
4
5
6
7
|
server{
location /api {
#这里就是将带有/api前缀的uri 转发给localhost:8123服务器
proxy_pass localhost:8123
}
}
|
4.负载均匀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
http{
#这里是设置一个上游服务器(注意写到http里面,server块的外面)
upstream backend-servers {
#设置权重 数字越大被分配的次数就会越多
server localhost:3000 weight 6;
server localhsot:3001 weight 5;
}
sever{
#这里相当于把流量分配给上游的服务器 实际上也是代理
location /{
proxy_pass http://backend-servers
}
}
}
|