>백엔드 개발 >PHP 튜토리얼 >다른 URI를 사용하여 하위 폴더를 제공하기 위해 Nginx 위치 블록을 효율적으로 구성하는 방법은 무엇입니까?

다른 URI를 사용하여 하위 폴더를 제공하기 위해 Nginx 위치 블록을 효율적으로 구성하는 방법은 무엇입니까?

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에 매핑할 수 있습니다. 일반적인 시나리오는 디렉터리 내의 하위 폴더에 대한 액세스를 구성하는 것입니다.

/static 및 /manage라는 두 개의 하위 폴더가 있는 /var/www/myside/와 같은 경로 구조를 고려해보세요. 목표는 PHP 파일의 적절한 라우팅을 보장하면서 URI /(/static의 경우) 및 /manage(/manage의 경우)를 통해 이러한 하위 폴더에 액세스하는 것입니다.

초기 샘플 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를 사용하여 하위 폴더에 액세스할 때 루트 대신 별칭 지시어를 사용하는 것입니다.

수정된 Nginx 구성은 다음과 같습니다.

server {
    ...

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

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

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

    ...
}

이러한 수정으로 구성은 / 루트를 사용하여 /를 정적으로 사용하고 별칭을 사용하여 /manage를 /manage합니다. 또한 try_files 지시문과 if 지시문은 이러한 하위 폴더 내에 존재하지 않는 파일에 대한 요청이 올바르게 처리되도록 보장합니다.

별칭과 루트 지시문을 결합하고 위치 블록을 적절하게 사용하여 Nginx를 다음과 같이 구성할 수 있습니다. 특정 URI가 있는 하위 폴더의 콘텐츠를 효과적으로 제공합니다.

위 내용은 다른 URI를 사용하여 하위 폴더를 제공하기 위해 Nginx 위치 블록을 효율적으로 구성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.