[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のテストができるようになりました。