web-dev-qa-db-ja.com

403禁止されたエラーを与えるApache

わかりましたので、私は以前に2つの仮想ホストをセットアップしましたが、それらはクールに動作しています。どちらもシンプルなWebプロジェクトを格納し、ブラウザのhttp://project1およびhttp://project2で正常に動作します。

とにかく、私は別の仮想ホストを追加するようになりました。/etc/hostsファイルを127.0.0.1 project3で編集し、project2の以前のエントリをコピーして貼り付け、ファイルパスを編集して、httpd-vhosts.confファイルも更新しました。

すべてのファイルとフォルダーのアクセス許可を確認し(実際、project2からコピーして貼り付けました)、単に "hello world"メッセージをindex.phpファイルに入れました。

http://project3にアクセスすると、403許可されていない許可拒否メッセージが表示されます

これがなぜなのか、すべてが正しく設定されているように見えるので、私が見逃したステップを見つけることができます。

前もって感謝します。

23
user2672288

それを確認します :

  • Apacheはファイルに物理的にアクセスできます(Apacheを実行するユーザー、おそらくwww-dataまたはApacheはファイルシステム内のファイルにアクセスできます)
  • Apacheは、フォルダーのコンテンツをリストできます(読み取り許可)
  • Apacheには、そのフォルダー用の「許可」ディレクティブがあります。/var/www /に1つあるはずです。たとえば、デフォルトのvhostを確認できます。

さらに、error.logファイル(通常は/var/log/Apache2/error.logにあります)を見ると、403エラーが発生した理由が正確に説明されています。

最後に、すべての構成が適用されていることを確認するために、Apacheを再起動することもできます。これは通常、/etc/init.d/Apache2 restart。一部のシステムでは、スクリプトはhttpdと呼ばれます。把握してください。

23
blue112

数日間苦労した後、この問題を修正しました。ここに私のために働いたものがあります:

まず、Apache error_logファイルを確認し、最新のエラーメッセージを確認します。

  • 次のような場合:

    access to /mySite denied (filesystem path
    '/Users/myusername/Sites/mySite') because search permissions
    are missing on a component of the path
    

    ファイルのアクセス許可に問題があります。ターミナルから次のコマンドを実行することで修正できます:

    $ cd /Users/myusername/Sites/mySite
    $ find . -type f -exec chmod 644 {} \;
    $ find . -type d -exec chmod 755 {} \;
    

    次に、WebサイトのURLを更新します(http://localhost/mySiteなど)。それでも403エラーが発生し、Apache error_logが同じことを言っている場合は、ディレクトリツリーを上に移動し、ディレクトリのアクセス許可を調整します。これは、ターミナルから次の方法で実行できます。

    $ cd ..
    $ chmod 755 mySite
    

    必要に応じて、次の手順に進みます。

    $ cd ..
    $ chmod Sites 
    

    そして、必要に応じて、

    $ cd ..
    $ chmod myusername
    

    DO NOTそれよりもさらに上に移動します。あなたのシステムを非常に混乱させる可能性があります。それでもsearch permissions are missing on a component of the pathというエラーが表示される場合は、どうすればよいかわかりません。ただし、次のように修正した別のエラー(以下のエラー)が発生しました。

  • error_logが次のような場合:

    client denied by server configuration:
    /Users/myusername/Sites/mySite
    

    問題はファイルのアクセス権ではなく、Apacheの構成にあります。

    httpd.confファイルには、次のようなデフォルト設定が表示されます(Apache 2.4+):

    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    

    またはこのように(Apache 2.2):

    <Directory />
      Order deny,allow
      Deny from all
    </Directory>
    

    しないでくださいこれを変更してください!これらの許可をグローバルにオーバーライドするのではなく、httpd-vhosts.confファイルでオーバーライドします。ただし、最初に、httpd.confのvhost Include行がコメント解除であることを確認してください。次のようになります。 (正確なパスは異なる場合があります。)

    # Virtual hosts
    Include etc/extra/httpd-vhosts.conf
    

    次に、Includedだけを追加したhttpd-vhosts.confファイルを開きます。 Webページのエントリがまだない場合は追加します。次のようになります。 DocumentRootDirectoryのパスは同一である必要があり、index.htmlまたはindex.phpファイルがある場所を指している必要があります。私にとっては、それはpublicサブディレクトリ内にあります。

    Apache 2.2の場合:

    <VirtualHost *:80>
    #     ServerAdmin [email protected]
        DocumentRoot "/Users/myusername/Sites/mySite/public"
        ServerName mysite
    #     ErrorLog "logs/dummy-Host2.example.com-error_log"
    #     CustomLog "logs/dummy-Host2.example.com-access_log" common
        <Directory "/Users/myusername/Sites/mySite/public">
            Options Indexes FollowSymLinks Includes ExecCGI
            AllowOverride All
            Order allow,deny
            Allow from all
            Require all granted
        </Directory>
    </VirtualHost>
    

    言っている行

    AllowOverride All
    Require all granted
    

    apache 2.4+にとって重要です。これらがなければ、httpd.confで指定されたデフォルトのApache設定を上書きしません。 Apache 2.2を使用している場合、これらの行は代わりに言う必要があることに注意してください

    Order allow,deny
    Allow from all
    

    この変更は、Apache 2.2行をコピーアンドペーストしてもApache 2.4+では機能せず、Apache 2.2行は依然として古いヘルプスレッドで見られるため、Iなどのこの問題のGoogleにとって大きな混乱の原因となっています。

    変更を保存したら、Apacheを再起動。このコマンドはOSとインストールに依存するため、ヘルプが必要な場合は個別にGoogleで検索してください。

これが他の誰かに役立つことを願っています!


PS:これらの.confファイルが見つからない場合は、次のようなfindコマンドを実行してみてください。

$ find / -name httpd.conf
8
Cameron Hudson

restoreconコマンドは次のように機能します。

restorecon -v -R /var/www/html/
7
sangeetha

サーバーには、ホームディレクトリとその中の.htaccessの読み取り許可が必要な場合があります

1
mikemay

次のコマンドを使用して、selinuxを無効にしてからもう一度試すことができます。

setenforce 0
0
S V Aditya

私の場合、ソースサーバーのIPがターゲットサーバーでホワイトリストに登録されていなかったため、失敗していました。

例えばソースサーバーで実行されているアプリケーションから https://prodcat.ref.test.co.uk にアクセスしようとしていました。送信元サーバーでifconfigによってIPを見つけます

このIPは、ターゲットサーバーのApache構成ファイルでホワイトリストに登録する必要があります。そうでない場合は、ホワイトリストを取得します。

ホワイトリストにIPを追加する手順(ターゲットサーバーも制御する場合)sshをApacheサーバーにSudo su-cd/usr/local/Apache/conf/extra(実際のディレクトリは設定に応じて異なる場合があります)

たとえば、ターゲットアプリケーションの構成ファイルを見つけます。 prodcat-443.conf

RewriteCond %{REMOTE_ADDR} <YOUR Server's IP> 
for e.g.
RewriteCond %{REMOTE_ADDR} !^192\.68\.2\.98

これが誰かを助けることを願って

0
Sanjay Bharwani