Closed NaoyaFukuma closed 1 year ago
リクエストラインのURIから、CGIスクリプトを特定することを検討した際に、 現状のconfigの仕様を変更することとした。
<結論> is_cgiを廃止し、cgi_pathをcgi_extensionと変更する。
is_cgi
cgi_path
cgi_extension
<現状> junさんの実装を参考にしており、そこから現状のconfigの仕様を作成した。 しかし、そもそもCGIについての理解が及んでおらずis_cgiディレクティブやcgi_pathディレクティブをどのように使うのかを想定できていなかった。
<問題点> (junさんの実装では)cgi_pathディレクティブの利用方法が、Python3のような値を設定し、ececve()の第一引数として使用するものだった。しかし、これでは、Pythonしか実行できないといった不都合が生じる。 また、リクエストラインのURIから、CGIスクリプトを特定し、それ以後をPATH_INFOとして扱う。 といった機能を実装するにあたって、CGIスクリプトを特定する作業が煩雑になるものであった。
<解決策> そこで、ApacheにおけるCGIの設定を参考にした。 (NginxはCGIをサポートしていないためか、複雑な設定を要するため) 例)
<Directory "/usr/lib/cgi-bin"> Options +ExecCGI AddHandler cgi-script .cgi .pl </Directory>
この設定の読み方は、/usr/lib/cgi-binディレクトリのサブディレクトリも含む配下に、 拡張子が.cgi | .pl であれば、CGIスクリプトと判定する。 なお、当該ディレクトリ配下で他の拡張子であれば静的リソースとしてCGIを挟まずリクエストが処理される。 というもの。 この設計思想を取り入れ、
.cgi | .pl
location /usr/lib/cgi-bin { is_cgi on; // これは不要。cgi_extension に包含される。 cgi_extension .cgi .pl; root /root/server1/ }
このように、is_cgiを廃止し、cgi_pathをcgi_extensionと変更する。
リクエストラインのURIから、CGIスクリプトを特定することを検討した際に、 現状のconfigの仕様を変更することとした。
<結論>
is_cgi
を廃止し、cgi_path
をcgi_extension
と変更する。<現状> junさんの実装を参考にしており、そこから現状のconfigの仕様を作成した。 しかし、そもそもCGIについての理解が及んでおらず
is_cgi
ディレクティブやcgi_path
ディレクティブをどのように使うのかを想定できていなかった。<問題点> (junさんの実装では)
cgi_path
ディレクティブの利用方法が、Python3のような値を設定し、ececve()の第一引数として使用するものだった。しかし、これでは、Pythonしか実行できないといった不都合が生じる。 また、リクエストラインのURIから、CGIスクリプトを特定し、それ以後をPATH_INFOとして扱う。 といった機能を実装するにあたって、CGIスクリプトを特定する作業が煩雑になるものであった。<解決策> そこで、ApacheにおけるCGIの設定を参考にした。 (NginxはCGIをサポートしていないためか、複雑な設定を要するため) 例)
この設定の読み方は、/usr/lib/cgi-binディレクトリのサブディレクトリも含む配下に、 拡張子が
.cgi | .pl
であれば、CGIスクリプトと判定する。 なお、当該ディレクトリ配下で他の拡張子であれば静的リソースとしてCGIを挟まずリクエストが処理される。 というもの。 この設計思想を取り入れ、このように、
is_cgi
を廃止し、cgi_path
をcgi_extension
と変更する。