首页 > 系统相关 > 深入浅出学习透析Nginx服务器的基本原理和配置指南「进阶实践篇」

深入浅出学习透析Nginx服务器的基本原理和配置指南「进阶实践篇」

时间:2022-11-13 13:32:08浏览次数:66  
标签:index 进阶 深入浅出 server Nginx html org wiz name

proxy_pass的疑问?

很多小伙伴们跟我沟通说之前章节的介绍的proxy_pass介绍的并不是很详细和清晰,那么我们就针对于Nginx proxy_pass 使用在进行复习回顾一下。

proxy_pass的使用场景

在使用Nginx服务,很多情况Nginx用于反向代理,那就离不开使用proxy_pass,它的作用主要用于路由转发到后台服务使用,作为代理到后台服务而已。而针对于proxy_pass后面的url是否以/结尾的场景还有很多学问哦!

如果你不知道后面url添加其它路由等场景,下面来聊聊这些分别代表什么含义和实现。

proxy_pass的详解介绍

第一种场景 后面url加 /
location /statistic/ {
proxy_pass http://127.0.0.1/;
}

那么当客户端请求URL到Nginx所在的服务器时候,Nginx所在的服务器IP地址为:172.168.2.21,那么请求URL:​​https://172.168.2.21/statistic/index.html​

结果:代理到URL:http://127.0.0.1/index.html,​ 所以你应该明白了,他会将客户传递的statistic的这段path直接忽略掉和strip掉

第二种场景 后面url没有 /
location /statistic/ {
proxy_pass http://127.0.0.1;
}

结果:代理到URL:http://127.0.0.1/statistic/index.html

第三种场景 后面url添加其它路由,并且最后添加 /
location /statistic/ {
proxy_pass http://127.0.0.1/customer/;
}

结果:代理到URL:http://127.0.0.1/customer/index.html

第四种场景 后面url添加其它路由,但最后没有添加 /
location /statistic/ {
proxy_pass http://127.0.0.1/customer;
}

结果:代理到URL:http://127.0.0.1/customerindex.html


进入正题,实战开发技巧

夯实server_name的路由代理机制

通过server_name指令实现选择服务器块(server block)的选择。如果具体细节还可以参考”​​How nginx processes a request“​​。

使用精确名称

使用精确匹配模式:匹配server_name的值为wiz.org或者www.wiz.biz 的值。

server {
listen 80;
server_name wiz.org www.wiz.biz;
...
}
使用通配符

通配符名称可以在名称的开头和结尾包含星号,并且只能紧挨着点号(.)。server_name “.wiz.org” 不仅可以匹配 wiz.wiz.org ​还可以匹配www.test.wiz.org​. “.wiz.org”这种特殊的通配符名称可以用于匹配精确名称”​​​wiz.org​​​”和通配符名称”.wiz.org”.

server {
listen 80;
server_name *.wiz.org;
...
}
server {
listen 80;
server_name wiz.*;
...
}

上面主要就是通过 * 这个特殊符号进行匹配选择对应的server块,下面就是监听了80端口的两个server服务块,最后选择以.wiz.org结尾的server块,还是以wiz.* 为开始部分的host值,如果有两个都命中了,则会选择配置位置靠前的,目前就是优先会去选择*.wiz.org。

使用正则表达式

Nginx的正则表达式兼容于Perl编程语言(PCRE)。为了使用正则表达式, server_name必须以波浪号(~)开头

server {
listen 80;
server_name ~^(?<www>.+)\.wiz\.biz$;
...
}

注意:server_name ~^(?.+)\.wiz\.biz

”锚点。虽然语法上没要求,但是逻辑上需要他们。还要注意域名的点号要使用反斜杠做转义,包含字符”{“和”}”的正则表达式需要使用引号:

server_name  "~^(?<name>\w\d{1,3}+)\.example\.net$";

否则nginx会启动失败并显示错误信息:

directive "server_name" is not terminated by ";" in ...
被命名的正则表达式捕获器可以随后作为变量使用:
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}

