背景信息:
被代理的服务器(10.90.7.2)上,nginx的配置内容
server {
listen ;
server_name localhost;
default_type text/html; location /path1 {
root html;
index index.html;
}
location /path1/path2 {
root html;
index index.html;
} }
待访问的页面路径信息如下:
[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# cd path1/
[root@localhost path1]# tree
.
|-- index.html
`-- path2
`-- index.html directory, files
单独访问10.90.7.2这个服务器的path1以及path2的效果如下图:
1.在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面不带/,location 对应的url后面也不带/
upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path1 {
proxy_pass http://backend_slash;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问10.90.7.10:9000/path1的path1,效果如图:
2.在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面不带/,location 对应的url后面带/
upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path1/ {
proxy_pass http://backend_slash;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问10.90.7.10:9000/path1的path1,效果如下图,其实和步骤1中的效果一样.
3. 在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面带/,location 对应的url中加入虚拟路径前缀path,后面不带/
upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path {
proxy_pass http://backend_slash/;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问10.90.7.10:9000/path/path1的path1,效果如下图,效果和步骤1,2的一样。
当访问10.130.7.10:9000/path1/path2时,效果如下图:
被代理的服务器10.90.7.2上nginx的error日志内容:
// :: [error] #: * "/usr/local/nginx/html/1/path2/index.html" is not found (: Not a directory), client: 10.90.7.10, server: localhost, request: "GET /1/path2/ HTTP/1.0", host: "10.90.7.10:9000"
4. 在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面不带/,location 对应的url中加入虚拟路径前缀path,后面也不带/
upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path {
proxy_pass http://backend_slash;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问10.90.7.10:9000/path/path1的path1,效果如下图:
5. 在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面带/,location 对应的url中加入虚拟路径前缀path,后面也带/
upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path/ {
proxy_pass http://backend_slash/;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问10.90.7.10:9000/path/path1的path1,效果如图
访问10.90.7.10:9000/path1/path2的path2,效果如下图:
这里要说明一下的,我这里10.90.7.10这个服务器的server (端口9000),是没有配置location / {root html; index index.html;}这么一个规则的,但是依然可以访问到这个服务器下html下面的path1/path2.
为什么呢? 这里要注意下,nginx默认都会有一个 location / {root html; index index.html;}的规则.
访问10.90.7.10:9000/path/path1/path2的path2,效果如图:
综上总结:
1. proxy_pass 后面的url中带上反斜线,和不带反斜线效果差异很大,带反斜线时会将location里面指定的url前缀去掉。
2. location后面的url前缀部分后缀带不带反斜线,效果差异截然不同。
3. nginx的虚拟服务器server的配置中,没有配置默认的location / {}时,默认会有一个location / {root html; index index.html;}
nginx的url规则小tips的更多相关文章
-
简明 Nginx Location Url 配置笔记
基本配置 为了探究nginx的url配置规则,当然需要安装nginx.我使用了vagrant创建了一个虚拟环境的ubuntu,通过apt-get安装nginx.这样就不会污染mac的软件环境.通过vr ...
-
前端必备,5大mock省时提效小tips,用了提前下班一小时
一.一些为难前端的业务场景 在我的工作经历里,需要等待后端童鞋配合我的情形大概有以下几种: a.我们跟外部有项目合作,需要调用到第三方接口. 一般这种情况下,商务那边谈合同,走流程,等第三方审核, ...
-
thinkphp nginx php-fpm url rewrite 导致 404 错误
## thinkphp nginx php-fpm url rewrite 导致 404 错误 之前thinkphp的系统部署在apache上,考虑到在并发性能nginx比apache强悍得多,所以在 ...
-
PHPCMS V9静态化HTML生成设置及URL规则优化
先讲讲Phpcms V9在后台怎么设置生成静态化HTML,之后再讲解怎么自定义URL规则,进行URL地址优化.在这一篇中,伪静态就不涉及了,大家可以移步到Phpcms V9全站伪静态设置方法. 一.静 ...
-
Nginx return 关键字配置小技巧
Nginx的return关键字属于HttpRewriteModule模块: 语法:return http状态码 默认值:无 上下文:server,location,if 该指令将结束执行直接返回htt ...
-
Nginx的Rewrite规则与实例
通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有 ...
-
4.Nginx的URL重写应用
Nginx的URL重写应用 nginx的URL重写模块是用得比较多的模块之一,所以我们需要好好地掌握运用.常用的URL重写模块命令有if,rewrite,set,break等. if命令 if用于判断 ...
-
Nginx location 匹配规则详解
语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ^~ /uri ^~ ...
-
Nginx实现URL重写
本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL. 1.准备工作. 结合本文场景,需要安装Nginx. 1.1 关于Linux系统安装Nginx可以参考我的文章---(传送 ...
随机推荐
-
doc2vec使用说明(二)gensim工具包 LabeledSentence
欢迎交流,转载请注明出处. 本文介绍gensim工具包中,带标签(一个或者多个)的文档的doc2vec 的向量表示. 应用场景: 当每个文档不仅可以由文本信息表示,还有别的其他标签信息时,比如,在商品 ...
-
Java多线程系列--“JUC集合”01之 框架
概要 之前,在"Java 集合系列目录(Category)"中,讲解了Java集合包中的各个类.接下来,将展开对JUC包中的集合进行学习.在学习之前,先温习一下"Java ...
-
PHP7在linux下的安装步骤
安装mcrypt: yum install -y php-mcrypt libmcrypt libmcrypt-devel 升级bison: cd /var/soft/ wget http://ftp ...
-
弹窗文件js+css
// 每个弹窗的标识 var x =0; var idzt = new Array(); var Window = function(config){ //ID不重复 idzt[x] = " ...
-
Wget命令
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...
-
消息队列Rabbitmq
1. 启动 rabbitmq-server & 2. 队列重置(清空队列.用户等) rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl stop ...
-
MyBatis——解决字段名与实体类属性名不相同的冲突
原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...
-
Java获取当前进程的所有线程
public class MainClass { public static void main(String[] args) { ThreadGroup group = Thread.current ...
-
NPOI技术,
using(FileStream stream=new FileStream("C:\Users\XXXXXX\Desktop\1.xls",FileMode.Open)) ...
-
PAT 大数运算
PAT中关于大数的有B1017,A1023,A1024 (A-Advance,B-Basic) B1017 1017. A除以B (20) 本题要求计算A/B,其中A是不超过1000位的正整数,B是1 ...