Nginx + PHP-FPM URI别名和多个php目录

我正在尝试configurationNginx在同一个域中的两个不同目录中托pipe多个基于PHP的应用程序。 我试图得到的结果是:

http://webserver.local/ >应用程序从/path/to/website

http://webserver.local/app >应用程序从/path/to/php-app

这是我的configuration。

  • 当我点击http://webserver.local/时,一切正常(是PHP和非PHP资源)。
  • 但是,当我转到http://webserver.local/app/index.php时,PHP脚本不工作。 我File Not Found (但是,文件在/path/to/php-app/index.php )。
  • 我创build了一个文件/path/to/php-app/test.txt (不是PHP的东西),当我去http://webserver.local/app/test.txt时 ,我得到了预期的文本文件。

有人可以请说出我的错在哪里? 谢谢 :)

 server { listen 80; server_name webserver.local; location / { root /path/to/website; index index.php; location ~ \.php$ { root /path/to/website; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } location ^~ /app { alias /path/to/php-app; index index.php; location ~ \.php$ { root /path/to/php-app; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } } 

你的嵌套location ~ \.php$ block不会find你的PHP脚本。 $document_root被设置为/path/to/php-app$fastcgi_script_name$uri相同,它仍然包含/app前缀。

正确的方法是使用$request_filename并删除您的假根指令:

 location ^~ /app { alias /path/to/php-app; index index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } } 

在任何fastcgi_param语句之前总是包含fastcgi_params ,以避免它们被include文件的内容无声覆盖。 详情请参阅此文件 。