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

質問編集履歴

4

進捗の追記

2016/02/15 09:04

投稿

CyberMergina
CyberMergina

スコア295

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

進捗を追記しました。設定ファイルの内容を現時点のものに書き換えました。

2016/02/15 09:04

投稿

CyberMergina
CyberMergina

スコア295

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 $remote_addr;
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 $proxy_add_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

進捗追記

2016/02/10 10:28

投稿

CyberMergina
CyberMergina

スコア295

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
- 全くアクセス元IP取れなわけではないので、悩みどころで
114
+ 但し、BadRequest出て・・・
115
+ もう少し調べてみます・・・!

1

進捗を入力しました。

2016/02/10 07:28

投稿

CyberMergina
CyberMergina

スコア295

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が取れないわけではないので、悩みどころです。