Nginx,位置,别名和php

时间:2017-10-30 13:23:30

标签: nginx lighttpd nginx-location

我们正在从lighttpd转向nginx用于HTTP / 2.0,并且很难配置一些在lighttpd中非常简单的东西。

alias.url    = ("/api" => "/web/myserver.com/develapi/")

我们这样做,因为我们版本控制api然后只是将url指向适当的文件夹。我们也不想使用文件链接。而且,它是lighttpd中的一行命令。

以下是我们在NGINX中尝试实现相同目标的方法。

location /api {
     alias   /web/myserver.com/develapi;
     location ~ \.php$ {
       fastcgi_index  index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include        fastcgi_params;
       fastcgi_pass   127.0.0.1:9000;
     }
    }

但是,这不起作用,因为nginx将$ document_root和/api/index.php作为$ fastcgi_script_name传递给/web/myserver.com/develapi,因此导致SCRIPT_FILENAME错误。

然后我们尝试使用root

location /develapi {
     root   /web/myserver.com;
     location ~ \.php$ {
       fastcgi_index  index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include        fastcgi_params;
       fastcgi_pass   127.0.0.1:9000;
     }
    }

这可以作为nginx传递/web / myserver.com $ document_root和/develapi/index.php $ fastcgi_script_name,因此生成的SCRIPT_FILENAME是正确的。

但是,使用root意味着我们要么更改现有结构或url。对于这种情况,使用别名是正确的解决方案,但是nginx实现它的方式使得使用别名变得棘手。

可能是我们遗漏了一些微不足道的东西,任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我认为问题通常是回答/记录的方式返回SCRIPT_FILENAME

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

阅读更多文档显示$ request_filename是一种更好的方法,可以在root和别名中工作

fastcgi_param SCRIPT_FILENAME $request_filename;