nginxでcgi-bin配下の画像などが表示されない!

  • ブックマーク

Nginx_logo

WebサーバでPerlなどのCGIスクリプトを設置するとき、セキュリティの関係でサーバによっては、cgi-binというディレクトリを利用することがあります。一般的にcgi-binにはスクリプトファイルのみを置くことになっているので、スクリプトから参照したい画像やHTML、スタイルシートなどをcgi-bin配下に置いても表示することは出来ません。

WebサーバがApacheの場合には、「cgi-bin 画像」などで検索すれば対策がわかるのですが、今回はnginxを利用していたので、どうしたらよいかと思案した結果、採った対策をご紹介します。

手法は目新しいものではなく、Apacheでもしばしばあるのですが、画像やHTML、CSSのファイルをWeb公開用のディレクトリ(「www」「htdocs」「web」等)配下に移してしまうものです。

それだけだと参照する場所が変わってしまうので、スクリプトを書き直すか、nginxの設定を変更する必要があります。今回スクリプトは単純なものではなかったので、nginxの設定を変更することにします。

元々 /web/ という公開用ディレクトリ、同じ階層に /cgi-bin/ があって、hoge.cgi、画像を入れた images/ というディレクトリがあったとします。その images/ ディレクトリをごっそり /web/hoge/images/ に移動します。

次に、nginx.conf(場合により sites-available/example.com.vhost など、ご自分の環境に合わせて)に書き加えます。

location /cgi-bin/hoge/images/ {
    alias /var/www/example.com/web/hoge/images/;
}

locationはドキュメントルートから書いていきます。aliasはサーバルートから絶対パスで指定します。

こんな感じで今回は対応してみました。もっとスマートなやり方があったら教えてくださいね。

2014/4/26 更新:誤記を訂正しました(site-available → sites-available)。

この記事を書いた人

いがらしたけし