nginx里proxy_pass有无/的区别

nginx在反向代理的时候,proxy_pass需要指定路径,有无"/"的区别,如下:

 location /lile {
     配置一: proxy_pass  http://192.168.0.37/;
     配置二: proxy_pass  http://192.168.0.37;
    } 

环境说明:

反向代理服务器:192.168.0.224
真实数据机器:192.168.0.37

1:先配置真实数据机的nginx配置文件

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;

        root     /web1

        location /lile {
            root  /data;
            index index.html;
        }
        }
}

创建对应的文件夹:

mkdir /web1
echo "My location is /web1" > index.html
mkdir -p /data/lile
echo "My location is /data/lile" > index.html

2:反向代理的配置文件为

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        location /lile {
              配置一:proxy_pass  http://192.168.0.37;
              配置二:proxy_pass  http://192.168.0.37/
        }
}
}

3:测试

当proxy_pass为:http://192.168.0.37  的时候,返回的数据如下:

1)浏览器请求访问http://192.168.0.224/lile/

2)到达192.168.0.224后,location /lile 匹配到之后,转发的地址为:http://192.168.0.37/lile/

3)然后到达192.168.0.37,匹配到了location /lile,所以就去/data目录下取数据

当proxy_pass为: http://192.168.0.37/  的时候,返回的数据如下:

1)浏览器请求访问http://192.168.0.224/lile/

2)达192.168.0.224后,location /lile 匹配到之后,转发的地址为:http://192.168.0.37/,这里在proxy_pass的 http://192.168.0.37/ 的“/”会把/lile给替换掉

3)然后到达192.168.0.37,直接匹配到的是root /web1,所以就去/web1目录下取数据

4:其他

在上面的location若为/,没有其他的具体匹配值,那么这两个的访问无区别

location / {
    配置一: proxy_pass  http://192.168.0.37/;
    配置二: proxy_pass  http://192.168.0.37;
}

配置一转发的时候,新的URI替换原有的得到的还是 http://192.168.0.37/

配置二转发的时候,不会发生改变 http://192.168.0.37/

5:总结

proxy_pass URL(http://192.168.0.224/uri/)

当URL中含有URI时,Nginx服务器会使用新的URI替换原有的URI(这里的新的URI理解为proxy_pass URL里的URI)

当URL中不含URI时,Nginx服务器不会改变原有地址的URI

这里的URI与URL暂且不去讨论它是怎么定义的,就理解为域名或者IP地址之后的路径(暂时还没弄清楚他们两个的区别)

注:学习《nginx高性能Web服务器详解》的时候总结

时间: 2024-08-04 10:39:48

nginx里proxy_pass有无/的区别的相关文章

[转] nginx rewrite 中brake last 区别

在使用nginx重写(即rewrite)机制时,大家一般会用到last和break,关于这两个指令的作用,网友问的挺多,网上的讨论也挺多,这里做个总结: 网友的给力解释: last: 重新将rewrite后的地址在server标签中执行 break: 将rewrite后的地址在当前location标签中执行 nginx官方解释: last:     stops processing the current set of ngx_http_rewrite_module directives fol

nginx http 502 503 504区别 · T

做web开发,常常回遇到5XX的状态码,区别记录下来: 504:Gateway Timeout 网关超时,如php-fpm运行超时 502:Bad Gateway 网关错误,如无空闲的php-fpm进程 503:Service Unavailable 服务不可用,如当前并发请求数达到nginx limit_conn上线 504表示网关可用,但是处理超时502表示没有可用的网关503表示nginx不可提供服务 那么,在错误排查的时候,可以根据日志里状态码来诊断那个环节出现了问题. 原文:大专栏  

Nginx之 proxy_pass实现代理 小记

Nginx之 proxy_pass 小记 1.环境介绍: Nginx :开启80端口访问 Apache :开启两个虚拟主机分别是 端口88 .端口 89 2.配置文件: Apahce虚拟主机 <VirtualHost *:89> DocumentRoot /usr/share/ganglia <Directory "/usr/share/ganglia"> AllowOverride None          Require all granted Order

Nginx里的proxy_pass

在这里我故意把nba的主页设置成新浪体育主页,把sports设置成新浪nba的主页,保存退出之后,检查配置文件并且重新启动nginx服务,把浏览器的缓存删除掉,试验一下localhost/nba的时候,果然出现的就是新浪体育的主页,有图有真相: 同理,输入localhost/sports的时候,输出的是新浪nba的界面,可见基本配置成功. 更进一步,我们把配置文件更改一下,改成这样 1.location /test/ {                proxy_pass http://lnsj

nginx 配置proxy_pass URL末尾加与不加/(斜线)的区别

nginx在配置proxy_pass的时候 URL结尾加斜线(/)与不加的区别和注意事项 假设访问路径的 /pss/bill.html 加/斜线的情况 location /pss/ { proxy_pass http://127.0.0.1:18081/; } 被代理的真实访问路径为:http://127.0.0.1:18081/bill.html  不加/斜线的情况 location /pss/ { proxy_pass http://127.0.0.1:18081; } 被代理的真实访问路径

golang--Channel有无缓存区别,以及关闭原则

有无缓存的区别 无缓存并不等价于缓存为1 func main(){ ch := make(chan int) ch <- 1 } 这句话会报错,当向无缓存的chan放数据时,如果一直没有接收者,那么它会一直堵塞,直到有接收者. 无缓冲的 就是一个送信人去你家门口送信,你不在家他不走,你一定要接下信,他才会走.无缓冲保证信能到你手上有缓冲的 就是一个送信人去你家仍到你家的信箱转身就走 ,除非你的信箱满了 他必须等信箱空下来.有缓冲的 保证 信能进你家的邮箱 关闭channel 参考,这篇文章已经总

nginx相对于apache的区别

1.nginx相对于apache的优点:轻量级,同样起web 服务,比apache占用更少的内存及资源抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊apache 相对于nginx 的优点: rewrite ,比nginx 的rewrite 强大动态页面模块超多,基本想到的都可以找到少bug ,nginx 的bug 相对较多 超稳定 存在就是理由,一般来说,

Nginx配置proxy_pass转发的/路径问题

在nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意proxy_pass后的url最后的/,当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. location ^~ /static_js/ { proxy_cache js_cache; proxy_set_header Host js.test.com; proxy_pass http://js.test.com/; } 如上面的配置,如

Nginx里的正则表达式

nginx.conf里面有几个大板块,第一部分是event,里面是设定最大并发数量.然后是各种协议,比如http\https\mail,一个http协议里面可以有多个server,每一个server对应的就是一个网站,在生产中,server 1和server 2乃至server n的内容是一样的,如果 server 1的服务器负载压力过大, nginx会启动负载均衡把用户都引向相对负载压力较小的服务器,这样可以达到保护服务器的目的. 而server下面可以有多个location,而locatio