web-dev-qa-db-ja.com

VirtualHostはCentOS7のApache2.4.6では機能しません

CentOS7のApache2.4.6でVHをセットアップしようとしていますが、機能しないため成功しません。これは私が今まで試したことです:

  • _/etc/httpd/conf/httpd.conf_には_Include conf.modules.d/*.conf_という行があるので、_/etc/httpd/conf.d/vhost.conf_の下にファイルを作成し、その中に配置します。

    _NameVirtualHost *:80
    
    <VirtualHost *:80>
         ServerName webserver
         ServerAlias localhost devserver development
         DocumentRoot /var/www/html
    </VirtualHost>
    _
  • Apacheサービスをリロード/再起動します(両方を試しました):

    _service httpd reload|restart
    _
  • Windows側で、ファイル_C:\Windows\system32\drivers\etc\hosts_を編集し、次の行を追加します。

    _192.168.3.131  webserver localhost devserver development # this is the IP of Apache Server
    _
  • ブラウザを開いて試してみました:_http://webserver_、_http://devserver_そして両方ともデフォルトのApacheページに移動するため、VHは機能しません。

  • _/var/www/html/index.php_の下に次の行<?php phpinfo(); ?>を付けてファイルを配置し、Apacheがロードしているモジュールを確認します。これが結果です。

    _core mod_so http_core mod_access_compat mod_actions mod_alias mod_allowmethods mod_auth_basic mod_auth_digest 
    mod_authn_anon mod_authn_core mod_authn_dbd mod_authn_dbm mod_authn_file mod_authn_socache mod_authz_core 
    mod_authz_dbd mod_authz_dbm mod_authz_groupfile mod_authz_Host mod_authz_owner mod_authz_user mod_autoindex 
    mod_cache mod_cache_disk mod_data mod_dbd mod_deflate mod_dir mod_dumpio mod_echo mod_env mod_expires mod_ext_filter 
    mod_filter mod_headers mod_include mod_info mod_log_config mod_logio mod_mime_magic mod_mime mod_negotiation 
    mod_remoteip mod_reqtimeout mod_rewrite mod_setenvif mod_slotmem_plain mod_slotmem_shm mod_socache_dbm 
    mod_socache_memcache mod_socache_shmcb mod_status mod_substitute mod_suexec mod_unique_id mod_unixd mod_userdir 
    mod_version mod_vhost_alias mod_dav mod_dav_fs mod_dav_lock mod_lua prefork mod_proxy mod_lbmethod_bybusyness 
    mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_heartbeat mod_proxy_ajp mod_proxy_balancer mod_proxy_connect 
    mod_proxy_express mod_proxy_fcgi mod_proxy_fdpass mod_proxy_ftp mod_proxy_http mod_proxy_scgi mod_systemd mod_cgi mod_php5 
    _

そして、どうやらmod_vhostがロードされていますが、機能していません。何かを見逃しましたか?これに関するヘルプやアドバイスはありますか?多分私は何かを忘れましたが、Apacheのドキュメントを読んで、何か役立つものが見つかりません

更新:test1

私はVH定義にいくつかの変更を加えました、そして今これは私が持っているものです:

_<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName webserver
    #ServerAlias localhost devserver development

    <Directory "/var/www/html">
        Options FollowSymLinks Includes ExecCGI
        AllowOverride All
        Allow from all

        #Require local
        #Require 192.168.3.0/16
        #Require 192.168.1.0/16
    </Directory>
</VirtualHost>
_

しかし、私は403 Forbiddenを取得しています

禁止

このサーバーで/index.phpにアクセスする権限がありません。

ここで何が失敗しているのですか?

7
ReynierPM

あなたに問題を引き起こしているかもしれないいくつかのこと:-

NameVirtualHost *:80

Apache 2.4.xの有効な構文ではなくなったため、完全に削除する必要があります。

Windows側では、HOSTSファイルを変更したら、DNS Client serviceをリロードする必要があるため、再起動するか、「管理者として実行」を使用してコマンドウィンドウを起動し、これを実行します:-

net stop dnscache
net start dnscache

最後に、仮想ホストの定義内で、この仮想ホストへの接続を受け入れることができる場所をApacheに伝えるのに役立ちます:-

<VirtualHost *:80>
     ServerName webserver
     ServerAlias localhost devserver development
     DocumentRoot /var/www/html
    <Directory  "/var/www/html">
        AllowOverride All

        Require local
        Require ip 192.168.3

    </Directory>
</VirtualHost>

これにより、Apache Require localを実行しているマシンおよびローカルネットワーク上の任意のIPアドレスRequire ip 192.168.3からのアクセスが許可されます。

また、UNIX上のApacheがデフォルトのドキュメントルートをどこに置くかはわかりませんが、3つのドメイン名をそのように異なるディレクトリに区別することは考えられるかもしれません。

<VirtualHost *:80>
     ServerName localhost
     ServerAlias localhost
     DocumentRoot /var/www/html
    <Directory  "/var/www/html">
        AllowOverride All

        Require local
        Require ip 192.168.3

    </Directory>
</VirtualHost>


<VirtualHost *:80>
     ServerName webserver
     ServerAlias webserver
     DocumentRoot /var/www/html/webserver
    <Directory  "/var/www/html/webserver">
        AllowOverride All

        Require local
        Require ip 192.168.3

    </Directory>
</VirtualHost>

<VirtualHost *:80>
     ServerName development
     ServerAlias development
     DocumentRoot /var/www/html/development
    <Directory  "/var/www/html/development">
        AllowOverride All

        Require local
        Require ip 192.168.3

    </Directory>
</VirtualHost>


<VirtualHost *:80>
     ServerName devserver
     ServerAlias devserver
     DocumentRoot /var/www/html/devserver
    <Directory  "/var/www/html/devserver">
        AllowOverride All

        Require local
        Require ip 192.168.3

    </Directory>
</VirtualHost>

次に、「Hello from Servername」という単純なhtmlファイルを各ディレクトリに配置し、各ファイルのservernameを変更して、正しいサーバーに到達したことを確認します。

RE:test1.phpを更新

Allow from all

LoadModule access_compat_module modules/mod_access_compat.soをロードしていない限り、Apache2.4構文も有効ではありません。

それでもそうあるべきです

Order Allow,Deny
Allow from all

したがって、Apacheを使用する2.4構文

Require all granted

怠惰なルートを取り、宇宙からのアクセスを許可したい場合。

2
RiggsFolly

jap1968 の投稿について詳しく説明すると、CentOS 7にはSELinuxお尻のレベルの痛みをenforcingに設定します。これにより、完全に通常のサービス構成がサイレントに失敗すると、あらゆる種類の混乱が発生します(Apache)。

SELinuxを無効にするには、次のことを行う必要があります。

0)[オプション]シェルをクラックして開いてルートになります...または、光沢のある新しい、非常に楽しい構成Sudoをお楽しみください「rootstuffs」プロジェクトを実行できるようにします。恐らく。

su -l

1)SELinuxの現在のステータスを取得します。 sestatusを実行します:

sestatus

2)SELinuxが脱毛と早期老化を引き起こしている場合は、次のようになります。

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

3)/etc/selinux/configファイルを編集します。 SELINUX=enforcingSELINUX=permissiveに変更します。これを行うと、次に再起動したときに無限の喜びが得られます。あなたはこのようなものになってしまうでしょう:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
# SELINUX=enforcing
# ===> VOODOO HERE <===
SELINUX=permissive
# ===> END VOODOO  <===
#
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

4)SELinuxを無効にします。この時点で再起動できますが、SELinuxに苦痛を与えないように指示する方が簡単です。 setenforceを実行して、SELinuxの強制レベルを/etc/selinux/configファイルと一致するようにリセットします。

setenforce 0

5)sestatusをもう一度確認します。

sestatus

すべてが期待どおりに進んだ場合、sestatusは次のようなものを返します。

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

6)再起動Apache。 vhostのドメイン名が作業中のサーバーに解決されている場合は、光沢のある新しい仮想ホストが表示されます。

# Restart Apache:
systemctl restart httpd.service

# Be lazy by checking your virtual Host from the command line:
curl www.example.com/new-file-that-only-exists-in-your-new-vhost.txt

6.5)ここで読むのをやめなさい。またはしないでください。私はあなたのお母さんではなく、掲示板の投稿です。

以下のすべては元の質問の範囲を超えており、実際にはSELinuxを有効にして実行する必要があるためのみ含まれています-)。

7)selinuxの再有効化に向けて取り組みます。 selinuxログを見て、素晴らしいアルファベットスープを確認することから始めます。

tail -f /var/log/audit/audit.log

8)機能の深さ、名前の悪いユーティリティの数の多さ、そしてSELinuxを構成する醜いUXの混乱に驚かされます。飛び込む前に、おそらく大きな男の子のズボンをはいて、コーヒーを一杯飲むべきです。ここにいくつかの情報があります:

6
perfectcu.be

SELinuxにも注意してください。デフォルト設定では、仮想ホストディレクトリにhttpdがアクセスできなくなります。適切なコンテキストを設定する必要があります。

# chcon -R -u system_u -r object_r -t httpd_sys_content_t <DocumentRoot>

もう1つのオプションは、SELinuxを無効にすることです。

3
jap1968