NGINX PHP FastCGI 여러 위치(별칭) 문제

NGINX PHP FastCGI 여러 위치(별칭) 문제

처음 게시하고 이 모든 것에 대해 매우 새로운 내용입니다. 여기에서 스택 오버플로에 대해 시도해 보라고 권유받았으며 링크된 몇 가지 다른 내용을 읽었지만 머리를 감을 수가 없습니다. 많은 시행착오를 거쳐 현재 내 위치 블록이 다음과 같이 보입니다. 글로벌 PHP가 제거되어 내 위치 블록에 포함되었습니다.

첫 번째는 잘 작동하고, 몇 가지 변경 후 두 번째는 이제 403 금지 또는 404 찾을 수 없음을 표시하지 않지만 일반 문자열 '파일을 찾을 수 없음'을 표시합니다.

www.mydomain.com- index.php 파일 제공/var/www/html/test

www.mydomain.com/test- index.php의 파일을 제공해야 합니다. /var/www/html/test2하지만 다음 오류로 인해 실패합니다.

방문 시 내 Nginx 오류 로그에 다음이 표시됩니다.

2018/02/26 19:13:47 [error] 25229#25229: *185968 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: X.X.X.X, server: domain.co.uk, request: "GET /test/ HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "domain.co.uk"

여기에서 다양한 fastcgi_param SCRIPT_FILENAME 매개변수에 대한 다양한 정보를 살펴봤지만 그 중 어떤 것도 제대로 작동하지 않습니다. 이 작업을 수행하기 위해 몇 시간을 보냈고 어느 정도 진전을 이루었지만 이 작업을 수행하는 데 있어 마지막 작업이 될 것이라고 생각하는 작업 때문에 어려움을 겪었기 때문에 어떤 제안이라도 정말 감사하겠습니다.

나는 잘 재생되지 않는다는 말을 들었으므로 별칭에서 try_files를 이미 제거했으며(이전의 403) 이 오류를 멈추지 않은 fastcgi_param bu에 $request_filename을 추가했습니다.

location ~ ^((?!\/test).)*$ {
include /etc/nginx/mime.types;
    root /var/www/html/test;
    index index.php index.html index.htm;
    location ~ \.php$ {
        root /var/www/html/test;
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}



location ~ ^/test(.*)$ {
include /etc/nginx/mime.types;
    alias /var/www/html/test2/;
    index index.php index.html index.htm;
    location ~ \.php$ {
        alias /var/www/html/test2/;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$request_filename;
        include fastcgi_params;
    }
}

여기서 시도해 보라고 추천한 사용자가 조언했습니다.

Move the root /var/www/html/test; outside the first location block. nginx pitfalls
Replace alias with root in second block. according to nginx docs
remove the second alias in second block. it was redundant anyway
remove $request_filename; from fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$request_filename; same error on serverfault

나는 이것을 했지만 이것은 제안된 변경 사항을 사용하여 /test/를 방문할 때 404 nginx 오류가 발생하여 예제에 따라 다음과 같이 보이게 되는 거의 한 단계 뒤로 물러났습니다.

 server {
   root /var/www/html/test;
   location ~ ^((?!\/test).)*$ {
      include /etc/nginx/mime.types;
      index index.php index.html index.htm;
      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }

   location ~ ^/test(.*)$ {
      include /etc/nginx/mime.types;
      root /var/www/html/test2/;
      index index.php index.html index.htm;
      location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }
}

나는 누군가가 나에게 도움이 될 어떤 종류의 지식을 가지고 있다면 이 문제를 해결하기 위해 기꺼이 노력하고 있습니다.

답변1

Stackoverflow의 Cemal이 이 문제를 해결했습니다!

server {
   root /var/www/html/test;

   location /test {
      include /etc/nginx/mime.types;
      root /var/www/html/test2/;
      index index.php index.html index.htm;
      location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }

   location / {
      include /etc/nginx/mime.types;
      index index.php index.html index.htm;
      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }


}

404의 문제는 첫 번째 위치가 /var/www/html/test2에 있지만 /test 위치가 접두사로 지정되어 웹 서버 끝에서 디렉토리가 /var/www/html/test2가 되어야 하는 파일에 발생했습니다. .

관련 정보