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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

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

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

6488閲覧

【Apache】特定のページだけBasic認証を外したいが、解決できない

sujico.net

総合スコア453

Apache

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

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/05/11 05:13

編集2020/05/11 06:38

#やりたいこと
Webサイト全体にBasic認証をかけますが、特定のページ(特定のパス以下)の場合のみBasic認証を外したいです。
これをApacheの設定で実施したいです。

(例)
https://example.com/ → Basic認証あり
https://example.com/menu/ → Basic認証あり
https://example.com/noauth/ → Basic認証なし

##悩んでいること
色々調べて、Apacheの設定で全体にBasic認証を実装することまでは出来ておりますが、
特定のページ(特定のパス以下)の場合のみBasic認証を外す挙動が出来ずに悩んでいます。

Wordpressの為、Webサイトにディレクトリは存在しません。
その為設定は、DirectoryディレクティブではなくLocation もしくは LocationMatchで行うものかと考えていますが、現状うまくいっていません。

##実行環境
サーバ: Amazon EC2, AmazonLinux2
Webサーバ: Apache2.4
Wordpress実行環境: KUSANAGI

##うまくいかなかった設定例1
以下confファイルを作成してapacheをreloadした場合、/noauthにだけBasic認証がかかってしまいました。
(ファイル /etc/httpd/conf.d/auth_basic.conf)

# 全てにBasic認証をかける # あるIPアドレスはアクセス拒否する(virtualhostで設定済) <Location "/"> <RequireAll> AuthType Basic AuthName "Basic Auth" AuthUserFile /hoge1/hoge2/kusanagi/example.com/DocumentRoot/.htpasswd Require valid-user Require not env block_ip </RequireAll> </Location> # パスが/noauthから始まる場合はBasic認証をかけない # あるIPアドレスはアクセス拒否する(virtualhostで設定済) <LocationMatch ^(?!(/noauth))> <RequireAll> Require all granted Require not env block_ip </RequireAll> </LocationMatch>

【追記】
色々試す内に何故上記のように設定をしようとしたか覚えていないのですが、
**<LocationMatch ^(?!(/noauth))>ではなく<LocationMatch /noauth>**でも試してみましたが、その場合はどちらもBasicがかかったままの状態になりました

##うまくいかなかった設定例2
全体にBasicがかかったまま

<Location "/"> <RequireAll> AuthType Basic AuthName "Basic Auth" AuthUserFile /hoge1/hoge2/kusanagi/example.com/DocumentRoot/.htpasswd Require valid-user Require not env block_ip </RequireAll> </Location> <Location /noauth> Satisfy Any Require all granted Require not env block_ip </Location>

##うまくいかなかった設定例3
全体にBasicがかかったまま
全体にBasicをかけるが、/noauthの場合のみ全て許可する、というイメージで設定をしているのですが、思ったような挙動ではないです、、

<Location "/"> <RequireAll> AuthType Basic AuthName "Basic Auth" AuthUserFile /hoge1/hoge2/kusanagi/example.com/DocumentRoot/.htpasswd Require valid-user Require not env block_ip </RequireAll> </Location> <Location /noauth> <RequireAll> Require all granted Require not env block_ip </RequireAll> </Location>

 


思い当たる原因を1つずつ潰してはいるものの、現在潰し切ってしまい困り果てている状況です。
上記、設定の誤りや、疑わしい箇所などございましたら
恐れ入りますがご教示頂けますと幸いです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

設定例1については明らかな誤りで、/noauthで「始まらない」URIに対して条件を設定しています。
正確には少し違うかもしれませんが。

2については、Apache2.2台の書き方と2.4台の新しい書き方が混在しています(Satisfy Anyは古い書き方)
混在させることもできるとは思いますが、思わぬところで思わぬ動作をすることがあるので統一すべきでしょう。
3については、2のSatisfy Anyと同じことをやるのならRequireAnyだと思うんですが、それで正しいのかはわかりません。そうするとIP制限が効かなそうな気もしますし…。

正直正確なところは試しながらやるしかないですが、参考になりそうなところをいくつか貼っておきます。
Apache 2.4のアクセス制御をもうちょっとマジメに見てみた
Apache2.4 のRequireディレクティブでアクセス制御を行う

SetEnvIfでRequest_URIを見るのもいいかもしれないです。
Apache2.4でアクセス制御の方法を調べた

Apacheの設定面倒ですよね…。

投稿2020/05/11 08:01

yu_1985

総合スコア7440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sujico.net

2020/05/11 09:01

ご回答頂きありがとうございます。 > 設定例1については明らかな誤り こちら、投稿後に自分でも気が付きました…無我夢中で試行錯誤していると、こういう変なミスがありますね 2については、Satisfy AnyではなくRequireAnyを使用すべきでしたね。こちらもご指摘いただきありがとうございます 色んなサイトを参考にAnyを指定していたのですが、IP制限もかけたいのでこの場合はRequireAllを使用するしかなさそうです…。。 > 試しながらやるしかない 参考サイトに関して、ありがとうございます! こちら確認してみます。 > SetEnvIfでRequest_URIを見るのもいいかもしれないです。 なるほど、Request_URIを使ってrequireしてみる方法もあったのですね。 現状まだ解決出来ていないのですが、引き続き粘ってみます! どうしてもダメなら、要件に沿って方法の見直しを検討してみます。課題を残すことになってしまうので、気持ちが悪いですが……。 ご丁寧に、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問