当前位置: 首页 > 知识库问答 >
问题:

nginx 配置为什么把 root 写到 location 模块中就异常 ?

晏正豪
2023-06-24

server 配置如下

server {
        listen       80;
        server_name  localhost;

        root   /data/wwwroot/public;

        location / {
            # root   /data/wwwroot/public;
            index  index.html index.htm index.php;
        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }

        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }

        location ~ \.php(.*)$ {
            # root   /data/wwwroot/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
    }

问题是

1、把 root 放到 Localtion 中,同时注释掉 server 中的 root ,请求得到的实际路径是
/usr/local/nginx/html/

2、应用1操作,同时把 location ~ .php(.*)$ 中 root 启用,实际请求会是
/data/wwwroot/public/index.php/index.php
多了个 index.php 出来,不知道是哪里触发的

3、尝试修改 fastcgi_param SCRIPT_FILENAME 为项目实际路径也无效果 !

共有1个答案

金瑞
2023-06-24
  1. 没记错的话,location 里应该用 alias,原因忘记了
  2. 看你的配置,似乎少了 try_files $uri $uri/ /index.php$args;,没有先尝试直接命中的文件。不确定是不是这个原因。
  3. 有没有效果不是试出来的,你得先找到 SCRIPT_FILENAME 的生效原因,改它才有意义
  4. 2023 年了,还在用 9000 啊……可以升级到 php-fpm 了
 类似资料:
  • 只有这一个地方配置了 8001 端口。 打算是通过访问 http://localhost:8001/about/ 打开 html 目录下的 about.html 的,但是返回 403 错误。如果是访问 http://localhost:8001/ 会返回 html 目录下的 index.html 文件 如果注释了这里的配置,那么 http://localhost:8001/ 是无法访问的。也就是配

  • 如题,我实在搞不懂,官网也没看到相关说明,他们到底是拼接呢,还是代替呢,还是别的关系?整个的访问逻辑到底是怎么样的?

  • 本文向大家介绍nginx配置location方法总结,包括了nginx配置location方法总结的使用技巧和注意事项,需要的朋友参考一下 location匹配顺序 1."="前缀指令匹配,如果匹配成功,则停止其他匹配 2.普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配) 3.正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配 4.如

  • 包含片段/fastcgi-php.com;= 这是我的配置,我一辈子都不能让它工作。 我的期望是有超文本传输协议://mediaserver.localdomain/去"/var/www/html/组织者/index.php" 当我转到http://mediaserver时。localdomain/homelab/it提取“/opt/homelab/index.php” 但只有超文本传输协议://

  • 又一个文件提供商失去了灵魂。。。我已经在这个问题上工作了一天多了,似乎我错过了一些重要的东西。任何帮助都将不胜感激! 我试图发送电子邮件附件使用文件提供商。 我的Androidanifest.xml部分: 文件路径。xml: 创建附件: 以及Uri创建: 其中是创建文件时在代码段中返回的值。 在Uri创建行上,我得到异常: 如留档(https://developer.android.com/ref

  • 这让我想到了一些问题: 此TCP套接字是另一种类型的Unix域套接字吗?这个TCP套接字到底是什么? 文件中提到的cosocket是什么?我用谷歌找不到 TCP/IP模型的传输层也使用TCP协议,此API是否允许直接在传输层编程,绕过应用层?