sankyo_fukuzawa
2022年7月5日 19時24分
お世話になっております。
福澤と申します。
以下コマンドでArmadillo-640にLighttpdをインストールしてWEBサーバ構築を行っております。
apt-get install lighttpd
HTMLファイルから.jsファイルを呼び出す処理を行うために、/etc/lighttpd/lighttpd.confへ以下内容を追記しました。
mimetype.assign = ( ".js" => "text/javascript" )
lighttpd.conf変更後、Armadillo-640を再起動すると、以下エラーが発生し、Lighttpdが立ち上がらなくなりました。
[FAILED] Failed to start Lighttpd Daemon. See 'systemctl status lighttpd.service' for details.
コメント
koga
アットマークテクノの古賀です。
福澤さん:
>HTMLファイルから.jsファイルを呼び出す処理を行うために、/etc/lighttpd/lighttpd.confへ以下内容を追記しました。
>
mimetype.assign = ( ".js" =>"text/javascript" )
>
>lighttpd.conf変更後、Armadillo-640を再起動すると、以下エラーが発生し、Lighttpdが立ち上がらなくなりました。
>
[FAILED] Failed to start Lighttpd Daemon. See 'systemctl status lighttpd.service' for details.
…
>/etc/lighttpd/lighttpd.confへの記述が間違っているのでしょうか?
>もしくは、lighttpd.confの編集を行わなくても、HTMLファイルから.jsファイルを呼び出すことは可能なのでしょうか?
lighttpd がエラーする原因は、デフォルトの lighttpd.conf では mimetype.assign が定義済みだからのようです。
定義済みの mimetype.assign の MIME タイプ設定は、
/etc/mime.types
に記載されていますが、拡張子 .js に対する設定行がありますので、デフォルトのままで .js をハンドリングできるのではないかと思います。
ただし、/etc/mime.types では、.js に対して MIME タイプ "application/javascript" を割り当てていますので、"text/javascript" を割り当てたい場合は、/etc/mime.types を書き換えるか、または、先月7日にリリースされた 1.4.65 を使う必要があるでしょう:
https://www.lighttpd.net/
以下、余談的な説明す。
/etc/lighttpd/lighttpd.conf を見て頂くと、次の行があるかと思います:
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
この create-mime.assign.pl は Perl スクリプトですが、以下のようにして、mimetype.assign の定義を生成するようになっています:
#!/usr/bin/perl -w use strict; open MIMETYPES, "/etc/mime.types" or exit; print "mimetype.assign = (\n"; my %extensions; while(<MIMETYPES>) { chomp; s/\#.*//; next if /^\w*$/; if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) { foreach(split / /, $2) { # mime.types can have same extension for different # mime types next if $extensions{$_}; $extensions{$_} = 1; print "\".$_\" => \"$1\",\n"; } } } print ")\n";
このように、デフォルトの lighttpd.conf では mimetype.assign が定義済みのために、lighttpd.conf に 'mimetype.assign = ( xxx )' を追加すると、二重定義になってエラーしてしまい、起動しない、ということのようです。上述した /etc/mime.types では設定されていない拡張子と MIME タイプの追加設定を行いたい場合は、'mimetype.assign = ( xxx )' ではなく、'mimetype.assign += ( xxx )' と書けばよいようです。つまり、'=' ではなく '+=' を使えばよいようです:
https://stackoverflow.com/a/26430778
ただし、'mimetype.assign += ( xxx )' の行は、
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
の行より後に書く必要があるはずです。
ちなみに、デフォルトの lighttpd.conf に以下の行を追加するだけだと、「.js に対する行が重複している」という旨のエラーになり、起動しません。
mimetype.assign = ( ".js" =>"text/javascript" )
以上、参考になりましたら幸いです。
sankyo_fukuzawa
> lighttpd がエラーする原因は、デフォルトの lighttpd.conf では mimetype.assign が定義済みだからのようです。
> 定義済みの mimetype.assign の MIME タイプ設定は、
> /etc/mime.types
> に記載されていますが、拡張子 .js に対する設定行がありますので、デフォルトのままで .js をハンドリングできるのではないかと思います。
> ただし、/etc/mime.types では、.js に対して MIME タイプ "application/javascript" を割り当てていますので、"text/javascript" を割り当てたい場合は、/etc/mime.types を書き換えるか、または、先月7日にリリースされた 1.4.65 を使う必要があるでしょう:
> https://www.lighttpd.net/
>
> 以下、余談的な説明す。
> /etc/lighttpd/lighttpd.conf を見て頂くと、次の行があるかと思います:
>
> include_shell "/usr/share/lighttpd/create-mime.assign.pl" >
> この create-mime.assign.pl は Perl スクリプトですが、以下のようにして、mimetype.assign の定義を生成するようになっています:
>
> #!/usr/bin/perl -w > use strict; > open MIMETYPES, "/etc/mime.types" or exit; > print "mimetype.assign = (\n"; > my %extensions; > while(<MIMETYPES>) { > chomp; > s/\#.*//; > next if /^\w*$/; > if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) { > foreach(split / /, $2) { > # mime.types can have same extension for different > # mime types > next if $extensions{$_}; > $extensions{$_} = 1; > print "\".$_\" => \"$1\",\n"; > } > } > } > print ")\n"; >
>
> このように、デフォルトの lighttpd.conf では mimetype.assign が定義済みのために、lighttpd.conf に 'mimetype.assign = ( xxx )' を追加すると、二重定義になってエラーしてしまい、起動しない、ということのようです。上述した /etc/mime.types では設定されていない拡張子と MIME タイプの追加設定を行いたい場合は、'mimetype.assign = ( xxx )' ではなく、'mimetype.assign += ( xxx )' と書けばよいようです。つまり、'=' ではなく '+=' を使えばよいようです:
> https://stackoverflow.com/a/26430778
>
> ただし、'mimetype.assign += ( xxx )' の行は、
>
> include_shell "/usr/share/lighttpd/create-mime.assign.pl" >
> の行より後に書く必要があるはずです。
>
> ちなみに、デフォルトの lighttpd.conf に以下の行を追加するだけだと、「.js に対する行が重複している」という旨のエラーになり、起動しません。
>
> mimetype.assign = ( ".js" =>"text/javascript" ) >
>
> 以上、参考になりましたら幸いです。
>
>
>
古賀様
お世話になっております、福澤です。
詳細なご説明ありがとうございます。
lighttpd.confへ追加した行を削除したところ、正常にLighttpdが起動することを確認しました。
また、/etc/mime.types内でapplication/javascriptが.jsに割り当てられていることを確認しました。
HTMLファイルからの.jsファイル呼び出しにつきましては、.jsファイルのパーミッション設定が不正であったために正常な動作ができておらず、
.jsのパーミッションを変更したところ、正常に呼び出しが可能となりました。
ありがとうございました。
sankyo_fukuzawa
2022年7月5日 19時30分
/etc/lighttpd/lighttpd.confへの記述が間違っているのでしょうか?
もしくは、lighttpd.confの編集を行わなくても、HTMLファイルから.jsファイルを呼び出すことは可能なのでしょうか?