ユーザーエージェントは環境変数の$http_user_agent
で取得できます。
ただ、偽装できるので注意が必要です。
状況に合わせて利用しましょう。
ユーザーエージェントについて、先に少し確認します。
- Chromeのユーザーエージェントは、"Chrome"という文字列で判定します。
- しかし、Microsoft Edgeもユーザーエージェントに"Chrome"という文字列を持っています。
- Microsoft Edgeは"Edge"という文字列を持っています。
では、これらを踏まえて、制限する場合を考えてみます。
条件
制限する場合を考えると、まずは次の条件を満たす必要があります。
条件A: /wp-admin/以下をリクエストする場合
次に、条件Aを満たしつつ、以下の2つのどちらかを満たす場合、制限することになります。
条件B:ユーザーエージェントが"Chrome"という文字列を持たない場合
条件C:Microsoft Edgeである場合。("Edge"という文字列を持つ場合)
つまり「AかつB」または「AかつC」の場合に制限することになります。
例
下記のコードは設定の一例です。location ~ \.php$ { }
の中に追記しています。
本来はlocation ^~ /wp-admin/
とする方がいいと思いますが、php-fpmへの渡し方がよく分からないので、location ~ \.php$
で全て処理しています。
Nginxはif文をネストできないので、文字列を結合して判定に利用しています。
Nginx
1location ~ \.php$ {
2
3 set $ua_check "";
4 if ($request_uri ~ ^/wp-admin/) {
5 set $ua_check "A";
6 }
7 if ($http_user_agent !~* Chrome) {
8 set $ua_check "${ua_check}B";
9 }
10 if ($http_user_agent ~* Edge) {
11 set $ua_check "${ua_check}C";
12 }
13
14 if ($ua_check = "AB") {
15 return 404;
16 }
17 if ($ua_check = "AC") {
18 return 404;
19 }
20
21
22 root /var/www/html/domain;
23 fastcgi_pass 127.0.0.1:9000;
24 fastcgi_index index.php;
25 fastcgi_param SCRIPT_FILENAME /var/www/html/domain/$fastcgi_script_name;
26 include fastcgi_params;
27}
その他
locationディレクティブのroot /var/www/html/domain;
をserverディレクティブに出してもいいと思います。
それと、fastcgi_param
の/var/www/html/domain
は$document_root
で代替できます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/10 01:22