14

403エラーが発生するたびに、/ temp / www/error403.htmlにエラーページを表示しようとしています。

これは、ユーザーがhttps(ssl)経由でサイトにアクセスしようとし、そのIPがblovkips.confファイルにある場合に必ず発生しますが、現時点ではnginxのデフォルトのエラーページが表示されます。他のサーバーにも同じコードがあり(ブロックなし)、機能します。

IPがカスタム403ページにアクセスするのをブロックしていますか?もしそうなら、どうすればそれを機能させることができますか?

server  {
    # ssl
    listen               443;
    ssl                  on;
    ssl_certificate      /etc/nginx/ssl/site.in.crt;
    ssl_certificate_key  /etc/nginx/ssl/site.in.key;
    keepalive_timeout    70;

    server_name localhost;


    location / {
            root   /temp/www;
            index  index.html index.htm;
}

# redirect server error pages to the static page
error_page   403  /error403.html;
# location = /error403.html {
#         root   /temp/www;
# }

    # add trailing slash if missing
    if (-f $document_root/$host$uri) {
            rewrite ^(.*[^/])$ $1/ permanent;
    }      

    # list of IPs to block
    include blockips.conf;
}

編集: error_pageコードを504から403に修正しましたが、それでも同じ問題が発生します

4

4 に答える 4

14

私はここに来る前にグーグルの山をやりましたが、ちょうど今、もう少しやりました、5分以内に私は私の答えを得ました:P

この問題を抱えているのは私だけではないようです。

error_page 403 /e403.html;
  location = /e403.html {
  root   html;
  allow all;
}

http://www.cyberciti.biz/faq/unix-linux-nginx-custom-error-403-page-configuration/

エラーページへのアクセスがブロックされていると思っていたのは正しかったようです。

于 2010-07-01T01:08:33.693 に答える
2

問題は、アクセスが禁止されているWebサーバーからの403「Forbidden」エラーをサーバーに送信しようとしていることである可能性があります。Nginxは、error_pageディレクティブを内部リダイレクトとして扱います。そのため、これも禁止されているhttps://example.com/error403.htmlをサーバーにしようとしています。

したがって、次のようにエラーページがhttpsから提供されないようにする必要があります。

error_page  403   http://example.com/error403.html

または、エラーページパスの場所に必要な「アクセス許可」オプションを追加します。これをテストする方法は、/error403.htmlページに直接アクセスすることです。その方法でアクセスできない場合、誰かが実際の403エラーを受け取ったときに機能しません。

于 2010-07-01T18:56:35.110 に答える
1

私は同じ問題を抱えていました...ポイントは、サーバーコンテキストレベル(または必要に応じてvhostレベル)でIPホワイトリストを実装したため、すべての場所にもこれがあります(基本的に/403.htmlにはアクセスできません) ):

server {
  listen       *:443 ssl;
  server_name  mydomain.com ;
  error_page 403 /403.html;
  .....
  if ($exclusion = 0) { return 403; } #implemented in another conf.d files (see below)
  location ~ \.php$ {
    root          /var/www/vhosts/mydomain.com/httpdocs;
    include       /etc/nginx/fastcgi_par
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_connect_timeout 3m;
    fastcgi_read_timeout 3m;
    fastcgi_send_timeout 3m;
  }
  location /403.html {
    root      /usr/share/nginx/html;
    allow all;
  }

  ...
}

除外conf.dファイルのサンプル:

geo $exclusion {
  default 0;
  10.0.0.0/8  Local network
  80.23.120.23 Some_ip
  ...
}

これを修正するには、ロケーションレベル(コンテキスト)でリターン403を実行します。

server {
  listen       *:443 ssl;
  server_name  mydomain.com ;
  error_page 403 /403.html;
  .....
  location ~ \.php$ {
    if ($exclusion = 0) { return 403; } 
    root          /var/www/vhosts/mydomain.com/httpdocs;
    include       /etc/nginx/fastcgi_par
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_connect_timeout 3m;
    fastcgi_read_timeout 3m;
    fastcgi_send_timeout 3m;
  }
  location /403.html {
    root      /usr/share/nginx/html;
    allow all;
  }

  ...
}

私のために働きます。

于 2016-07-22T13:41:08.967 に答える
0

リストされた構成にはブーブーがあるようです。カスタムページにエラーコード503(「サービスを利用できません」)のみを送信しているため、403(「禁止」)にはおそらく次のものを使用します。

error_page 403 /error403.html
于 2010-06-30T19:26:12.243 に答える