首页 >后端开发 >php教程 >如何有效配置 Nginx 位置块以服务具有不同 URI 的子文件夹?

如何有效配置 Nginx 位置块以服务具有不同 URI 的子文件夹?

Susan Sarandon
Susan Sarandon原创
2024-11-24 01:11:15278浏览

How to Efficiently Configure Nginx Location Blocks for Serving Subfolders with Different URIs?

子文件夹的 Nginx 位置配置

在 Nginx 配置中,可以将特定文件夹路径映射到不同的 URI,以改进组织和路由。常见的场景是配置对目录中子文件夹的访问。

考虑像 /var/www/myside/ 这样的路径结构,其中存在两个子文件夹 /static 和 /manage。目标是通过 URI /(对于 /static)和 /manage(对于 /manage)访问这些子文件夹,同时确保 PHP 文件的正确路由。

初始示例 Nginx 配置可能如下所示:

server {
  listen 80;
  server_name example.org;
  error_log /usr/local/etc/nginx/logs/mysite/error.log;
  access_log /usr/local/etc/nginx/logs/mysite/access.log;
  root /var/www/mysite;

  location /manage {
    root $uri/manage/public;

    try_files $uri /index.php$is_args$args;
  }

  location / {
    root $uri/static/;

    index index.html;
  }

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

但是,此配置可能无法正常访问 /manage。解决方案是在使用不同 URI 访问子文件夹时使用 alias 指令而不是 root。

这里是修改后的 Nginx 配置:

server {
    ...

    location ^~ /manage {
        alias /var/www/mysite/manage/public;
        index index.php;

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

        location ~ \.php$ {
            ...
        }
    }

    ...
}

通过此修改,配置映射 /使用 root 静态到 / 和使用别名 /manage 到 /manage。此外,try_files 指令和 if 指令确保正确处理对这些子文件夹中不存在的文件的请求。

通过组合别名和根指令,以及正确使用位置块,Nginx 可以配置为有效地提供具有特定 URI 的子文件夹中的内容。

以上是如何有效配置 Nginx 位置块以服务具有不同 URI 的子文件夹?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn