Armadilloフォーラム

lighttpd

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.
コメント

sankyo_fukuzawa

2022年7月5日 19時30分

/etc/lighttpd/lighttpd.confへの記述が間違っているのでしょうか?
もしくは、lighttpd.confの編集を行わなくても、HTMLファイルから.jsファイルを呼び出すことは可能なのでしょうか?

アットマークテクノの古賀です。

福澤さん:
>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

2022年7月6日 9時26分

> 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のパーミッションを変更したところ、正常に呼び出しが可能となりました。

ありがとうございました。