nginx反向代理时有无”/”的辨析
nginx反向代理是日常使用nginx时最常用到的功能之一。在配置url的过程中,“/”的有无经常是影响我们配置成功的关键,也是困扰我们的问题所在。在此,结合实际例子,作简要辨析。
场景一:利用根目录进行代理
location / {
proxy_pass http://example.test.com/;
}
location / {
proxy_pass http://example.test.com;
}
这两个配置实现的效果是一样的。
场景二:下面四种情况分别用http://192.168.1.10/proxy/test.html 进行访问。
第一种情况:
location /proxy/ {
proxy_pass http://127.0.0.1:8080/;
}
实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/test.html 这个url,并将结果返回给我们。
第二种情况:(相对于第一种,最后少一个 /)
location /proxy/ {
proxy_pass http://127.0.0.1:8080;
}
实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/proxy/test.html 这个url,并将结果返回给我们。
第三种情况:
location /proxy/ {
proxy_pass http://127.0.0.1:8080/real/;
}
实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:/real/test.html 这个url,并将结果返回给我们。
第四种情况(相对于第三种,最后少一个 / ):
location /proxy/ {
proxy_pass http://127.0.0.1:8080/real;
}
实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:81/realtest.html 这个url,并将结果返回给我们。
分析如下: proxy_pass http://127.0.0.1/ 和proxy_pass http://127.0.0.1 ==>这个”/”,会使代理出来的结果完全不同。
前者,相当于告诉nginx,我这个location,是代理访问到http://127.0.0.1这个server的,我的location是什么,nginx 就把location 加在proxy_pass 的 server 后面,这里是/proxy/,所以就相当于http://127.0.0.1/proxy/。如果是location /blog/ 就是代理访问到http://127.0.0.1/blog/。
后者,相当于告诉nginx,我这个location,是代理访问到http://127.0.0.1/的,http://127.0.0.1/proxy/ == http://127.0.0.1/ ,可以这样理解。改变location,并不能改变返回的内容,返回的内容始终是http://127.0.0.1/ 。 如果是location /blog/ ,那就是 http://127.0.0.1/blog/ == http://127.0.0.1/ 。
这样,也可以解释了上面那个location / 的例子,/ 嘛,加在server 的后面,仍然是 / ,所以,两种写法出来的结果是一样的。
注意: 如果是 location ~* ^/proxy/(.*)\.html 这种正则的location,是不能写”/”上去的,nginx -t 也会报错的了。因为,路径都需要正则匹配了嘛,并不是一个相对固定的locatin了,必然要代理到一个server。
nginx反向代理时有无”/”的辨析的更多相关文章
- nginx 反向代理时丢失端口的解决方案
今天,配置nginx反向代理时遇到一个问题,当设置nginx监听80端口时转发请求没有问题.但一旦设置为监听其他端口,就一直跳转不正常:如,访问欢迎页面时应该是重定向到登录页面,在这个重定向的 ...
- nginx 反向代理时丢失端口的解决方案(转)
今天,配置nginx反向代理时遇到一个问题,当设置nginx监听80端口时转发请求没有问题.但一旦设置为监听其他端口,就一直跳转不正常:如,访问欢迎页面时应该是重定向到登录页面,在这个重定向的过程中端 ...
- 使用nginx反向代理时,如何正确获取到用户的真实ip
在记录日志的的时候,获取用户的信息,比如用户的ip,浏览器等等信息是十分重要的. 但是在使用nginx反向代理的时候,可能经过转发无法获取到用户的真实的ip, 在此情况下需要配置nginx,让其在转发 ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- nginx反向代理时保持长连接
·[场景描述] HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟. 如果我们使用了nginx去作为 ...
- nginx反向代理时配置访问密码
在有些情况下,我们需要对服务器上的某些资源进行限流或者禁止陌生人访问,我们可以通过nginx配置来对url添加访问密码. 效果如下 nginx 开启访问验证在 nginx 下,提供了 ngx_http ...
- Nginx反向代理时tomcat日志获取真实IP
对于nginx+tomcat这种架构,如果后端tomcat配置保持默认,那么tomcat的访问日志里,记录的就是前端nginx的IP地址,而不是真实的访问IP.因此,需要对nginx.tomcat做如 ...
- 如何取得nginx做反向代理时的真实IP?
1. 编译 对于client -> nginx reverse proxy -> apache, 要想在程序中取得真实的IP,在执行nginx的configure时,必须指定参数" ...
- nginx做反向代理时获取真实IP
原文:http://blog.csdn.net/aquester/article/details/48657395 1. 编译 对于client -> nginx reverse proxy - ...
随机推荐
- java堆转储与内存分析
jmap -dump:format=b,file=dumpfile.hprof pid 将进程的堆转储到dumpfile.hprof文件里 jmap -heap pid 查看堆内存占用情 ...
- C# Selenium
ChromeOptions option = new ChromeOptions(); option.AddArgument("disable-extensions"); opti ...
- leetcode-三角形的最大周长
Python解法: class Solution: def largestPerimeter(self, A: List[int]) -> int: A.sort() for i in rang ...
- Development 编程规范
{ 命名规范类命名 1)所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写. 类,接口名必须是有意义的,切忌使用中文拼音命名.另外所有类都要加标致前缀:“O ...
- [Grt]一篇简单概括XML
一.XML基础 XML主要用途(我认为就这三点): XML 把数据从 HTML 分离 XML 简化数据共享 XML 简化数据传输 XML 语法规则: XML 文档必须有根元素 XML 文档必须有关闭标 ...
- PHP ftp_rmdir() 函数
定义和用法 The ftp_rmdir() 函数删除 FTP 服务器上的一个目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_rmdir(ftp_connectio ...
- 23 Pro/E二次开发中的问题记录
0 引言 由于项目中涉及到Pro/E的二次开发技术,因此在边用边学的情况下,解决了不少问题,也积攒了不少问题.其中有些问题可能不是调个函数就能搞定的,得了解CAD底层的东西. 1 问题描述 (1)CA ...
- MFC-按行读取TXT数据
TXT中数据格式如下: 1 23 4 0 4 10 …… 要实现的功能是:定义一个函数,每次调用时从TXT文档中读一个整数 ,赋值给变量.同时,文件位置向下移动一行,以便下次调用时读取下一行的数据. ...
- 基于Netty的RPC架构学习笔记(四):netty线程模型源码分析(一)
文章目录 如何提高NIO的工作效率 举个
- mac的终端运行ifconfig
lo0:loopback回环地址一般是127.0.0.0,loopback指本地环回接口(或地址),亦称回送地址().此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用. gif0: so ...