[Nginx]Basic認証中のページでOGPのテストをする


FacebookシェアやTwitterCardを使うWebサイトの場合、サイト公開前にOGPが正しく設定されているかをテストする必要があります。

しかし、Basic認証が設定されているサイトではFacebookやTwitterのOGP確認ができません。

apacheの場合はUser Agentを見てFacebookやTwitterのクローラーのみBasic認証を適応しないという設定にすることでOGP確認できるのですが、nginxの場合のやり方が分からなかったので、TwitterとFacebookのIPリストを作って、そのIPのみ許可するという設定で対応しました。

nginxの設定に以下のようにBasic認証設定を記述されているとします。

server {
  ・・・

  satisfy any;
  auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
  auth_basic "Authentication Required";
  include /etc/nginx/allow_ogp_ip.conf;  # OGP関連のIPリスト
  deny all;

  ・・・
}

include /etc/nginx/allow_ogp_ip.conf;
として、許可するIPリストをまとめたファイルをincldeするようにします。

allow_ogp_ip.conf にはFacebook、TwitterのIPリストを記述します。

FacebookのIPは公式ドキュメントに記述されているように

whois -h whois.radb.net -- '-i origin AS32934' | grep ^route

で一覧を取得できます。

これをawkを使ってnginx設定として出力するように改良します。

追記

# facebook
whois -h whois.radb.net -- '-i origin AS32934' | awk '/^route:/{print "allow " $2 ";"}'
# twitter
whois -h whois.radb.net -- '-i origin AS13414' | awk '/^route:/{print "allow " $2 ";"}'

上記コマンドを実行して出力された内容を/etc/nginx/allow_ogp_ip.confに記述します。
以下は6/4時点のIP情報です。

vi /etc/nginx/allow_ogp_ip.conf

# facebook
allow 204.15.20.0/22;
allow 69.63.176.0/20;
allow 66.220.144.0/20;
allow 66.220.144.0/21;
allow 69.63.184.0/21;
allow 69.63.176.0/21;
allow 74.119.76.0/22;
allow 69.171.255.0/24;
allow 173.252.64.0/18;
allow 69.171.224.0/19;
allow 69.171.224.0/20;
allow 103.4.96.0/22;
allow 69.63.176.0/24;
allow 173.252.64.0/19;
allow 173.252.70.0/24;
allow 31.13.64.0/18;
allow 31.13.24.0/21;
allow 66.220.152.0/21;
allow 66.220.159.0/24;
allow 69.171.239.0/24;
allow 69.171.240.0/20;
allow 31.13.64.0/19;
allow 31.13.64.0/24;
allow 31.13.65.0/24;
allow 31.13.67.0/24;
allow 31.13.68.0/24;
allow 31.13.69.0/24;
allow 31.13.70.0/24;
allow 31.13.71.0/24;
allow 31.13.72.0/24;
allow 31.13.73.0/24;
allow 31.13.74.0/24;
allow 31.13.75.0/24;
allow 31.13.76.0/24;
allow 31.13.77.0/24;
allow 31.13.96.0/19;
allow 31.13.66.0/24;
allow 173.252.96.0/19;
allow 69.63.178.0/24;
allow 31.13.78.0/24;
allow 31.13.79.0/24;
allow 31.13.80.0/24;
allow 31.13.82.0/24;
allow 31.13.83.0/24;
allow 31.13.84.0/24;
allow 31.13.85.0/24;
allow 31.13.86.0/24;
allow 31.13.87.0/24;
allow 31.13.88.0/24;
allow 31.13.89.0/24;
allow 31.13.90.0/24;
allow 31.13.91.0/24;
allow 31.13.92.0/24;
allow 31.13.93.0/24;
allow 31.13.94.0/24;
allow 31.13.95.0/24;
allow 69.171.253.0/24;
allow 69.63.186.0/24;
allow 204.15.20.0/22;
allow 69.63.176.0/20;
allow 69.63.176.0/21;
allow 69.63.184.0/21;
allow 66.220.144.0/20;
allow 69.63.176.0/20;

# twitter
allow 199.96.56.0/21;
allow 199.96.56.0/24;
allow 199.96.57.0/24;
allow 199.16.156.0/22;
allow 199.59.148.0/22;
allow 192.133.76.0/22;
allow 192.133.76.0/23;
allow 199.96.59.0/24;
allow 199.96.58.0/24;
allow 199.96.63.0/24;

IPリストを設定後、nginx設定を再読み込みします。

/etc/init.d/nginx configtest
/etc/init.d/nginx reload

これでBasic認証のかかったページでもOGPのテストができるようになりました。

参考URL