上面的配置很容易理解,在root定向指令的时候,可以使用之前匹配到的domain对应的实际数据值,进行映射,形成动态映射的模式

匹配模式优先级选择

当通过server_name搜索服务器时, 如果名字和多个指定的变量匹配, 例如同时匹配通配符和正则表达式,在下面的优先级次序中,第一个匹配的变量将被选择:

  • 精确名称
  • 星号开头的最长的通配符名称, 例如 “*.wiz.biz”
  • 星号结束的最长的通配符名称, 例如 “wiz.*”
  • 第一个匹配的正则表达式(按照出现在配置文件中的顺序)

index指令的作用

index指令的作用和目的就是通过Nginx配置,设置网站的默认请求内容(页面)。

index指令简介

index指令后面可以跟多个内容,并且采用空格隔开;

  • 如果包括多个请求内容,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止;
  • 文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后;
  • 文件可以使用变量$来命名;
案例配置
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}

访问该location的时候,可以通过 ​​http://ip​​:port/,地址后面如果不添加任何内容,则默认依次访问/usr/local/nginx/html/index.html和/usr/local/nginx/html/index.htm,找到第一个来进行返回。

该指令拥有默认值,index index.html ,即,如果没有给出index,默认初始页为index.html


总结实战案例

创建服务名称为:wiz.test.org​,目标​http://wiz.test.org​ 和 http://*.test.net 应该都指向同一个虚拟主机

server {
listen 80;
server_name wiz.test.org *.test.net;
root /var/html/wiz;
index index.html;
}

然后建立 /var/html/wiz目录,准备好站点的html文件。

配置完成之后,在重新转载前,先验证一下:

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

验证通过,再重新装载:

sudo nginx -s reload

最后访问一下对应的nginx服务看看是否可以保证访问到对应的 /var/html/wiz/index.html呢?

标签:index,进阶,深入浅出,server,Nginx,html,org,wiz,name
From: https://blog.51cto.com/alex4dream/5847738

相关文章

  • Nginx 常规用法
    Nginx简介Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамбле......
  • Nginx构建高可用集群
    构建并维护基于Nginx分发器的高可用Web集群。实现分发器故障切换,数据服务器自动容错,保证Web服务器在宕机情况下业务的连续性拓补图如下配置步骤1、配置nginx集群......
  • 前端学习-CSS-04-选择器进阶
    学习时间:2022.11.09选择器进阶复合选择器后代选择器格式:选择器父母选择器子女选择器孙辈选择器重孙辈{}上面选中的是重孙辈标签作为CSS渲染对象<!--01-后......
  • 深入浅出学习透析Nginx服务器的基本原理和配置指南「初级实践篇」
    什么是Nginx?Nginx(EngineX)是一个轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器、高性能的HTTP服务器,它以高稳定性、丰富的功能集、示例配置文件和......
  • LINUX CENTOS7 部署步骤 nginx
    0.检查nginx是否安装rpm-qa|grepnginx1.检查yumlistyumlist|grepnginx2. 安装nginxyum-yinstallnginx3.验证是否安装完成nginx-v4.......
  • DataBase - 查询 SQL 进阶
    查询每个部门工资最高的员工信息。SELECT e.emp_name,d.dept_name,e.salaryFROM empeinnerjoindeptdONe.dept_id=d.dept_idWHERE (e.dept_id,e.salary)......
  • 人脸检测进阶
    https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/121676797?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_e......
  • Nginx整体结构、进程模型
    1. 整体图解         2. master进程和worker进程简介/***Nginx采用的是一个master进程、多个worker进程的方式1.master进程(1)监控进程、不......
  • Go进阶36:Goland远程开发调试
    Go进阶36:Goland远程开发调试Go&Rust......
  • 树的进阶
    平衡树之前我们学习过二叉查找树,发现它的查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但不幸的是,在最坏情况下,二叉查找树的性能还是很糟糕......