簡體   English   中英

使用 nginx + php-fpm 從子目錄提供 PHP

[英]Serving PHP from a subdirectory using nginx + php-fpm

主要靜態網站(鏡像)位於: /home/mirrors/mirror

我正在嘗試僅在子目錄/home/mirrors/mirror/phpweb/設置 PHP 網站。 到目前為止它加載了 PHP,但所有的圖像、css 和 url 鏈接都指向/home/mirrors/mirror/filename*而不是/home/mirrors/mirror/phpweb/filename*

我試過:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

但這會導致錯誤日志顯示:

在 stderr 中發送的 FastCGI:“無法打開主腳本:/home/mirrors/mirror/phpweb/phpweb/index.php

最接近工作配置的是設置路徑的不正確方式:

fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror$fastcgi_script_name;

我在看什么? 這是整個配置。 基本上它可以工作,只是 images/css/js 沒有指向 phpweb/ 目錄。 我的配置似乎缺少一些允許 root /home/mirrors/mirror/phpweb 中的靜態數據的行; 指向該文件夾。

server {
    listen       80;
    listen      443 ssl http2;
    server_name  mirrors.domain.com;
   if ($scheme = http) {
        return 301 https://$http_host$request_uri;
    }

    location / {
        root /home/mirrors/mirror;
        index index.html index.htm;
        include /home/mirrors/Nginx-Fancyindex-Theme/fancyindex.conf;
        }

    location /phpweb {
        root /home/mirrors/mirror/phpweb;
        index /phpweb/index.php;
        }


    location ~ /phpweb/.*\.php$ {
        root /home/mirrors/mirror/phpweb;
#        try_files $uri =404;
#       try_files $uri $uri/ =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

這是我找到一個配置示例的地方。

更新:這是更新的配置:

server {
    listen       80;
    listen      443 ssl http2;
    server_name  mirrors.domain.com;
    root /home/mirrors/mirror;
   if ($scheme = http) {
        return 301 https://$http_host$request_uri;
    }

    location / {
        index index.html index.htm;
        include /home/mirrors/Nginx-Fancyindex-Theme/fancyindex.conf;
        }

    location /phpweb {
        index /phpweb/index.php;
        }


    location ~ /phpweb/.*\.php$ {
        try_files $uri =404;
#       try_files $uri $uri/ =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#       fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror/phpweb$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

結果是:

警告:include(/home/mirrors/mirror/include/site.inc):無法打開流:第 78 行的 /home/mirrors/mirror/phpweb/include/prepend.inc 中沒有這樣的文件或目錄

警告:include():在 /home/mirrors 中打開“/home/mirrors/mirror/include/site.inc”以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失敗/mirror/phpweb/include/prepend.inc 第 78 行

警告:include(/home/mirrors/mirror/include/langchooser.inc):無法打開流:第 81 行的 /home/mirrors/mirror/phpweb/include/prepend.inc 中沒有這樣的文件或目錄

警告:include():在 /home/mirrors 中打開 '/home/mirrors/mirror/include/langchooser.inc' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失敗/mirror/phpweb/include/prepend.inc 第 81 行

警告:include(/home/mirrors/mirror/include/ip-to-country.inc):無法打開流:第 84 行的 /home/mirrors/mirror/phpweb/include/prepend.inc 中沒有這樣的文件或目錄

警告:include(): 無法打開 '/home/mirrors/mirror/include/ip-to-country.inc' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') /home/mirrors/mirror/phpweb/include/prepend.inc 在第 84 行

警告:include(/home/mirrors/mirror/include/layout.inc):無法打開流:第 87 行的 /home/mirrors/mirror/phpweb/include/prepend.inc 中沒有這樣的文件或目錄

警告:include():在 /home/mirrors 中打開 '/home/mirrors/mirror/include/layout.inc' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失敗/mirror/phpweb/include/prepend.inc 第 87 行

警告:include(/home/mirrors/mirror/include/last_updated.inc):無法打開流:第 92 行的 /home/mirrors/mirror/phpweb/include/prepend.inc 中沒有這樣的文件或目錄

警告:include():在 /home/mirrors 中打開 '/home/mirrors/mirror/include/last_updated.inc' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失敗/mirror/phpweb/include/prepend.inc 第 92 行

警告:include_once(/home/mirrors/mirror/include/releases.inc):無法打開流:第 2 行的 /home/mirrors/mirror/phpweb/include/branches.inc 中沒有這樣的文件或目錄

警告:include_once():在 /home/mirrors 中打開 '/home/mirrors/mirror/include/releases.inc' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失敗/mirror/phpweb/include/branches.inc 在第 2 行

警告:include_once(/home/mirrors/mirror/include/version.inc):無法打開流:第 3 行的 /home/mirrors/mirror/phpweb/include/branches.inc 中沒有這樣的文件或目錄

警告:include_once():在 /home/mirrors 中打開 '/home/mirrors/mirror/include/version.inc' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失敗/mirror/phpweb/include/branches.inc 在第 3 行

致命錯誤:在第 44 行調用 /home/mirrors/mirror/phpweb/index.php 中未定義的函數 mirror_setcookie()

以前(原始配置粘貼在這篇文章中)我們沒有 php 錯誤並且頁面加載。 但是如上所述,圖像/靜態被破壞了。

root指令指定以 URI 為前綴的物理路徑部分,以查找物理文件。 有關詳細信息,請參閱此文檔

因此,在您發布的配置中,在我看來,所有三個位置的root值都應該相同:

root /home/mirrors/mirror;

事實上,在server塊中指定一次root指令並允許它被繼承到每個位置是很常見的。 例如:

root /home/mirrors/mirror;
location / { ... }
location /phpweb { ... }
location ~ \.php$ { ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM