本文正在参与「金石方案 . 瓜分6万现金大奖」
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,目标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呢?
本文正在参与「金石方案 . 瓜分6万现金大奖」