質問編集履歴
4
進捗の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -128,4 +128,45 @@
|
|
128
128
|
http://blog.serverworks.co.jp/tech/2013/08/01/elb-proxy-protocol/
|
129
129
|
Nodeサーバー側でも何らかの処理が必要になるのでしょうか・・・?
|
130
130
|
|
131
|
-
その方面で検索すると[こちらの記事](http://blog.serverworks.co.jp/tech/2013/08/01/elb-proxy-protocol/)を発見しましたので、調べてみます。
|
131
|
+
その方面で検索すると[こちらの記事](http://blog.serverworks.co.jp/tech/2013/08/01/elb-proxy-protocol/)を発見しましたので、調べてみます。
|
132
|
+
|
133
|
+
|
134
|
+
**>ProxyProtocolを有効にし、BadRequestは解決。ただ、他のVHと共存できない(追記:2016/02/15 18:04)**
|
135
|
+
|
136
|
+
- TCPで通信するVirtualHostのみにした際、BadRequestは解決し、ログファイルにも「"PROXY ..."」ではなく「"GET ..."」という形でログが残るようになっていました
|
137
|
+
|
138
|
+
ただ、他にHTTPで通信しているVirtualHost(Server Nameで分けている)が接続できなくなった。
|
139
|
+
|
140
|
+
構造は以下の通りになっています。
|
141
|
+
|
142
|
+
```
|
143
|
+
[ELB1]
|
144
|
+
server_name hoge.jp
|
145
|
+
HTTPS(443) -> HTTP(80)
|
146
|
+
HTTP(80) -> HTTP(80)
|
147
|
+
[nginx]
|
148
|
+
root(/var/www/html)
|
149
|
+
|
150
|
+
[ELB2]
|
151
|
+
server_name node.hoge.jp
|
152
|
+
SSL(443) -> TCP(80)
|
153
|
+
TCP(80) -> TCP(80)
|
154
|
+
[nginx(Reverce Proxy)]
|
155
|
+
/ -> 3000port(Nodeサーバー)
|
156
|
+
/socket.io/ -> 4000port(WSサーバー)
|
157
|
+
|
158
|
+
[ELB3]
|
159
|
+
server_name main.hoge.jp
|
160
|
+
HTTPS(443) -> HTTP(80)
|
161
|
+
HTTP(80) -> HTTP(80)
|
162
|
+
[nginx]
|
163
|
+
root(/var/www/main)
|
164
|
+
```
|
165
|
+
|
166
|
+
※インスタンスは1つ
|
167
|
+
※現在、最小構成にしているのでProxyサーバー、Appサーバーなど分けていません。
|
168
|
+
|
169
|
+
proxy protocolを有効にすると**ELB1**と**ELB3**が接続できなくなります。
|
170
|
+
(ELBのヘルスチェックで引っかかる)
|
171
|
+
|
172
|
+
TCPとHTTPの共存は厳しいのでしょうか・・・?
|
3
進捗を追記しました。設定ファイルの内容を現時点のものに書き換えました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -52,8 +52,8 @@
|
|
52
52
|
include /etc/nginx/conf.d/*.conf;
|
53
53
|
index index.html index.htm;
|
54
54
|
|
55
|
-
set_real_ip_from 10.0.0.0/8;
|
55
|
+
# set_real_ip_from 10.0.0.0/8;
|
56
|
-
real_ip_header X-Forwarded-For;
|
56
|
+
# real_ip_header X-Forwarded-For;
|
57
57
|
|
58
58
|
}
|
59
59
|
```
|
@@ -61,30 +61,35 @@
|
|
61
61
|
**/etc/nginx/conf.d/default.conf**
|
62
62
|
```conf:default.conf
|
63
63
|
server {
|
64
|
+
server {
|
64
|
-
listen 80;
|
65
|
+
listen 80 proxy_protocol;
|
65
|
-
server_name hoge.hoge.jp;
|
66
|
+
server_name hoge.hoge.jp;
|
66
|
-
proxy_request_buffering off;
|
67
|
+
proxy_request_buffering off;
|
68
|
+
|
67
|
-
|
69
|
+
set_real_ip_from XX.XX.0.0/XX; # VPC CIDR
|
70
|
+
real_ip_header proxy_protocol;
|
71
|
+
|
68
|
-
location /demo/ {
|
72
|
+
location /demo/ { # デモページ(html)
|
69
|
-
proxy_pass http://demo.localhost/;
|
73
|
+
proxy_pass http://demo.localhost/;
|
70
|
-
}
|
74
|
+
}
|
71
|
-
|
75
|
+
|
72
|
-
location / {
|
76
|
+
location / { # socket.io用のjsファイルを読み込むのに使用します。
|
73
|
-
proxy_pass http://0.0.0.0:1000;
|
77
|
+
proxy_pass http://0.0.0.0:1000;
|
74
|
-
}
|
78
|
+
}
|
75
|
-
|
79
|
+
|
76
|
-
location /socket.io/ {
|
80
|
+
location /socket.io/ { # websocket通信
|
77
|
-
proxy_pass http://0.0.0.0:2000;
|
81
|
+
proxy_pass http://0.0.0.0:2000;
|
78
|
-
proxy_set_header X-Real-IP $
|
82
|
+
proxy_set_header X-Real-IP $proxy_protocol_addr;
|
79
|
-
proxy_read_timeout 150;
|
83
|
+
proxy_read_timeout 150;
|
80
|
-
proxy_set_header Host $host:$server_port;
|
84
|
+
proxy_set_header Host $host:$server_port;
|
81
|
-
proxy_set_header X-Forwarded-For $
|
85
|
+
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
|
86
|
+
proxy_set_header X-Forwarded-Proto http;
|
82
|
-
proxy_http_version 1.1;
|
87
|
+
proxy_http_version 1.1;
|
83
|
-
proxy_set_header Upgrade $http_upgrade;
|
88
|
+
proxy_set_header Upgrade $http_upgrade;
|
84
|
-
proxy_set_header Connection "upgrade";
|
89
|
+
proxy_set_header Connection "upgrade";
|
85
|
-
}
|
90
|
+
}
|
86
|
-
|
91
|
+
|
87
|
-
}
|
92
|
+
}
|
88
93
|
```
|
89
94
|
|
90
95
|
***
|
@@ -112,4 +117,15 @@
|
|
112
117
|
```
|
113
118
|
|
114
119
|
但し、BadRequestが出ています・・・
|
115
|
-
もう少し調べてみます・・・!
|
120
|
+
もう少し調べてみます・・・!
|
121
|
+
|
122
|
+
**>ProxyProtocolを有効にしました。(追記:2016/02/10 19:21)**
|
123
|
+
|
124
|
+
ひとまず、現状の設定ファイルの内容に更新しました。
|
125
|
+
ProxyProtocolを有効にしたことで、Bad Requestが発生しています。
|
126
|
+
|
127
|
+
AWSのProxyProtocol使用の前提条件に「プロキシサーバーとロードバランサーの両方で有効になっていること」とありました。
|
128
|
+
http://blog.serverworks.co.jp/tech/2013/08/01/elb-proxy-protocol/
|
129
|
+
Nodeサーバー側でも何らかの処理が必要になるのでしょうか・・・?
|
130
|
+
|
131
|
+
その方面で検索すると[こちらの記事](http://blog.serverworks.co.jp/tech/2013/08/01/elb-proxy-protocol/)を発見しましたので、調べてみます。
|
2
進捗追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
**ELB × nginx(リバースproxy) × Nodeサーバーの環境で、Nodeサーバー側のシステムにアクセス元IPアドレスを渡したい。**
|
2
2
|
|
3
|
+
**□ 状態(追記しました)**
|
3
4
|
|
5
|
+
- リスナー設定
|
6
|
+
|
7
|
+
```
|
8
|
+
TCP(80) -> TCP(80)
|
9
|
+
SSL(443) -> TCP(80)
|
10
|
+
```
|
11
|
+
|
12
|
+
|
4
13
|
**□ 今分かっていること**
|
5
14
|
- ELB × nginxの環境で、$remote_addrがELBのアドレスになる
|
6
15
|
- ELB側でアクセス元IPアドレスがヘッダーの「X-Forwarded-For」に渡されている
|
@@ -88,4 +97,19 @@
|
|
88
97
|
[How to configure AWS ELB and Nginx for WebSocket protocol? [closed]](http://stackoverflow.com/questions/33433768/how-to-configure-aws-elb-and-nginx-for-websocket-protocol)
|
89
98
|
[Using Proxy Protocol With Nginx](https://chrislea.com/2014/03/20/using-proxy-protocol-nginx/)
|
90
99
|
|
100
|
+
|
101
|
+
**>ProxyProtocolを有効にしました。(追記:2016/02/10 16:28)**
|
102
|
+
恐らくあと少しで解決しそうです・・・!
|
103
|
+
|
104
|
+
TaichiYanagiyaさんの案①を参考に設定すると、nginxのログにはアクセス元IPが出てきました!
|
105
|
+
|
106
|
+
```
|
107
|
+
'$proxy_protocol_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';
|
108
|
+
```
|
109
|
+
|
110
|
+
```
|
111
|
+
- - [10/Feb/2016:16:15:01 +0900] "PROXY TCP4 [アクセス元IP] XXX.XXX.XXX.XXX 5602 443" 400 172 "-" "-"
|
112
|
+
```
|
113
|
+
|
91
|
-
|
114
|
+
但し、BadRequestが出ています・・・
|
115
|
+
もう少し調べてみます・・・!
|
1
進捗を入力しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -76,4 +76,16 @@
|
|
76
76
|
}
|
77
77
|
|
78
78
|
}
|
79
|
-
```
|
79
|
+
```
|
80
|
+
|
81
|
+
***
|
82
|
+
|
83
|
+
**□ 進捗**
|
84
|
+
|
85
|
+
**AWSのELBにProxyProtocolを有効にするような設定が必要?**
|
86
|
+
> 参考
|
87
|
+
[AWS wiki](http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html)
|
88
|
+
[How to configure AWS ELB and Nginx for WebSocket protocol? [closed]](http://stackoverflow.com/questions/33433768/how-to-configure-aws-elb-and-nginx-for-websocket-protocol)
|
89
|
+
[Using Proxy Protocol With Nginx](https://chrislea.com/2014/03/20/using-proxy-protocol-nginx/)
|
90
|
+
|
91
|
+
全くアクセス元IPが取れないわけではないので、悩みどころです。
|