nginx location反向代理问题

nginx可以讲请求转发到其他服务上去,今天在本地调试的时候遇到个问题,记录下。

  本来要将一个请求 http://hostname/api/xxx 转发到其他的服务去处理,加上下面这段代码就生效了

location /api/ {

         proxy_redirect off;
         proxy_pass http://192.168.1.234:12818;

 }

但是调了半天他还是进入到php的处理程序去

location ~ \.php($|/)
 {
        try_files $uri =404;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
}

不解啊,开始以为是location执行顺序的问题,查了半天没问题啊,关键这地址也不符合php文件的规则

后来想起来在使用php框架的时候,nginx配置里有个隐藏index.php的代码,这个请求就从http://hostname/api/xxx变成了http://hostname/index.php?/api/xxx,自然就跑php那处理了

if (!-e $request_filename)
{
      rewrite ^/(.*)$ /index.php?/$1 last;
}


可能受php语法的影响,感觉新加的location是在rewrite前面,不应该先匹配到location吗?

查了下资料发现它们的执行顺序应该是:

  1. 执行server块的rewrite指令
  2. 执行location匹配
  3. 执行选定的location中的rewrite指令

所以请求先被rewrite了,所以匹配不到对应的location

最后讲rewrite移到location / {} 里,这样就能正常匹配location,之后再处理rewrite

location / {

    if (!-e $request_filename)
    {
          rewrite ^/(.*)$ /index.php?/$1 last;
    }

}

因为本地nginx之前都是用来处理php程序,所以没太在意nginx配置文件书写的格式,遇到问题了才发现到处都是细节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李昂的数字之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值