諸事情によりcentOSを一から作り直していたのですが、Apacheをvimでいじり、firewalldをいじり、SELinuxもいじり、やっと繋がったぁ…とおもいきや「403 fobidden」で権限がなくブラウザで弾かれる。
そしてわけがわからなかったので、友人のcentOSのイメージコピーをもらって設定し直しても「403 forbidden」。
Myバイブルの「ゼロから始めるLinux」でやり直しても、「403 forbidden」。
なにがいけないんだあ!!ネットで調べても同じ症状の人がいない。
そして、なんとか解決できたのでその方法を書いていきたいと思います(というか、おそらく私がしっかり設定していなかっただけなんですが)。
※この解決策は他のサイトなどでApacheの設定、firewalldの設定、SELinuxの設定で解決した人以外が対象で、Apacheの設定ミスと思われる方に向けて書いています。Apache設定が完璧にできている人は問題ないと思います。
そもそもApacheの設定ミス
私の場合では、Apacheの設定でUser、Group、ServerName、DocumentRootを自分の設定で変えていました。
ここで問題だったのが、DocumentRootを設定したときにDirectory部分を変更していないためでした。
以下手順を書いていきます。(かなり丁寧なので、そんなのもうやったお!って人は該当部分まで飛ばしてください)
Apacheをviで開く
まずはLinuxのviでApacheを開きます。
一般ユーザーの場合は
$ sudo vi /etc/httpd/conf/httpd.conf
rootユーザーで権限がある場合は、
# vi /etc/httpd/conf/httpd.conf
で開きます。すると、
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
#
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so 'log/access_log'
# with ServerRoot set to '/www' will be interpreted by the
# server as '/www/log/access_log', where as '/log/access_log' will be
# interpreted as '/log/access_log'.
#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
"/etc/httpd/conf/httpd.conf" 353L, 11715C
こんな感じの画面が出てきますね。
設定変更
設定は各々やっていると思うので、私の場合の設定変更ミスをお伝えします。
下の方に行くと、
<Directory />
AllowOverride none
Require all denied
</Directory>
が出てきます。
この部分で、DocumentRootで設定したディレクトリ以外すべて弾かれるようになっています。なので、ここを変更するのではなく、さらに下の方に行くと
DocumentRoot "ここは自分のPHPファイルを入れるディレクトリ"
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "ここ!!!!">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
という部分が出てくると思います。見つからなかったら、viの検索コマンドを使ってください。その場合はDirectory部分を見つけたいので、「/Directory + Enter」を押せば探せます。次の検索結果に行きたい場合は「N」を押せばおk。
私の場合は、
<Directory "ここ!!!!">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
にある"ここ!!!!"部分を変えておらず、権限がディレクトリに設定されていなかったようです。
なので、"ここ!!!!"の部分を上のDocumentRootのディレクトリと同じにしてください。
「i」を押して文章をInsertします。変更するとこんな感じ、
DocumentRoot "ここは自分のPHPファイルを入れるディレクトリ"
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "ここは自分のPHPファイルを入れるディレクトリ">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
viを保存して終了&リスタート
変更し終わったら、escキーでInsertを終了します。設定を保存して終了するので、「:wq + Enter」を押せばviの設定変更を保存し、viが終了します。
もし最初の方で一般ユーザーなのに「sudo」をしていなかったり、一般ユーザーで「sudo」しているのに、viの「:wq」が使えなかったりした場合は「sudo」の設定が一般ユーザーに効いていないことがあるので、そこはググって設定してください。
元のLinuxの画面に戻ったら、
$ sudo service httpd restart
rootユーザーであるなら、
# service httpd restart
を実行して、Apacheをリスタートしてください。
リスタートしないと、ブラウザ上での権限がまだないので弾かれます。弾かれました(笑)
やっと繋がった…
参考書やネットの情報だけでは今回の状況は解決できなかったので共有させていただきました! これで少しはLinuxに寄り添うことができたかな。