すでに指摘したように、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
がないため、第2の場所@js
にリダイレクトされます。
- SSIテンプレートはreturnで生成され、
ssi on
のためにすぐにSSIエンジンによって処理されます。
include virtual="$uri?raw=yes"
は、SSIエンジンに、Nginx内から元の要求されたファイル(内部変数$uriがcppファイルへのWebパス)を別の要求(副要求)するよう指示します。ブラウザからのリクエストとNginxのサブリクエストの違いは?raw=yes
です。
- サブリクエストは再び最初の場所で処理されますが、
raw
GETパラメータのため、2番目の場所には移動しません。この場合、cppファイルの生の内容が副問い合わせへの応答として返されます。
- SSIエンジンはこのレスポンスを残りのテンプレートと組み合わせて、結果をブラウザに返します。さらに、default_typeは、結果をHTMLドキュメントとしてレンダリングするようにブラウザに指示します。
出力hereの例を見ることができます。私はthisこの例のハイライトライブラリを使用しました。あなたはSSIテンプレートを変更するだけで好きなものを変更することができます。
おそらくWebサーバーによって実行される可能性がありますが、通常はそうではありません。代わりに、これを実行するのはコンテンツ配信フレームワークまたはシステムまでです。 –
サーバーにコンテンツ配信フレームワークはありません。ファイルの表示にはfancyindexのみがオンです。 – Hoszy
Nginx自体は構文のハイライトを行うことができません。PHPのようなサーバー側言語を使用して、hilightという構文でhtmlファイルを提供するか、jsプラグインを使用してクライアント側でハイライトする必要があります –