使用PHP的Nginx子目录根

使用PHP的Nginx子目录根,php,nginx,nginx-location,Php,Nginx,Nginx Location,我正在docker容器中运行nginx。我想有一个子目录/web/来访问我的个人文件和项目。它还应该支持php 下面是我正在运行的,但是domain-a.com/web不断导致404。由于同一个PHP块在子域上工作,但直接在服务器{}块中工作,因此PHP被确认工作 http { server { listen 443 ssl; server_name domain-a.com domain-b.com; # Mime type

我正在docker容器中运行nginx。我想有一个子目录
/web/
来访问我的个人文件和项目。它还应该支持php

下面是我正在运行的,但是
domain-a.com/web
不断导致404。由于同一个PHP块在子域上工作,但直接在
服务器{}
块中工作,因此PHP被确认工作

http {

    server {
        listen      443 ssl;
        server_name domain-a.com domain-b.com;

        # Mime types
        include /etc/nginx/confs/mime.types;

        # SSL
        include /etc/nginx/confs/nginx-ssl.conf;

        # Proxy to organizr
        # This works
        location / {
            proxy_pass http://organizr/;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # HTTP 1.1 support
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }

        # Root folder for my personal files/projects
        # Doesn't work
        location /web {
            index index.php index.html;
            root /etc/nginx/www;

            location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass php:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
            }
        }
    }
}

如果文件位于
/etc/nginx/www
中,则需要使用
别名
指令,而不是
指令。有关详细信息,请参阅

例如:

location ^~ /web {
    index index.php index.html;
    alias /etc/nginx/www;

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

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        fastcgi_pass php:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}

使用
$request\u filename
获取别名文件的正确路径。由于以下原因,请避免使用
别名
尝试\u文件
。如果您的文件也在子目录中,即
/etc/nginx/www/web/
?@RichardSmith否,它们在
/etc/nginx/www/
中,请参见
的使用。谢谢。这就是答案。他马上就开始工作了。