回答編集履歴

1

ProxyProtocolについて設定例を追記

2016/02/10 03:44

投稿

TaichiYanagiya
TaichiYanagiya

スコア12173

test CHANGED
@@ -3,3 +3,153 @@
3
3
 
4
4
 
5
5
  という単純な問題ではない?
6
+
7
+
8
+
9
+ ###(2016/02/10 12:40 追記)
10
+
11
+ ELB で ProxyProtocol を有効にした場合、nginx で listen ディレクティブに `proxy_protocol` を付ける必要があるようです。
12
+
13
+ とすると、ELB 80番ポートも HTTP から TCP に変更し、X-Forwarded-For の替わりに ProxyProtocol でアクセス元IPを拾うといいと思います。
14
+
15
+ ```
16
+
17
+ (ELBリスナー設定)
18
+
19
+ TCP 80 -> TCP 80
20
+
21
+ SSL 443 -> TCP 80
22
+
23
+ (インスタンス側 80番ポートについて ProxyProtocol を有効にする)
24
+
25
+
26
+
27
+ (ELBヘルスチェック設定)
28
+
29
+ TCP:80
30
+
31
+ (他は任意)
32
+
33
+
34
+
35
+ (nginx設定)
36
+
37
+ server {
38
+
39
+ listen 80 proxy_protocol;
40
+
41
+
42
+
43
+ set_real_ip_from 10.0.0.0/8;
44
+
45
+ real_ip_header proxy_protocol;
46
+
47
+
48
+
49
+ (中略)
50
+
51
+
52
+
53
+ location /socket.io/ {
54
+
55
+ proxy_pass http://0.0.0.0:2000;
56
+
57
+ #proxy_set_header X-Real-IP $remote_addr; # こちらでもOK?
58
+
59
+ proxy_set_header X-Real-IP $proxy_protocol_addr;
60
+
61
+ proxy_read_timeout 150;
62
+
63
+ proxy_set_header Host $host:$server_port;
64
+
65
+ #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # こちらでもOK?
66
+
67
+ proxy_set_header X-Forwarded-For $proxy_protocol_addr;
68
+
69
+ proxy_http_version 1.1;
70
+
71
+ proxy_set_header Upgrade $http_upgrade;
72
+
73
+ proxy_set_header Connection "upgrade";
74
+
75
+ }
76
+
77
+ }
78
+
79
+ ```
80
+
81
+ 参考: [How to Configure NGINX to Accept the Proxy Protocol](https://www.nginx.com/resources/admin-guide/proxy-protocol/)
82
+
83
+
84
+
85
+ あるいは、現在の 80番ポートをそのまま利用するのであれば、ProxyProtocol 用に別のポートを用意する方法も考えられます。
86
+
87
+ ```
88
+
89
+ (ELBリスナー設定)
90
+
91
+ HTTP 80 -> HTTP 80
92
+
93
+ SSL 443 -> TCP 8080
94
+
95
+ (インスタンス側 8080番ポートについて ProxyProtocol を有効にする)
96
+
97
+
98
+
99
+ (ELBヘルスチェック設定)
100
+
101
+ HTTP:80
102
+
103
+ (他は任意)
104
+
105
+
106
+
107
+ (nginx設定)
108
+
109
+ server {
110
+
111
+ listen 80;
112
+
113
+
114
+
115
+ set_real_ip_from 10.0.0.0/8;
116
+
117
+ real_ip_header X-Forwarded-For;
118
+
119
+
120
+
121
+ location / {
122
+
123
+ proxy_pass http://0.0.0.0:1000; # これは通常の HTML?
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ server {
132
+
133
+ listen 8080 proxy_protocol;
134
+
135
+
136
+
137
+ set_real_ip_from 10.0.0.0/8;
138
+
139
+ real_ip_header proxy_protocol;
140
+
141
+
142
+
143
+ location /socket.io/ {
144
+
145
+ proxy_pass http://0.0.0.0:2000;
146
+
147
+ # (他、1つ目の設定と同じ)
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ```
154
+
155
+