我正在尝试configurationNginx在同一个域中的两个不同目录中托pipe多个基于PHP的应用程序。 我试图得到的结果是:
http://webserver.local/ >应用程序从/path/to/website
http://webserver.local/app >应用程序从/path/to/php-app
这是我的configuration。
File Not Found (但是,文件在/path/to/php-app/index.php )。 /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文件的内容无声覆盖。 详情请参阅此文件 。