7

user-agent が MSIE 6 の場合、nginx がエラー 403 を返し、カスタム エラー メッセージを表示するようにしたいと考えています。このコードを使用したところ、最初の数分ですべてが機能しました。その後、メッセージなしでエラーが返されました! 理由がわからない...コードは次のとおりです(「または」のないプレーンテキストにするために、「」の代わりに「を入れようとしましたが、まだ運がありません):

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;           
    include /etc/nginx/fastcgi.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    if ($http_user_agent ~ "MSIE 6" ) {
      return 403 "Browser not supported. Please update or change to another one.";
    }
}

編集:PHPリクエストに対してのみMSIE 6をブロックしたいので、phpブロックにあると言うのを忘れました。

4

1 に答える 1

4

実際、構成は機能するはずです。curl を使用して確認できます。

# curl -i -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1" http://localhost/i.php
HTTP/1.1 403 Forbidden
Server: nginx/1.3.6
Date: Wed, 26 Dec 2012 10:05:34 GMT
Content-Type: application/octet-stream
Content-Length: 62
Connection: keep-alive

Browser not supported. Please update or change to another one.

アクセスログもチェックする価値があります (デフォルトでは、log_format には $http_user_agent 変数が含まれています)。

ところで、/etc/nginx/fastcgi.conf には何が入っているのでしょうか?

もう 1 つのことは、実際の MSIE 6 ブラウザーを使用しているユーザーにメッセージを表示したい場合は、次のようにすることをお勧めします。

location ~ \.php$ {
    ...
    if ($http_user_agent ~ "MSIE 6" ) {
        return 403;
    }
    error_page 403 /old_browser.html;
}

あなたのメッセージで old_browser.html を作成します。MSIE が標準の IE 403 メッセージの代わりにファイルの内容を確実に表示するように、このファイルは 512 バイトより大きくする必要があることに注意してください。http://browsershots.orgのようなツールは、このようなケースのデバッグに最適です。:)

于 2012-12-26T10:09:55.943 に答える