web-dev-qa-db-ja.com

ディレクトリへのアクセスを許可しているにもかかわらず、Apache「クライアントはサーバー構成によって拒否されました」(vhost構成)

ubuntuのApacheではvhostを設定しましたが、ブラウザーで「403 Access forbidden」エラーが発生し続けます。ログには、「サーバー構成によってクライアントが拒否されました:/ home/remix /」と記載されています。

オンラインで解決策を探したところ、ディレクトリアクセスに関する多くの投稿(Allow from allなど)が見つかりましたが、私の知る限り、既にそれを行っています。 httpd-vhosts.confには、次のコードがあります。

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/opt/lampp/htdocs/"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/dummy-Host.example.com-error_log"
    CustomLog "logs/dummy-Host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/home/remix/"
    ServerName testproject
    ServerAlias testproject
    <Directory "/home/remix/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

私も追加しました

127.0.0.1    testproject

/ etc/hostsファイルに。

また、/ home/remix /フォルダーにはindex.htmlファイルが含まれ、httpd.confでvhostsが有効になっています。

見えないものはありますか?

編集:これはApache error_logエントリです。

[Sat Aug 18 09:15:32.666938 2012] [authz_core:error] [pid 6587] 
[client 127.0.0.1:38873] AH01630: client denied by server configuration: /home/remix/
42
RemiX

承認構成を変更します。

<Directory /home/remix/>
    #...
    Order allow,deny
    Allow from all
</Directory>

...同じもののApache 2.4バージョンに。

<Directory /home/remix/>
    #...
    Require all granted
</Directory>

アップグレードの概要ドキュメント を確認して、必要になる可能性のあるその他の変更について確認します。また、Google(およびこのサイト)で見つけた構成の例と支援のほとんどは、 2.2を参照してください。

68
Shane Madden

ディレクトリの権限を確認してください。たとえば、自分以外のアクセスを拒否するように設定されていると思います。

$ ls -ld /home/remix
drwx------ 92 remix remix 4096 Aug 17 22:59 /home/remix

drwx------が正確に表示される場合は、これが事実です。次のコマンドを実行して修正します。

chmod a+x /home/remix
4
Michael Hampton

httpdサービスを実行しているユーザーがこのディレクトリにアクセスできることを確認してください。

3
cpt.Buggy

「サーバー構成によってクライアントが拒否されました」とは、ApacheではなくLinuxサーバー自体がファイルへのアクセスを禁止することを意味します。

権限/所有権/グループメンバーシップを変更してアクセスを提供しても問題が解決しない場合、ルートの原因は、SELinuxが適切なSE Linuxコンテキストを持たないフォルダーへのアクセスを禁止している可能性があります 'Relocationing an Apache DocumentRoot under Selinux '

  • setenforce 0を実行してSELinuxを一時的に無効にすると、ファイルがアクセス可能になります
  • setenforce 0を実行してSELinuxを再度有効にすると、ファイルに再びアクセスできなくなります

次に、ファイルのアクセス許可が何であれ、SELinuxによってアクセスが確実に禁止されます。

2
Vincent

人々にこの問題を引き起こす可能性のあるもう1つの単純な(ただしトリッキーな落とし穴)は、ユーザーディレクトリが/ home/*にない場合です。/nethome/*

提供されたuserdir.confには次のようなものが含まれています(ただし、Userdir:は無効になっています)。

$ cat /etc/httpd/conf.d/userdir.conf 
<IfModule mod_userdir.c>
    UserDir enabled
    UserDir public_html
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

ディレクトリの仕様は〜user ==/home/userを想定しています。ユーザーのホームディレクトリが実際に存在する場所のディレクトリ仕様を変更または追加するだけです。

かなり明白ですが、理解するのにしばらく時間がかかりました!! :-P DUH!

例えば〜user ==/nethome/user

<Directory "/nethome/*/public_html">
    AllowOverride All
    Options MultiViews Indexes Includes FollowSymLinks
    Require all granted
</Directory>

一般に、そのディレクトリに対するより多くのオープンな承認も参照してください。

0
gaoithe

私の場合、アプリケーション(phpMemcacheAdmin)を追加しましたが、デプロイメントスタックにマウントを追加するのを怠っていたため、起動時にマウントがありません(kubernetesなど)。私は1時間かけて余分なスラッシュの削除とアクセス許可の変更をいじくり回し、最後にシェルを実行して、そこにさえないことを確認しました。

K8sにデプロイしようとしている場合は、hostPathを使用している場合は、次のものがあることを再確認してください。

...
    volumeMounts:
    - mountPath: /opt/phpMemcacheAdmin
      name: memcached-admin
...
  - hostPath:
      path: /...../opt/phpMemcacheAdmin
      type: ""
    name: memcached-admin
0
Rich K.