Nginx - 特定位置的根

Nginx - 特定位置的根

我花了很多时间来实现这个(希望是简单的)解决方案。

我们在 site.com 有一个站点,它由 /home/site/public 提供服务。我们需要一个 site.com 的特定子目录 (site.com/gps),以便从不同的文档根目录提供服务,以避免安全隐患。例如,site.com/gps 应由 /home/sitegps/public 提供服务。我已经实现了以下位置块,但由于无限重定向,它只会导致 http 500。我希望有人以前做过这件事,知道我哪里做错了……

# Send all /gps requests to new root
location ~ ^/gps(?:/(.*))?$ {
    alias /home/sitegps/public;
    try_files $uri $uri/ /gps/index.php?$uri&$args;
}

答案1

而不是alias,可以使用位置块内的指令。

/gps我认为您也可以通过使用来简化您的位置匹配。

location /gps {
    root /home/sitegps/public;
    try_files $uri $uri/ /gps/index.php?$uri&$args;
}

这不会重写请求,并且会匹配名为gps这样的目录中的文件:/home/sitegps/public/gps/。我不确定这是否是必需的。

更新

假设您不想gps/home/sitespg/public目录中拥有该目录,我测试了使用别名并得出以下配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    index index.html;

    server_name _;

    location / {
            try_files $uri $uri/ =404;
    }

    location /gps/ {
            alias /var/www/gps;
            try_files $uri $uri/ =404;
    }
}

我相信它们alias会做你想做的事,但是要么是正则表达式位置匹配导致了问题,要么是存在其他问题。

使用尾随斜杠,/gps/您将避免匹配类似的路径/gpsport,但您需要重写/gps/gps//gps位置块完全匹配。

改写:

rewrite ^/gps$ /gps/

地点:

location = /gps {
    alias /var/www/gps;
    try_files $uri $uri/ =404;
}

毫无疑问,还有更多的变化也可以发挥作用。

相关内容