teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ProxyProtocolについて設定例を追記

2016/02/10 03:44

投稿

TaichiYanagiya
TaichiYanagiya

スコア12218

answer CHANGED
@@ -1,3 +1,77 @@
1
1
  default.conf の `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;` 箇所でヘッダを追加していますので、この設定をはずせばいいです。
2
2
 
3
- という単純な問題ではない?
3
+ という単純な問題ではない?
4
+
5
+ ###(2016/02/10 12:40 追記)
6
+ ELB で ProxyProtocol を有効にした場合、nginx で listen ディレクティブに `proxy_protocol` を付ける必要があるようです。
7
+ とすると、ELB 80番ポートも HTTP から TCP に変更し、X-Forwarded-For の替わりに ProxyProtocol でアクセス元IPを拾うといいと思います。
8
+ ```
9
+ (ELBリスナー設定)
10
+ TCP 80 -> TCP 80
11
+ SSL 443 -> TCP 80
12
+ (インスタンス側 80番ポートについて ProxyProtocol を有効にする)
13
+
14
+ (ELBヘルスチェック設定)
15
+ TCP:80
16
+ (他は任意)
17
+
18
+ (nginx設定)
19
+ server {
20
+ listen 80 proxy_protocol;
21
+
22
+ set_real_ip_from 10.0.0.0/8;
23
+ real_ip_header proxy_protocol;
24
+
25
+ (中略)
26
+
27
+ location /socket.io/ {
28
+ proxy_pass http://0.0.0.0:2000;
29
+ #proxy_set_header X-Real-IP $remote_addr; # こちらでもOK?
30
+ proxy_set_header X-Real-IP $proxy_protocol_addr;
31
+ proxy_read_timeout 150;
32
+ proxy_set_header Host $host:$server_port;
33
+ #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # こちらでもOK?
34
+ proxy_set_header X-Forwarded-For $proxy_protocol_addr;
35
+ proxy_http_version 1.1;
36
+ proxy_set_header Upgrade $http_upgrade;
37
+ proxy_set_header Connection "upgrade";
38
+ }
39
+ }
40
+ ```
41
+ 参考: [How to Configure NGINX to Accept the Proxy Protocol](https://www.nginx.com/resources/admin-guide/proxy-protocol/)
42
+
43
+ あるいは、現在の 80番ポートをそのまま利用するのであれば、ProxyProtocol 用に別のポートを用意する方法も考えられます。
44
+ ```
45
+ (ELBリスナー設定)
46
+ HTTP 80 -> HTTP 80
47
+ SSL 443 -> TCP 8080
48
+ (インスタンス側 8080番ポートについて ProxyProtocol を有効にする)
49
+
50
+ (ELBヘルスチェック設定)
51
+ HTTP:80
52
+ (他は任意)
53
+
54
+ (nginx設定)
55
+ server {
56
+ listen 80;
57
+
58
+ set_real_ip_from 10.0.0.0/8;
59
+ real_ip_header X-Forwarded-For;
60
+
61
+ location / {
62
+ proxy_pass http://0.0.0.0:1000; # これは通常の HTML?
63
+ }
64
+ }
65
+
66
+ server {
67
+ listen 8080 proxy_protocol;
68
+
69
+ set_real_ip_from 10.0.0.0/8;
70
+ real_ip_header proxy_protocol;
71
+
72
+ location /socket.io/ {
73
+ proxy_pass http://0.0.0.0:2000;
74
+ # (他、1つ目の設定と同じ)
75
+ }
76
+ }
77
+ ```