docs: nginx.customConfig の取り違えと client_max_body_size 重複を防ぐ記述に修正
Helm Chart Release / release-chart (push) Successful in 6s
Helm Chart Release / release-chart (push) Successful in 6s
あるプロジェクトから「serverSnippet が効かない」「snippet は古いキー」との 指摘があり調査した結果、指摘の前提は誤りだった。 - 実際に使われる templates/configmap.yaml が読むのは snippet で、values.yaml と README も snippet で一致している。 - serverSnippet / httpSnippet は、.Values.nginx.enabled が存在せず一度も出力 されない configmap-nginx.yaml だけが読むキーで、values・README に載ったことが なく、指定しても黙って無視される。 - README 例6・例9 が snippet に client_max_body_size を書く手順になっており、 v8.5.9-b 以降は uploadMaxSize の自動出力と重複して nginx が起動しない (2026-09-29 の障害の発生源)。例6 は location ~ \.php$ も重複定義していた。 挙動の変更はなくドキュメント・コメントのみ。 - values.yaml / README: 読まれるキーは snippet のみ、挿入先は server ブロック内、 client_max_body_size は書かず uploadMaxSize を使うことを明記 - README 例6・例9 を uploadMaxSize 指定に修正 - configmap-nginx.yaml: 未使用であることを示す注記を追加 手動リリース 8.5.11-a。
This commit is contained in:
@@ -27,6 +27,16 @@ Websites 組織の各サイト(e-learn.jp / fcdomain.com / hotels / tskholding
|
|||||||
|
|
||||||
## チャート改修履歴
|
## チャート改修履歴
|
||||||
|
|
||||||
|
### nginx.customConfig の取り違え防止(ドキュメント修正、2026-10-20, v8.5.11-a)
|
||||||
|
|
||||||
|
- **症状 / 背景**: あるプロジェクトのレポートで「`serverSnippet` が効かない。既定の `snippet:` はどのテンプレートも読まない古いキーでは」という指摘があった。別件で、`snippet` に `client_max_body_size` を書いていたプロジェクトが `directive is duplicate` で nginx 起動失敗する障害(2026-09-29)も起きていた。
|
||||||
|
- **原因**:
|
||||||
|
- 指摘は誤り。実際に使われる `templates/configmap.yaml` が読むのは `snippet` で、`values.yaml`・README と一致している。`serverSnippet` / `httpSnippet` は、一度も出力されない `templates/configmap-nginx.yaml`(`.Values.nginx.enabled` が values に無く常に偽)だけが読むキーで、values・README に載ったことがない(コミット `31106e0` 由来)。指定すると黙って無視される。
|
||||||
|
- README 例6・例9 が `snippet` に `client_max_body_size` を書く手順を案内しており、v8.5.9-b 以降は `uploadMaxSize` の自動出力と重複して起動失敗する。例6 はチャート本体と重複する `location ~ \.php$` も再定義していた。
|
||||||
|
- **修正内容**: 挙動の変更なし(ドキュメント・コメントのみ)。`values.yaml` と README に「読まれるキーは `snippet` のみ、挿入先は server ブロック内、`client_max_body_size` は書かず `uploadMaxSize` を使う」を明記。README 例6・例9 を `uploadMaxSize` 指定に修正。`configmap-nginx.yaml` 先頭に「未使用」の注記を追加。
|
||||||
|
- **やらなかったこと**: `snippet` を `serverSnippet` に改名する(動いているキーを壊すため)。`serverSnippet` を `snippet` の別名として有効化する(これまで無視されていた設定が突然有効になり、重複で起動失敗する恐れがあるため)。`http` レベルの snippet が必要になった場合は、別途 `configmap.yaml` に正式対応を追加する。
|
||||||
|
- **対象ファイル**: `values.yaml`, `README.md`, `templates/configmap-nginx.yaml`(コメントのみ), `Chart.yaml`
|
||||||
|
|
||||||
### Cron(CronJob)定期実行機能を追加(2026-09-27, v8.5.10-e)
|
### Cron(CronJob)定期実行機能を追加(2026-09-27, v8.5.10-e)
|
||||||
|
|
||||||
- **背景**: 定期実行したいPHPスクリプト(レポート送信・バッチ処理等)を動かす手段がなく、外部で別途スケジューラを用意する必要があった。
|
- **背景**: 定期実行したいPHPスクリプト(レポート送信・バッチ処理等)を動かす手段がなく、外部で別途スケジューラを用意する必要があった。
|
||||||
|
|||||||
+1
-1
@@ -2,6 +2,6 @@ apiVersion: v2
|
|||||||
name: phpfpm
|
name: phpfpm
|
||||||
description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support
|
description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support
|
||||||
type: application
|
type: application
|
||||||
version: 8.5.11
|
version: 8.5.11-a
|
||||||
appVersion: "8.5.11"
|
appVersion: "8.5.11"
|
||||||
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
|
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
|
||||||
|
|||||||
@@ -329,13 +329,18 @@ smtp:
|
|||||||
| パラメータ | 説明 | デフォルト |
|
| パラメータ | 説明 | デフォルト |
|
||||||
|-----------|------|-----------|
|
|-----------|------|-----------|
|
||||||
| `nginx.customConfig.enabled` | カスタム設定有効化 | `false` |
|
| `nginx.customConfig.enabled` | カスタム設定有効化 | `false` |
|
||||||
| `nginx.customConfig.snippet` | 設定スニペット | `""` |
|
| `nginx.customConfig.snippet` | `server { }` ブロック末尾へそのまま挿入するnginx設定(下記注意参照) | `""` |
|
||||||
| `nginx.forwardRealIP.enabled` | リアルIP取得有効化 | `false` |
|
| `nginx.forwardRealIP.enabled` | リアルIP取得有効化 | `false` |
|
||||||
| `nginx.forwardRealIP.header` | リアルIP取得ヘッダー | `"X-Forwarded-For"` |
|
| `nginx.forwardRealIP.header` | リアルIP取得ヘッダー | `"X-Forwarded-For"` |
|
||||||
| `nginx.forwardRealIP.recursive` | 再帰的IP検索 | `true` |
|
| `nginx.forwardRealIP.recursive` | 再帰的IP検索 | `true` |
|
||||||
| `nginx.forwardRealIP.trustedProxies` | 信頼するプロキシネットワーク | `["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]` |
|
| `nginx.forwardRealIP.trustedProxies` | 信頼するプロキシネットワーク | `["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]` |
|
||||||
| `nginx.forwardRealIP.additionalTrustedProxies` | 追加の信頼プロキシ | `[]` |
|
| `nginx.forwardRealIP.additionalTrustedProxies` | 追加の信頼プロキシ | `[]` |
|
||||||
|
|
||||||
|
> **📌 `nginx.customConfig.snippet` の注意点**
|
||||||
|
> - 読まれるキーは `snippet` のみです。`serverSnippet` / `httpSnippet` というキーは存在せず、指定しても**無視されます**(過去に作られた未使用テンプレート `configmap-nginx.yaml` 専用のキーで、一度も出力されたことがありません)。
|
||||||
|
> - 挿入先は `server { }` ブロック内です。`limit_req_zone` など `http` レベル専用のディレクティブは書けません。
|
||||||
|
> - チャートが自動で出力する設定を重複して書くと、nginxが起動しなくなります。特に **`client_max_body_size` は書かないでください**(`directive is duplicate` で起動失敗)。アップロード上限は `uploadMaxSize` で設定します。
|
||||||
|
|
||||||
> **📌 sitemap.xml のContent-Type**
|
> **📌 sitemap.xml のContent-Type**
|
||||||
> `/sitemap.xml`(静的ファイルとして配置した場合)は、常に `Content-Type: application/xml; charset=utf-8` で配信されます。標準の `mime.types` では `.xml` が `text/xml` 扱いでcharsetが付かず、ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない場合があるための組み込み対応です(設定不要、常時有効)。
|
> `/sitemap.xml`(静的ファイルとして配置した場合)は、常に `Content-Type: application/xml; charset=utf-8` で配信されます。標準の `mime.types` では `.xml` が `text/xml` 扱いでcharsetが付かず、ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない場合があるための組み込み対応です(設定不要、常時有効)。
|
||||||
> なお、PHPで動的に生成する場合はこの設定は適用されません(PHP側で `header('Content-Type: application/xml; charset=utf-8');` を指定してください)。
|
> なお、PHPで動的に生成する場合はこの設定は適用されません(PHP側で `header('Content-Type: application/xml; charset=utf-8');` を指定してください)。
|
||||||
@@ -521,21 +526,20 @@ $driver->quit();
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# values.yaml
|
# values.yaml
|
||||||
|
|
||||||
|
# アップロード上限は snippet ではなく uploadMaxSize で設定する
|
||||||
|
# (nginx の client_max_body_size を snippet に書くと、チャートの自動出力と重複して起動失敗する)
|
||||||
|
uploadMaxSize: "100m"
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
customConfig:
|
customConfig:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
# server { } ブロックの末尾にそのまま挿入される。
|
||||||
|
# PHPの location ~ \.php$ はチャート本体が定義済みのため、ここでは再定義しない
|
||||||
|
# (タイムアウト等は server レベルで指定すれば PHP の location にも継承される)
|
||||||
snippet: |
|
snippet: |
|
||||||
client_max_body_size 100M;
|
|
||||||
|
|
||||||
location ~ \.php$ {
|
|
||||||
fastcgi_pass 127.0.0.1:9000;
|
|
||||||
fastcgi_index index.php;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
include fastcgi_params;
|
|
||||||
|
|
||||||
fastcgi_read_timeout 300;
|
fastcgi_read_timeout 300;
|
||||||
fastcgi_send_timeout 300;
|
fastcgi_send_timeout 300;
|
||||||
}
|
|
||||||
|
|
||||||
location /admin {
|
location /admin {
|
||||||
auth_basic "Administrator Area";
|
auth_basic "Administrator Area";
|
||||||
@@ -546,6 +550,8 @@ persistence:
|
|||||||
enabled: true
|
enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> `snippet` で指定する際の注意点は、[Nginx設定](#nginx設定)の「`nginx.customConfig.snippet` の注意点」を参照してください。
|
||||||
|
|
||||||
### 例7: ベアメタル環境でのリアルIP取得
|
### 例7: ベアメタル環境でのリアルIP取得
|
||||||
|
|
||||||
ベアメタルKubernetesやLoadBalancer経由でのアクセスで、PHPからクライアントの実IPアドレスを取得する設定です。
|
ベアメタルKubernetesやLoadBalancer経由でのアクセスで、PHPからクライアントの実IPアドレスを取得する設定です。
|
||||||
@@ -706,11 +712,13 @@ ingress:
|
|||||||
hosts:
|
hosts:
|
||||||
- api.production.com
|
- api.production.com
|
||||||
|
|
||||||
|
# アップロード上限は snippet ではなく uploadMaxSize で設定する
|
||||||
|
uploadMaxSize: "50m"
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
customConfig:
|
customConfig:
|
||||||
enabled: true
|
enabled: true
|
||||||
snippet: |
|
snippet: |
|
||||||
client_max_body_size 50M;
|
|
||||||
fastcgi_read_timeout 300;
|
fastcgi_read_timeout 300;
|
||||||
|
|
||||||
# Opcache設定
|
# Opcache設定
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
{{- /*
|
||||||
|
【未使用】このファイルは出力されない。
|
||||||
|
下の if が参照する .Values.nginx.enabled は values.yaml に存在しないため、常に偽になる。
|
||||||
|
実際に使われる nginx 設定は templates/configmap.yaml(deployment.yaml が nginx.conf キーを
|
||||||
|
マウントしている)。カスタム設定として読まれるのは nginx.customConfig.snippet のみで、
|
||||||
|
このファイルだけが読む serverSnippet / httpSnippet は指定しても無視される。
|
||||||
|
nginx の設定を変更する場合は configmap.yaml を編集すること。
|
||||||
|
*/ -}}
|
||||||
{{- if .Values.nginx.enabled }}
|
{{- if .Values.nginx.enabled }}
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
|
|||||||
+10
@@ -64,6 +64,16 @@ persistence:
|
|||||||
size: 1Gi
|
size: 1Gi
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
|
# 独自のnginx設定を、server { } ブロックの末尾へそのまま挿入する(templates/configmap.yaml)。
|
||||||
|
# 読まれるキーは snippet のみ。serverSnippet / httpSnippet は未使用の
|
||||||
|
# templates/configmap-nginx.yaml 専用で出力されないため、指定しても無視される。
|
||||||
|
# また挿入先は server ブロック内のため、http レベル専用のディレクティブ
|
||||||
|
# (limit_req_zone 等)は書けない。
|
||||||
|
#
|
||||||
|
# 【重複注意】以下はチャートが自動で出力するため snippet に書かない
|
||||||
|
# (書くと "directive is duplicate" 等で nginx が起動しなくなる):
|
||||||
|
# - client_max_body_size → uploadMaxSize で設定する
|
||||||
|
# - location = /sitemap.xml(Content-Typeの明示)
|
||||||
customConfig:
|
customConfig:
|
||||||
enabled: false
|
enabled: false
|
||||||
snippet: |-
|
snippet: |-
|
||||||
|
|||||||
Reference in New Issue
Block a user