php-fpm으로 일부 js/html 파일 제공

php-fpm으로 일부 js/html 파일 제공

nginx와 wordpress가 있는 docker-compose 설정이 있습니다. 웹에서 튜토리얼 중 하나를 따랐는데 모든 것이 잘 작동하는 것 같습니다.

하지만 PHP를 통해 직접 몇 개의 html/js 파일을 생성하는 중요한 플러그인이 하나 있습니다. HTML 코드에 <script>경로가 포함된 태그가 포함되어 /script.js있고 플러그인이 해당 특정 이름을 포착하여 적절한 콘텐츠로 응답한다는 의미입니다. 여기에는 URL 재작성 모듈이 포함되지 않으며 일부만 자체 작성됩니다(예: 플러그인에서).

fpm docker 이미지가 서버 측에서 생성된 js를 제공할 수 있도록 nginx를 구성하는 방법을 알 수 없습니다.

이제 다음과 같은 설정이 있습니다.

location / {
  try_files   $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
  fastcgi_pass wordpress:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ~ ^/(script1.js|script2.js) {
  fastcgi_pass wordpress:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ~* \.(css|js|gif|ico|jpeg|jpg|png)$ {
  expires max;
  log_not_found off;
}

페이지를 다시 요청하면 script1과 script2가 404로 응답합니다.

이것이 일반적으로 달성 가능합니까?

답변1

try_files명령문은 정적 파일이 있는 경우 이를 제공하고 그렇지 않은 경우 요청을 에 보냅니다 /index.php. script1.js및 파일이 존재하지 않기 때문에 원하는 대로 script2.js에서 처리됩니다 ./index.php

및 블록 location ~ ^/(script1.js|script2.js)location ~* \.(css|js|gif|ico|jpeg|jpg|png)$이 논리를 깨뜨립니다.

한 가지 해결책은 블록을 제거하고 location ~ ^/(script1.js|script2.js)(이는 잘못된 것입니다) 블록 try_files에 명령문 을 배치하는 것입니다 location ~* \.(css|js|gif|ico|jpeg|jpg|png)$.

예를 들어:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
    ...
}
location ~* \.(css|js|gif|ico|jpeg|jpg|png)$ {
    try_files $uri /index.php?$query_string;
    expires max;
    log_not_found off;
}

관련 정보