WEBユーザー公開設定・独自ドメイン設定

Apache Apacheユーザディレクトリ 公開

WEBユーザディレクトリ

Userdirモジュールの機能を使うことにより、1つのドメインで無数のユーザーを公開出来る事ができます。

http://example.com/~user/
http://example.com/user/

みたいな感じ。
プロバイダの無料WEBスペースをかりるとこのようになっていると思います。

 

それではやってみよう!٩(๑❛ᴗ❛๑)

Apacheメイン設定ファイル編集

# vi /etc/httpd/conf/httpd.conf

<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disabled

#
# To enable requests to /~user/ to serve the user’s public_html
# directory, remove the “UserDir disabled” line above, and uncomment
# the following line instead:
#
#UserDir public_html

</IfModule>

↓変更

<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disable

#UserDir disable ← #を追加(コメントアウト)

#
# To enable requests to /~user/ to serve the user’s public_html
# directory, remove the “UserDir disable” line above, and uncomment
# the following line instead:
#
#UserDir public_html

UserDir public_html ← 行頭の#を削除(コメント解除)

AliasMatch ^/testuser(.*) /home/testuser/public_html/$1 ←(testuserユーザーのみhttp://example.com/~testuser/のように~でアクセスできるようにする)

AliasMatch ^/([^/]+)/(.*) /home/$1/public_html/$2←(全てのユーザーでhttp://example.com/userdir/ユーザー名/でアクセスできるようにする)

</IfModule>

#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>

 

 

※以下を追加します。

<Directory /home/*/public_html>
AllowOverride All
Options IncludesNoExec ExecCGI FollowSymLinks
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

 

 

# service httpd restart

これで各ユーザのpublic_html以下のファイルがWEB上に公開できます٩(๑❛ᴗ❛๑)۶一般的なWEBユーザ公開設定はここでおしまいです。

お疲れ様です。

 

 

 

 

しかし・・問題が!!

WEBユーザの貸し出している人が独自ドメインを使いたいといった場合に問題が発生します。

画像がどうも独自ドメインの方では読み込めない

意図しない独自ドメインもUserdirディレクティブが効いてしまう。

 

どっちも致命的ですね・・・;
Userdirディレクティブとバーチャルホストは共存しない仕様のようです。

 

 

どうしようもないの?

方法はある!

Userdirモジュールをメインファイルで有効にせず、WEBユーザを使用したいドメインのみで設定する事で解となります。

 

 

具体的な設定例

# vi /etc/httpd/conf/httpd.conf

 

 

<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disabled←無効を確認

#
# To enable requests to /~user/ to serve the user’s public_html
# directory, remove the “UserDir disabled” line above, and uncomment
# the following line instead:
#
#UserDir public_html←無効にする

 

 

WEBユーザディレクトリ用バーチャルホストファイル作成

# vi vhost_webuser.com.conf

 

 

<VirtualHost *:80>
ServerName www.webuser.com
ServerAlias webuser.com
#  DocumentRoot /home
#  UserDir public_html

<IfModule mod_userdir.c>
AliasMatch ^/([^/]+)/(.*) /home/$1/public_html/$2
UserDir public_html
</IfModule>

<Directory /home/*/public_html>
AllowOverride All
Options IncludesNoExec ExecCGI FollowSymLinks
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ftp.crt
SSLCertificateKeyFile /etc/pki/tls/certs/server.key

<IfModule mod_userdir.c>
AliasMatch ^/([^/]+)/(.*) /home/$1/public_html/$2
UserDir public_html
</IfModule>

ServerName www.webuser.com
ServerAlias webuser.com
</VirtualHost>

 

 

独自ドメイン用WEBユーザバーチャルホストファイル

# vi vhost_newhoge.net.conf

<VirtualHost *:80>
ServerName newhoge.net
DocumentRoot /home/testx2/public_html
ErrorLog logs/virtual-error_log
CustomLog logs/virtual-access_log combined env=!no_log
<Directory “/home/testx2/public_html”>
AllowOverride all
</Directory>
</VirtualHost>

 

 

<virtualhost *:80>
ServerName newhoge.net
Redirect / http://www.newhoge.net
</virtualhost>

 

 

 

# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

 

お疲れ様です(ㆁᴗㆁ✿)

かなりマニアックな設定ですが、いかがだったでしょうか。
お疲れ様でした☆

優 ( エンジニア )

この記事を書いた人:優 ( エンジニア )

システムガーディアン爆弾処理班。アクセス負荷対策やNginxへの移行案件が多いこの頃。IBM SoftLayerやAWSなどクラウド案件も多くなってきました。


この記事に関してのお問い合わせ
御連絡・ご返信は原則2営業日以内を予定しております。
お急ぎの場合は、お手数ですが下記電話でもご対応をしております。

システムガーディアン株式会社
受付時間:平日9:00~18:00
受付担当:坪郷(つぼごう)・加藤
電話:03-6758-9166