首頁  >  文章  >  後端開發  >  如何有效配置 Nginx 位置區塊以服務具有不同 URI 的子資料夾?

如何有效配置 Nginx 位置區塊以服務具有不同 URI 的子資料夾?

Susan Sarandon
Susan Sarandon原創
2024-11-24 01:11:15199瀏覽

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