回答編集履歴

3

設定例を追記

2017/01/20 08:40

投稿

TaichiYanagiya
TaichiYanagiya

スコア12146

test CHANGED
@@ -84,4 +84,62 @@
84
84
 
85
85
 
86
86
 
87
+ ---
87
88
 
89
+
90
+
91
+ **(2017/01/20) 17:39 追記**
92
+
93
+ 設定例(抜粋):
94
+
95
+ ```
96
+
97
+ if ($http_x_forwarded_proto != https) {
98
+
99
+ return 301 https://$host$request_uri;
100
+
101
+ }
102
+
103
+
104
+
105
+ set $maintenance false;
106
+
107
+
108
+
109
+ if (-e /var/tmp/nginx/maintenance) {
110
+
111
+ set $maintenance true;
112
+
113
+ }
114
+
115
+
116
+
117
+ if ($remote_addr = XXX.XXX.XXX.XXX) {
118
+
119
+ set $maintenance false;
120
+
121
+ }
122
+
123
+
124
+
125
+ if ($maintenance = true) {
126
+
127
+ rewrite ^(/maintenance.html)$ $1 last;
128
+
129
+ rewrite ^ https://$host/maintenance.html redirect;
130
+
131
+ }
132
+
133
+
134
+
135
+ location /maintenance.html {
136
+
137
+ root /var/tmp/nginx/maintenance;
138
+
139
+ expires 0;
140
+
141
+ }
142
+
143
+ ```
144
+
145
+

2

追記: ロードバランサーの場合

2017/01/20 08:40

投稿

TaichiYanagiya
TaichiYanagiya

スコア12146

test CHANGED
@@ -16,7 +16,11 @@
16
16
 
17
17
 
18
18
 
19
+ ---
20
+
21
+
22
+
19
- ##(2017/01/18) 00:32 追記
23
+ **(2017/01/18) 00:32 追記**
20
24
 
21
25
  すみません、回答は間違いでした。
22
26
 
@@ -33,3 +37,51 @@
33
37
  /tmp/, /var/tmp/ 以外のディレクトリにすると、**if (-e ...)** にマッチし、**set $maintenance true;** が有効になると思います。
34
38
 
35
39
 
40
+
41
+ ---
42
+
43
+
44
+
45
+ **(2017/01/18) 23:20 追記**
46
+
47
+ AWS のロードバランサーをお使いとのこと、ALB, ELB (Classic) のどちらでしょうか?
48
+
49
+ ロードバランサーで HTTPS 443番ポートで受けたものは、EC2インスタンス側では
50
+
51
+
52
+
53
+ (1) HTTP 80番ポートで受ける : HTTPS 443->[LB]->HTTP 80->[EC2]
54
+
55
+ (2) HTTPS 443番ポートで受ける : HTTPS 443->[LB]->HTTPS 443->[EC2]
56
+
57
+
58
+
59
+ のどちらでしょうか?
60
+
61
+ (2)であれば、今の設定で動きそうに思います。
62
+
63
+ (1)であれば、Nginx は HTTP 80番しか使われません。
64
+
65
+ 80, 443 の `server {}` でそれぞれ `access_log` を分けると切り分けできると思います。
66
+
67
+
68
+
69
+ なお、ELB (Classic) であれば、HTTP, HTTPS のどちらで受けたのか、X-Forwarded-Proto, X-Forwarded-Port ヘッダでわかります。
70
+
71
+ [http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/x-forwarded-headers.html](http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/x-forwarded-headers.html)
72
+
73
+
74
+
75
+ あるいは、
76
+
77
+ - HTTP 80->[LB]->HTTP 80->[EC2]
78
+
79
+ - HTTPS 443->[LB]->HTTP 81->[EC2]
80
+
81
+
82
+
83
+ のように、HTTP の別ポートを用意して区別してもいいと思います。
84
+
85
+
86
+
87
+

1

訂正、追記

2017/01/18 14:23

投稿

TaichiYanagiya
TaichiYanagiya

スコア12146

test CHANGED
@@ -13,3 +13,23 @@
13
13
 
14
14
 
15
15
  また、rewrite を工夫しないと /maintenance.html がリダイレクトループになるように思います。
16
+
17
+
18
+
19
+ ##(2017/01/18) 00:32 追記
20
+
21
+ すみません、回答は間違いでした。
22
+
23
+
24
+
25
+ もしかして、systemd 環境ではありませんか?
26
+
27
+ `/lib/systemd/system/nginx.service` で `PrivateTmp=true` となっているのではないでしょうか?
28
+
29
+ この場合、/tmp/, /var/tmp/ は独自の名前空間となるので、nginx プロセスからは /var/tmp/nginx/maintenance/ が見えなくなります。
30
+
31
+
32
+
33
+ /tmp/, /var/tmp/ 以外のディレクトリにすると、**if (-e ...)** にマッチし、**set $maintenance true;** が有効になると思います。
34
+
35
+