1.环境准备
- nginx 1.18.0
- centos 7.8
2.安装nginx参考
# 1.安装必备组件
yum install yum-utils -y
# 2.添加源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 3.查看nginx仓库信息
yum repolist all|grep nginx
# 4.检查有无nginx信息
yum info nginx
yum search nginx
# 5.安装nginx
yum install nginx-1.18.0 -y
# 6.查看nginx
which nginx
3.nginx文件划分
/etc/nginx 存放nginx相关配置,一般用来编辑内部的nginx.conf文件
/var/log/nginx 存放nginx默认的日志,可以通过查看access.log文件浏览相关内容
/usr/share/nginx 一般是用来放置需要nginx转发的静态资源文件
4.systemctl操作nginx服务
systemctl status nginx 查看nginx服务状态
systemctl start nginx 启动nginx服务
systemctl reload nginx 重新加载nginx服务
nginx自己的命令
nginx -t 校验nginx.conf配置是否正确
/usr/sbin/nginx 启动nginx
/usr/sbin/nginx -s reload 重新加载nginx配置文件
/usr/sbin/nginx -s quit 完整退出nginx
5.nginx文件结构
Global: nginx 运行相关
Events: 与用户的网络连接相关
http
http Global: 代理,缓存,日志,以及第三方模块的配置
server
server Global: 虚拟主机相关
location: 地址定向,数据缓存,应答控制,以及第三方模块的配置
6. location 语法
nginx有两层指令来匹配请求 URI 。第一个层次是 server 指令,它通过域名、ip 和端口来做第一层级匹配,当找到匹配的 server 后就进入此 server 的 location 匹配。
location 的匹配并不完全按照其在配置文件中出现的顺序来匹配,请求URI 会按如下规则进行匹配:
先精准匹配 = ,精准匹配成功则会立即停止其他类型匹配;
没有精准匹配成功时,进行前缀匹配。先查找带有 ^~ 的前缀匹配,带有 ^~ 的前缀匹配成功则立即停止其他类型匹配,普通前缀匹配(不带参数 ^~ )成功则会暂存,继续查找正则匹配;
= 和 ^~ 均未匹配成功前提下,查找正则匹配 ~ 和 ~* 。当同时有多个正则匹配时,按其在配置文件中出现的先后顺序优先匹配,命中则立即停止其他类型匹配;
所有正则匹配均未成功时,返回步骤 2 中暂存的普通前缀匹配(不带参数 ^~ )结果
location匹配顺序(序号越小优先级越高)
- location = # 精准匹配
- location ^~ # 带参前缀匹配
- location ~ # 正则匹配(区分大小写)
- location ~* # 正则匹配(不区分大小写)
- location /a # 普通前缀匹配,优先级低于带参数前缀匹配。
- location / # 任何没有匹配成功的,都会匹配这里处理
参考 :https://zhuanlan.zhihu.com/p/130819099
附 :nginx配置proxy_pass中url末尾带/与不带/的区别
注意:当location为正则表达式匹配模式时,proxy_pass中的url末尾是不允许有"/"的,因此正则表达式匹配模式不在讨论范围内。
- proxy_pass配置中url末尾带/时,nginx转发时,会将原uri去除location匹配表达式后的内容拼接在proxy_pass中url之后
测试地址:http://192.168.171.129/test/tes.jsp
location ^~ /test {
proxy_pass http://192.168.171.129:8080/server/;
}
代理后实际访问地址:http://192.168.171.129:8080/server//tes.jsp
location ^~ /test/ {
proxy_pass http://192.168.171.129:8080/;
}
代理后实际访问地址:http://192.168.171.129:8080/tes.jsp
proxy_pass配置中url末尾不带/时,
- 如url中不包含path,则直接将原uri拼接在proxy_pass中url之后 --规则1;
- 如url中包含path,则将原uri去除location匹配表达式后的内容拼接在proxy_pass中的url之后-- 规则2
测试地址:http://192.168.171.129/test/tes.jsp
location ^~ /test {
proxy_pass http://192.168.171.129:8080/server;
}
代理后实际访问地址:http://192.168.171.129:8080/server/tes.jsp //规则2
location ^~ /test/ {
proxy_pass http://192.168.171.129:8080;
}
代理后实际访问地址:http://192.168.171.129:8080/test/tes.jsp //规则1
参考:https://blog.csdn.net/zhanghui200920061988/article/details/105132167