質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Linux

    3919questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Apache

    1873questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • .htaccess

    401questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

.htaccessとhttpd.confファイルの優先順位

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 771

vverbv

score 3

初めまして、こんにちは。
apacheの設定と.htaccessの設定で躓いており、ご教授頂けますでしょうか。

【やりたいこと】
.htaccessでアクセスを制限して、仮に.htaccessがなくなった場合はアクセスを全て拒否するような仕組みを実現したいと思っています。

【環境】
・ドメイン(htaccess.com)はhostsを書き換えて対応しています。

・apache2.4

[root@testserver public_html]# httpd -v
Server version: Apache/2.4.33 (Amazon)
Server built:   May 23 2018 19:02:39


・apacheの設定

[root@testserver public_html]# httpd -S
VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server htaccess.com (/etc/httpd/conf.d/htaccess.com.conf:1)
         port 80 namevhost htaccess.com (/etc/httpd/conf.d/htaccess.com.conf:1)
[root@testserver public_html]# httpd -t
Syntax OK
[root@testserver public_html]# cat /etc/httpd/conf.d/htaccess.com.conf
<VirtualHost *:80>
   ServerName htaccess.com
   DocumentRoot "/home/ec2-user/public_html"
   DirectoryIndex index.php index.html index.xml

   <Directory /home/ec2-user/public_html >
           Options FollowSymLinks
           AllowOverride All
           Require all denied
   </Directory>
</VirtualHost>

・.htaccessの設定

[root@testserver public_html]# pwd
/home/ec2-user/public_html

[root@testserver public_html]# ll -altr
total 20
drwxr-xr-x 4 ec2-user ec2-user 4096 Jun 23 06:53 ..
-rw-r--r-- 1 ec2-user ec2-user   13 Jun 23 06:53 index.html
-rw-r--r-- 1 root     root      587 Jun 23 07:01 .htaccess
-rw-r--r-- 1 root     root       20 Jun 23 07:22 index.php
drwxr-xr-x 2 ec2-user ec2-user 4096 Jun 23 07:22 .

[root@testserver public_html]# cat .htaccess
order deny,allow
deny from all
allow from XXX.XXX.XXX.XXX

【躓いている部分】

/etc/httpd/conf.d/htaccess.com.conf

   <Directory /home/ec2-user/public_html >
           Options FollowSymLinks
           AllowOverride All
           Require all denied
   </Directory>

Require all denied の記述を消すと、htaccess.com/index.htmlのページが見れます。
どのようにすれば【やりたいこと】が実現するでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

まず前提として、.htaccess はサーバ管理者による設定 ( httpd.conf とそこから Include される種々の設定ファイル ) を、コンテンツ管理者が(一部)上書きできる仕組みです。

そのため

仮に.htaccessがなくなった場合はアクセスを全て拒否する

これは、「httpd.confの設定としては全拒否とする ( 許可を与えるなら .htaccess を置け )」ということで、/etc/httpd/conf.d/htaccess.com.confの設定に特に問題はないと思います。

問題は、許可を与えるための.htaccessです。こちらで allow,denyというディレクティブが使われていますが、これは過去使われていた形式で、今は非推奨です。なので、Require all deniedの効果を十分上書きできていない懸念があります。

今のApacheは、mod_authz という機構によって ( アクセス元IPアドレスに限らず ) 様々なアクセス制限を行うようになっています。そのためのディレクティブが Requireです。
一方、allow,denyというのは mod_access_compat という、過去との互換性のために残されている機構によります。

ということで、.htaccess の方に書く設定も、mod_authz ( IPアドレス制限なら mod_authz_host ) でやった方が良いように思います。以下のドキュメントもご参考に。
http://httpd.apache.org/docs/2.4/mod/mod_authz_host.html
http://httpd.apache.org/docs/2.4/howto/access.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

まず最初に、例示でつかうドメイン名は、「ご自身が所有する実際のドメイン名」か「例示用に用意されているドメイン名( example.com / example.net や example.jp 等)」を使ってください。( 例示用ドメイン名については、http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html 等を参照してください。)


お使いの環境は、Apache 2.4 ですよね。

.htaccess に書いている下記の内容ですが、

order deny,allow
deny from all
allow from XXX.XXX.XXX.XXX

これは、2.2 の書き方ですね。そのため、2.4の環境では、無視されていると思われます。

2.4 では、Require ip XXX.XXX.XXX.XXX や Require host  .example.com のようにと記載します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/23 23:15

    無視は無いのでは?mod_access_compatが有効ならallowもdenyも使えるし、有効でなければallowやdenyはエラーになってApacheが起動しないです。

    キャンセル

  • 2018/06/24 00:12

    いえ、.htaccess に無効ディレクティブがあるのは、Apache起動エラーではなく設定無視という扱いになるはずです。
    mod_authz系とmod_acess_compatの混在がどうなるのか分からないので、下ではmod_authzに揃えた方が良いのではという旨回答しましたが、案外mod_access_compatをLoadModuleすれば済む話なのかもしれませんね。

    キャンセル

  • 2018/06/24 00:36

    あ、失礼。.htaccessでしたね。その場合は、Internal Server Errorですね。

    キャンセル

  • 2018/06/24 00:43

    あ、Internal Server Error でしたか。失礼しました。それならブラウザの表示で気づきそうですから、mod_access_compat自体は有効なんでしょうね。

    キャンセル

0

2.4系の記述(Require ~)と、2.2系互換の記述(Allow ~ Deny ~)は独立して動くようです。両方の記述で許可が得られないとアクセス出来ません。
なので、記述はどちらかに統一した方が良いでしょう。2.2系互換は非推奨なので、2.4系が良いでしょうが、2.2系になれているのであれば、将来のバージョンで削除されるまで使うのも良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Linux

    3919questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Apache

    1873questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • .htaccess

    401questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。