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;
}