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