403 forbiddenエラーの解決方法と見る方法

403forbidden

403 forbidden you don’t have permission to access とは

403 forbiddenはHTTPのエラーコードで「閲覧禁止」という意味です。

このエラーはwebページを見ている側では対処できないものです。

エラーの内容としてはページ自体が存在していないのではなく、サーバ側の設定で権限が与えられておらず見られないという状態です。

下の図のように、index.htmlの権限によって、ページが見られたり(200 ok)、見られなくなります(403 forbidden)。

201 テストページ

201 テストページ

403 forbidden

403 forbidden

「index.htmlは所有者/グループがrootでapacheはread権限ありません」という表示が出ています。

webサーバの管理者はindex.htmlの権限を変更することで403エラーを解消することができます。

403 forbiddenが表示されているサイトを見る方法

お気に入りのサイトに飛んだら403と表示されて見れなくなった!

ということがたまにあります。

残念ながらサイトの修復はウェブサイトの所有者しかできません。

しかし、一応サイトを見る方法はいくつかあります。

キャッシュから閲覧

最近まで閲覧できていたページであればgoogleによって一時的にページが保存されていてそこから閲覧できる場合があります。

googleで検索するとタイトルの隣に▼のような三角マークがあるのでクリックすると「キャッシュ」というのがでてきます。

キャッシュで閲覧

キャッシュで閲覧

こちらをクリックするとgoogleでキャッシュされたデータからページを閲覧できます。ページによっては画像が見られなかったり、レイアウトが崩れている場合があります。

internet archiveを利用する

インターネットアーカイブはインターネット上にあるウェブサイトからデータ自動・手動で取得して保存しているサービスです。サイトURLを入力して検索するとアーカイブを検索できます。ある程度有名なサイトでないと残っていないかもしれませんが、取得されているサイトであれば複数の日付時点でのウェブサイトを閲覧することができます。

https://archive.org/search.php?query=

403エラーを解決する方法

下記の手順でエラーを原因を特定していきます

  1. ページが閲覧できないか確認する(エラーコードの確認)
  2. errorログを確認する
  3. ファイル・ディレクトリの権限を確認
  4. conf, .htaccessを確認する

ひとまずWEBページを確認しよう!

まずはページが実際に閲覧できないかをブラウザでウェブページを閲覧したり、curlコマンドで現状確認します。

注意
ブラウザはキャッシュ*が効いている場合があるので新しくブラウザを立ち上げたり、キャッシュ削除、シークレットモードを利用しましょう。

※キャッシュ機能:勝手に以前読み込んだページを一時保存する機能

403 forbidden

403 forbidden

ブラウザから確認するとForbiddenの文字とともにエラー内容も記述されています。

ここでは「You don’t have permission to access /index.html on this server」サーバ上の/index.htmlにアクセスする権限がありませんと書いてあります。

エラーログの確認

次にエラーログを確認します。エラーログの保存先はhttpd.confやincludeした設定ファイル上に書いてあります。

apacheの場合、基本的には/var/log/httpdの下に作成されていると思います。

下記が実際に出力されているエラーログの例です。

index.htmlにファイルのパーミッションが原因でサーバアクセスが拒否されたと記録されています。記載されているindex.htmlのパーミッションを確認したところapacheが閲覧できる権限になっていことがわかります。

error log
# cat error_log.20220104 
[Tue Jan 04 11:38:28.238039 2022] [core:error] [pid 11981] (13)Permission denied: [client xx.xxx.xx.xx:61301] AH00132: file permissions deny server access: /var/www/example.com/htdocs/index.html

別のエラーではserver設定が原因でアクセス拒否されていると表示されています。この原因はdirectoryディレクティブでrequire all deniedとなっていたため表示できていませんでした。

error log
[Tue Jan 04 11:38:28.238039 2022] [authz_core:error] [pid 13350] [client xx.xxx.xx.xx:61301] AH01630: client denied by server configuration: /var/www/example.com/htdocs/

webサーバにapacheを利用している場合の例ですが、こちらはconfにrequire all grantedと記述することで403エラーを解消できます。

httpd.conf
 <Directory /var/www/example.com/htdocs>
DirectoryIndex index.html index.php
AllowOverride All
Require all granted
</Directory>ソースコード

.htaccessやIncludeされたconfを確認

httpd.confやnginx.confを見ても特に怪しい設定は書いていないという場合もあります。

サーバの設定ファイルは一つのファイルに記述すると長くなってしまうので複数のconfに別々に記述することがあります。別のディレクトリに設定ファイルがないか確認しましょう。

IncludeOptional conf.d/*.conf

apacheの場合はhttpd -Sコマンドを使うと各バーチャルホスト毎の設定ファイルを確認できます。

Webサーバがapacheの場合は.htaccessというファイルがドキュメントルート配下に設置されていることがあります。.htaccessの設定はサーバのconfファイルの設定を上書きできるのでこのファイルがないか確認しましょう。

コメントを残す

メールアドレスが公開されることはありません。