我是 Nginx 新手。我嘗試將其部署在 kubernetes 上。但我得到:
FastCGI 在stderr 中發送:“主腳本未知”,同時從上游讀取回應頭,客戶端:10.0.1.1,伺服器:,請求:“GET /app.php/ HTTP/1.1”,上游:“fastcgi:/ /[:: 1]:9000”,主持人:
我不知道如何解決這個問題當我得到網址時:
文件未找到。
這是我的設定檔:
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /srv/webroot/web;
index app.php;
client_max_body_size 30M;
location / {
try_files $uri @pass_to_symfony;
}
location ~ /app_dev.php/ {
try_files $uri @pass_to_symfony_dev;
}
location @pass_to_symfony{
rewrite ^ /app.php?$request_uri last;
}
location @pass_to_symfony_dev{
rewrite ^ /app_dev.php?$request_uri last;
}
location ~ ^/app(_dev)?\.php($|/) {
fastcgi_pass localhost:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
我的專案在 symfony 上
答案1
當 PHP URI 包含路徑資訊時,您將需要使用fastcgi_split_path_info
指令(或類似的東西)將實際腳本名稱(例如/app.php
)與附加到它的路徑資訊(例如/
)分開。
location ~ ^/app(_dev)?\.php($|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass localhost:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
看這個例子了解詳情。