首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nginx + php-fpm从子目录向PHP提供服务

问使用nginx + php-fpm从子目录向PHP提供服务
EN

Stack Overflow用户
提问于 2016-05-31 06:12:43
回答 1查看 1.1K关注 0票数 1

主要静态网站(镜像)位于:/home/mirrors/mirror

我正在尝试只在子目录/home/mirrors/mirror/phpweb/中设置PHP网站。到目前为止,它将加载PHP,但是所有的映像、css和url链接都指向/home/mirrors/mirror/filename*而不是/home/mirrors/mirror/phpweb/filename*。

我试过:

代码语言:javascript
复制
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

但这会导致错误日志显示:

FastCGI在stderr中发送:“无法打开主脚本:/home/镜像/镜像/phpweb/phpweb/index.php

与工作配置最接近的是设置路径的错误方式:

代码语言:javascript
复制
fastcgi_param SCRIPT_FILENAME /home/mirrors/mirror$fastcgi_script_name;

我在看什么?这是整个配置。基本上,除了图片/css/js没有指向phpweb/目录之外,它可以工作。我的配置似乎缺少了一些行,允许根/home/镜像/镜像/phpweb中的静力学;指向该文件夹。

代码语言:javascript
复制
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;
    }
}

这里是我找到一个配置示例的地方。

更新:这里的更新配置:

代码语言:javascript
复制
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/镜像/镜像/include/site.inc’失败,以便将(include_path='.:/usr/share/php:/usr/share/pear')包含在第78行的/home/mirrors/mirror/phpweb/include/prepend.inc中 警告: include(/home/mirrors/mirror/include/langchooser.inc):未能打开流:在第81行的/home/mirrors/mirror/phpweb/include/prepend.inc中没有这样的文件或目录 警告: include():在第81行的'/home/mirrors/mirror/include/langchooser.inc‘中打开包含(include_path='.:/usr/share/php:/usr/share/pear')的/home/mirrors/mirror/phpweb/include/prepend.inc失败 警告: include(/home/mirrors/mirror/include/ip-to-country.inc):未能打开流:在第84行的/home/mirrors/mirror/phpweb/include/prepend.inc中没有这样的文件或目录 警告: include():在第84行的'/home/mirrors/mirror/include/ip-to-country.inc‘中打开包含(include_path='.:/usr/share/php:/usr/share/pear')的/home/mirrors/mirror/phpweb/include/prepend.inc失败 警告: include(/home/mirrors/mirror/include/layout.inc):未能打开流:在第87行的/home/mirrors/mirror/phpweb/include/prepend.inc中没有这样的文件或目录 警告: include():打开‘/home/镜像/镜像/include/layout.inc’失败,以便将(include_path='.:/usr/share/php:/usr/share/pear')包含在第87行的/home/mirrors/mirror/phpweb/include/prepend.inc中 警告: include(/home/mirrors/mirror/include/last_updated.inc):未能打开流:在第92行的/home/mirrors/mirror/phpweb/include/prepend.inc中没有这样的文件或目录 警告: include():在第92行的'/home/mirrors/mirror/include/last_updated.inc‘中打开包含(include_path='.:/usr/share/php:/usr/share/pear')的/home/mirrors/mirror/phpweb/include/prepend.inc失败 警告: include_once(/home/mirrors/mirror/include/releases.inc):未能打开流:在第2行的/home/mirrors/mirror/phpweb/include/branches.inc中没有这样的文件或目录 警告:(include_path='.:/usr/share/php:/usr/share/pear') ():在第2行的/home/mirrors/mirror/phpweb/include/branches.inc中包含include_once():打开/home/镜像/镜像/include_once/Relases.inc‘失败 警告: include_once(/home/mirrors/mirror/include/version.inc):未能打开流:第3行的/home/mirrors/mirror/phpweb/include/branches.inc中没有这样的文件或目录 警告:(include_path='.:/usr/share/php:/usr/share/pear') ():在第3行的/home/mirrors/mirror/phpweb/include/branches.inc中包含include_once():打开/home/镜像/镜像/include_once/version.inc‘失败 致命错误:调用第44行中/home/镜像/镜像/phpweb/index.php中未定义的函数mirror_setcookie()

以前(原始配置粘贴在这篇文章中),我们没有php错误和页面加载。但如上文所述,图像/静力学被打破。

EN

回答 1

Stack Overflow用户

发布于 2016-05-31 08:07:40

root指令指定物理路径中以URI为前缀以查找物理文件的部分。详情请参见本文件。

因此,在您发布的配置中,在我看来,在所有三个位置上,root的值应该是相同的:

代码语言:javascript
复制
root /home/mirrors/mirror;

实际上,在root块中指定一次server指令并允许将其继承到每个位置是很常见的。例如:

代码语言:javascript
复制
root /home/mirrors/mirror;
location / { ... }
location /phpweb { ... }
location ~ \.php$ { ... }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37538082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档