Azure

IPv6対応のサーバーを立てるならnginxがおすすめ

はじめに

IPv6の検証を行うためにバックエンドに仮想マシンを構築する場合にHttpdをインストールします。

選択しとしてほぼ3つだと思います。

  • Apache
  • nginx
  • IIS

特にFront Doorの検証を行った場合に問題が発生したので紹介します。

下記のような場合に発生しました。Front Doorより後ろがIPv6で通信される場合です。

問題と解決

結論としてはnginxを使用してください。

 

nginx

IPv4

PS C:\Users\user1> curl.exe -I -4 http://fdipv6.azurefd.net
HTTP/1.1 200 OK
Content-Length: 612
Content-Type: text/html
Last-Modified: Sun, 09 Jan 2022 17:26:08 GMT
Accept-Ranges: bytes
ETag: "61db1ab0-264"
X-Cache: CONFIG_NOCACHE
X-Azure-Ref: 0SivcYQAAAABJlRD/IhoZRZq15nOkWakrVFlPMDFFREdFMjMwOQAwZWQzZGEyZi1lOWFlLTRkZWYtYmU3NS0zYTQ0ZWFkYTg4NTQ=
Date: Mon, 10 Jan 2022 12:49:13 GMT

 

IPv6

PS C:\Users\user1> curl.exe -I -6 http://fdipv6.azurefd.net
HTTP/1.1 200 OK
Content-Length: 612
Content-Type: text/html
Last-Modified: Sun, 09 Jan 2022 17:26:08 GMT
Accept-Ranges: bytes
ETag: "61db1ab0-264"
X-Cache: CONFIG_NOCACHE
X-Azure-Ref: 0XivcYQAAAABIYOW/Mm3UT64/AAQ1JlOWVFlPMDFFREdFMjMxMwAwZWQzZGEyZi1lOWFlLTRkZWYtYmU3NS0zYTQ0ZWFkYTg4NTQ=
Date: Mon, 10 Jan 2022 12:49:34 GMT

 

Apache

IPv4

PS C:\Users\user1> curl.exe -I -4 http://fdipv6.azurefd.net
HTTP/1.1 400 Bad Request
Content-Length: 0
Content-Type: text/html; charset=iso-8859-1
X-Cache: CONFIG_NOCACHE
X-Azure-Ref: 0tyjcYQAAAABmOR6Yl0C1T7nxNVgj70WrVFlPMDFFREdFMjQxOQAwZWQzZGEyZi1lOWFlLTRkZWYtYmU3NS0zYTQ0ZWFkYTg4NTQ=
Date: Mon, 10 Jan 2022 12:38:15 GMT

 

IPv6

PS C:\Users\user1> curl.exe -I -6 http://fdipv6.azurefd.net
HTTP/1.1 400 Bad Request
Content-Length: 0
Content-Type: text/html; charset=iso-8859-1
X-Cache: CONFIG_NOCACHE
X-Azure-Ref: 0RSjcYQAAAABS0qZOPP3MTLbLUBdO5IZyVFlPMDFFREdFMjMwOAAwZWQzZGEyZi1lOWFlLTRkZWYtYmU3NS0zYTQ0ZWFkYTg4NTQ=
Date: Mon, 10 Jan 2022 12:36:20 GMT

 

IIS

IPv4

PS C:\Users\user1> curl.exe -I -4 http://fdipv6.azurefd.net
HTTP/1.1 400 Bad Request
Content-Length: 334
Content-Type: text/html; charset=us-ascii
X-Cache: CONFIG_NOCACHE
X-Azure-Ref: 0KSzcYQAAAAAbCWgFkbi5TpsmWmIX78guVFlPMDFFREdFMjMwNgAwZWQzZGEyZi1lOWFlLTRkZWYtYmU3NS0zYTQ0ZWFkYTg4NTQ=
Date: Mon, 10 Jan 2022 12:52:57 GMT

 

IPv6

PS C:\Users\user1> curl.exe -I -6 http://fdipv6.azurefd.net
HTTP/1.1 400 Bad Request
Content-Length: 334
Content-Type: text/html; charset=us-ascii
X-Cache: CONFIG_NOCACHE
X-Azure-Ref: 0GizcYQAAAADBDJ1RpnNhS74DZzSMI8GIVFlPMDFFREdFMjQxNwAwZWQzZGEyZi1lOWFlLTRkZWYtYmU3NS0zYTQ0ZWFkYTg4NTQ=
Date: Mon, 10 Jan 2022 12:52:41 GMT

 

curlでヘッダーを確認しただけです。

nginxのみ200で問題なく表示されます。これは、Front Doorとの組み合わせた場合に起こります。ロードバランサーのみの場合では起こりません。また、試しにEC2にグローバルIPv6を付与して試したところロードバランサーなしの状態で、直にHttpdにアクセスされる場合でも同様の結果でした。

この結果からnginxを利用するのが手っ取り早いと思います。

まとめ

IPv6環境でHttpdを構築する場合、しかもFront Doorを利用する場合の問題です。問題を解決ずるためにはApacheやIISの設定が必要なのかもしれません。

パケットもダンプしたりしてみましたが解決方法はわかりませんでした。特段、Apache、IISではないとだめとか、すべてIPv6で通信が必要などの条件が無い限りは発生しないと思います。

-Azure
-