이미 지적했듯이 Nginx는 HTML 문서를 자체적으로 생성하는 데 적합하지 않습니다. 보통 이것은 PHP 나 Perl과 같은 서버 측 처리 언어에 대한 작업입니다. 그러나 Nginx만으로이 문제를 해결할 수있는 몇 가지 방법이 있습니다.
첫 번째 확실한 선택은 Nginx에서 서버 측 처리 언어를 사용하는 것입니다. 3 가지 언어 (Perl, Lua 및 방언 Javascript)에 대해 3 가지 옵션 모듈을 사용할 수 있습니다.
이 방법의 문제점은 기본적으로 이러한 모듈을 거의 사용할 수 없으며 많은 경우 Nginx를 수동으로 만들어 모든 모듈을 활성화해야한다는 것입니다. 때때로 Nginx의 사용자 정의 빌드를 얻 자마자 직접 지원하고 업그레이드해야하기 때문에 고통 스러울 수 있습니다.
그러나 SSI을 포함한 다른 옵션이 있습니다. 그것은 가장 좋은 해결책은 아니지만 작동 할 수 있습니다. 그리고 위에서 언급 한 모듈과는 달리, SSI 지원은 Nginx의 거의 모든 배포본과 함께 제공됩니다. 내 생각 엔, 당신의 Nginx는 아무것도 컴파일하지 않고 SSI를 할 수 있습니다. 이제 여기
# Define a special virtual location for your cpp files
location ~* \.(cpp|h)$ {
# Unless a GET parameter 'raw' is set with 'yes'
if ($arg_raw = 'yes') {
break;
}
# Redirect all the requests for *.cpp and *.h files to another location @js
try_files @js @js;
}
location @js {
ssi on; # Enable SSI in this location
default_type text/html; # Tell the browser that what is returned is HTML
# Generate a suitable HTML document with an SSI insertion
return 200 '<!DOCTYPE html>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<pre><code class="cpp"><!--# include virtual="$uri?raw=yes" --></code></pre>';
}
를 브라우저에서 일부 *의 .cpp 파일 요청하는 경우 발생하는 것입니다 :
그래서, 구성은 이렇게 가고
- 요청이 첫 번째 위치로 이동을, URI가
cpp
으로 끝나기 때문입니다.
- 그런 다음 요청에 GET 매개 변수
raw
이 없으므로 두 번째 위치 @js
으로 리디렉션됩니다.
- 두 번째 위치에서 SSI 템플릿은 return으로 생성 된 다음
ssi on
때문에 SSI 엔진에서 즉시 처리됩니다.
include virtual="$uri?raw=yes"
은 Nginx에서 원래 요청한 파일 (내부 변수 $uri이 cpp 파일의 웹 경로 인 원래 URI를 저장함)로 다른 요청 (하위 요청)을 수행하도록 SSI 엔진에 지시합니다. 브라우저의 요청과 Nginx의 하위 요청의 차이는 ?raw=yes
입니다.
- 보조 요청은 다시 첫 번째 위치에서 처리되지만
raw
GET 매개 변수 때문에 두 번째 위치로 이동하지 않습니다. 이 경우 cpp 파일의 원시 내용이 부속 요청에 대한 응답으로 리턴됩니다.
- SSI 엔진은이 응답을 나머지 템플릿과 결합하여 결과를 브라우저에 반환합니다.또한 default_type은 결과를 HTML 문서로 렌더링하도록 브라우저에 지시합니다.
출력 here의 예를 볼 수 있습니다. 이 예제에서는 this 강조 라이브러리를 사용했습니다. SSI 템플릿을 수정하는 것만으로 원하는대로 변경할 수 있습니다.
웹 서버에서 수행 할 수는 있지만 대개는 가능하지 않습니다. 대신 일반적으로 콘텐츠 전달 프레임 워크 또는 시스템에 따라 다릅니다. –
서버에 콘텐츠 전송 프레임 워크가 전혀 없습니다. 파일을 보는 데 fancyindex 만 켜져 있습니다. – Hoszy
Nginx 자체에서 하이라이팅 구문을 수행 할 수 없으므로 PHP와 같은 서버 측 언어를 사용하여 hilight 구문을 사용하여 html 파일을 제공하거나 js 플러그인을 사용하여 클라이언트 측에서 하이일드를 사용해야합니다. –