我们正在从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实现它的方式使得使用别名变得棘手。
可能是我们遗漏了一些微不足道的东西,任何指针都会受到赞赏。
答案 0 :(得分:0)
我认为问题通常是回答/记录的方式返回SCRIPT_FILENAME
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
阅读更多文档显示$ request_filename是一种更好的方法,可以在root和别名中工作
fastcgi_param SCRIPT_FILENAME $request_filename;