回答編集履歴

1

誤字修正

2024/06/17 09:00

投稿

hqf00342
hqf00342

スコア358

test CHANGED
@@ -20,36 +20,37 @@
20
20
 
21
21
  プログラムが不明なため憶測も入りますが、
22
22
 
23
- このエラーが出る時はたいていJSONダウンロードに失敗し「404 NotFound」のようなエラーメッセージが発生しているが、エラー処理が不十分なためエラー応答文字列をJSONと見立ててデコードしようとして(正しいJSONなら1文字目は`{`だがエラーメッセージのため違う文字と)いること起因します。
23
+ このエラーが出る時はたいていJSONダウンロードに失敗し「404 NotFound」のようなエラーメッセージが発生している場合です。プログラムのエラー処理が不十分なためエラー応答文字列をJSONと見立ててデコードしようとしてこのエラーになります。
24
24
 
25
- なぜ、ダウンロードに失敗するのかですが、nginxで`/audio`ディレクトリ下にあるように見せかけていることをDocker内のプログラムが認識できていないためと思います。
25
+ ではなぜ、開発環境では成功するのに本番環境でダウンロードに失敗するのかですが、nginxで`/audio`ディレクトリ下にあるように見せかけていることをDocker内のプログラムが認識できていないためと思います。
26
26
 
27
27
  例えばJSONが`/dir/aaa.json`の場合、nginxのproxy_pass設定があるため、
28
28
 
29
29
  /audio/dir/aaa.json
30
30
 
31
- がブラウザから見た正しいリンクですが、プログラム側はそんなことは知らないため
31
+ がブラウザから見た正しいリンクですが、プログラム側はそんなことは知らないため
32
32
 
33
33
  /dir/aaa.json
34
34
 
35
- というリンクをHTMLやJavaScriptファイルに埋め込まれ、ブラウザがファイルを見つけられず`404 NotFound`となります。nginxの`proxy_pass`はアクセスに来たURLに応じて動作するだけなので、ブラウザに送っているファイルの中身までは書き換えてくれません。
35
+ というリンクをHTMLやJavaScriptファイルに埋め込す。ブラウザは`/dir/aaa.json`にアクセスしますがファイルを見つけられず`404 NotFound`となります。nginxの`proxy_pass`はアクセスに来たURLに応じて動作するだけなので、ブラウザに送っているファイルの中身までは書き換えてくれません。
36
-
37
- これがローカルで動作するのにこの環境でエラーが出る原因です。
38
36
 
39
37
  これを回避するには
40
- 1. プログラム側が`/audio/`というパス付でHTMLやJavaScriptを生成できるようにする
38
+ 1. プログラム側が`/audio/`というパス付でHTMLやJavaScriptを生成できるようにする
41
- 2. nginxの書換機を使ってプログラムが生成したHTML,JavaScriptファイル内のリンクを途中で書き換える
39
+ 2. nginxの書換機を使ってプログラムが生成したHTML,JavaScriptファイル内のリンクを途中で書き換える
40
+ 3. `/audio/`の下に置くのはあきらめる。
41
+
42
- どちらかが必要です。
42
+ いずれかが必要です。
43
43
 
44
44
  1番がお薦めですがプログラム不明なので省略します。コンテキストパスを埋め込む方法が用意されていればそれが簡単です。すべて相対パスで書く案もあります。
45
45
 
46
46
  2のコンテンツ書換は必要なURLを書き換えできるかがカギです。静的なHTMLだけならば`href=` や `src=` を書き換えればいいので、以下を追加すればいけそうですが、
47
47
  ```
48
- set $context "/bpac/";
48
+ set $context "/audio/";
49
49
  sub_filter_once off;
50
50
  proxy_set_header Accept-Encoding "";
51
51
  sub_filter 'href="/' 'href="$context';
52
52
  sub_filter 'src="/' 'src="$context';
53
+ sub_filter 'action="/' 'action="$context';
53
54
  ```
54
55
  今回はJavaScript部と思われますので一概には書けないです。
55
56
  他にも良い方法があるかもしれません。