2014-09-01 17 views
6

Ich versuche einige VH in Apache 2.4.6 auf CentOS 7 einzurichten, aber ohne Erfolg, da es nicht funktioniert. Dies ist, was ich bis jetzt ausprobiert habe:VirtualHost funktioniert nicht unter Apache 2.4.6 auf CentOS 7

  • Da in /etc/httpd/conf/httpd.conf diese Linie Include conf.modules.d/*.conf dann erstelle ich eine Datei unter /etc/httpd/conf.d/vhost.conf und legen Sie diese im Inneren:

    NameVirtualHost *:80 
    
    <VirtualHost *:80> 
        ServerName webserver 
        ServerAlias localhost devserver development 
        DocumentRoot /var/www/html 
    </VirtualHost> 
    
  • Reload/Neu starten Apache-Dienst (versucht, beide):

    service httpd reload|restart 
    
  • Auf Windows-Seite bearbeiten Sie die Datei C:\Windows\system32\drivers\etc\hosts und diese Zeile hinzufügen:

    192.168.3.131 webserver localhost devserver development # this is the IP of Apache Server 
    
  • Öffnen Sie den Browser und versucht: http://webserver, http://devserver und beide geht Apache Seite auf Standardeinstellungen so VH nicht funktioniert.

  • Legen Sie eine Datei unter /var/www/html/index.php mit dieser Zeilen <?php phpinfo(); ?> nur zu wissen, welche Lade Apache-Module ist, dies ist das Ergebnis:

    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 
    

Und anscheinend ist mod_vhost geladen, aber nicht funktioniert, habe ich vermisse irgendwas? Irgendwelche Hilfe oder Ratschläge dazu? Vielleicht habe ich vergessen, etwas, aber ich lese docs Apache und nicht etwas hilfreich

-Update gefunden: test1

Ich habe einige Änderungen an VH Definition und nun das ist, was ich habe:

<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> 

Aber ich bin ein

Verboten Verboten bekommen

Sie sind nicht berechtigt, auf diesem Server auf /index.php zuzugreifen.

Was fehlt hier?

Antwort

2

Ein paar Dinge, die Sie Probleme verursachen können: -

NameVirtualHost *:80 

ist nicht mehr eine gültige Syntax für Apache 2.4.x Sie es vollständig entfernen sollte.

Auf der Seite von Windows, wenn Sie die HOSTS-Datei geändert haben, müssen Sie die DNS Client service neu zu laden, also entweder neu starten oder besser noch, starten Sie ein Befehlsfenster mit „Ausführen als Administrator“ und dies tut: -

net stop dnscache 
net start dnscache 

Schließlich innerhalb Ihrer virtuellen Hosts Definition, wird es helfen, von apache zu sagen, wo es erlaubt ist, wie so Verbindungen zu diesem virtuellen Host zu übernehmen: -

<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> 

dieser Zugang von der Maschine apache laufen lassen werden Require local und von jeder IP-Adresse im lokalen Netzwerk Require ip 192.168.3

Auch ich bin nicht sicher, wo Apache auf Unix seine Standard root setzt aber es könnte eine Idee sein, Ihre 3-Domänennamen zu verschiedenen Verzeichnissen zu unterscheiden wie so

<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> 

Dann legen Sie eine einfache HTML-Datei in jedem Verzeichnis sagen "Hallo von Server" und ändern Servername in jeder Datei, so dass Sie wissen, dass Sie auf den richtigen Server haben.

RE: Update test1.php

Allow from all 

nicht gültig ist Apache 2.4 Syntax entweder, es sei denn, Sie LoadModule access_compat_module modules/mod_access_compat.so

Selbst geladen haben, dann sollte es

Order Allow,Deny 
Allow from all 

werden, so USE Apache 2.4 Syntax

Require all granted 

Wenn Sie die faule Route nehmen und den Zugriff aus dem Universum zulassen möchten.

+0

Ich habe die ServerAlias-Direktive entfernt und lasse nur den Servernamen nur für den Test übrig, wenn das das Problem ist und nicht. Ich habe die NameVirtualHost-Direktive entfernt und das ist auch nicht das Problem.Apache in CentOS und anderen RHEL-basierten Distributionen setzen DocumentRoot auf '/ var/www/html', also direkt in der VH-Konfiguration. Schließlich nach dem Test in Windows mit beiden Befehl Sie links Ich habe versucht, diese auch zu "ipconfig/flushdns", aber den Zugriff auf "Webserver" bringt mich zu den Standard "Willkommen" – ReynierPM

+0

Ja, aber mein Punkt war, dass Sie alle 3 der Domain-Namen zu dem '/ var/www/html', also SOLLTEN sie alle zum selben virtuellen Wirt gehen, der der selbe Ort als dein Standard localhost Standort ist. Woher weißt du, ob die Virtual Host-Definition funktioniert? Also, wenn Sie 3 verschiedene VHOST erstellen, die alle auf ein anderes Verzeichnis zeigen, werden Sie wissen, welche tatsächlich funktionieren und welche nicht. – RiggsFolly

+0

Nun meine Logik sagt, wenn alle drei Domänen auf die gleiche Adresse zeigen und diese Adresse eine 'index.php' Datei hat, wenn ich Webserver oder localhost oder devserver any sollte die Indexseite anzeigen oder nicht? Vielleicht liege ich falsch, gerade jetzt habe ich ein anderes Problem und ich denke, das ist das Problem, hier ist die Nachricht, die ich bekam Unbekannter Authz Provider: 192.168.3' – ReynierPM

3

Seien Sie vorsichtig mit SELinux. Die Standardkonfiguration verhindert, dass auf die Verzeichnisse der virtuellen Hosts von httpd zugegriffen wird. Sie müssen den entsprechenden Kontext festlegen:

Eine andere Option ist nur, SELinux zu deaktivieren.

4

Um näher auf jap1968 's Post, CentOS 7 kommt mit SELinux' s Schmerz im Hintern Ebene enforcing gesetzt. Dies führt zu allen Arten von Verwirrung, wenn die normale Konfiguration des Dienstes stillschweigend fehlschlägt (Apache).

SELinux So deaktivieren Sie brauchen:

0) [optional] Riss eine Shell und ich als root öffnen ... oder einen glänzenden neuen, super Spaß genießen, Konfiguration sudo zu Lass dich "root stuffs" -Projekt machen. Wahrscheinlich.

su -l 

1) Holen Sie sich den aktuellen Status von SELinux. sestatus Run:

sestatus 

2) Wenn SELinux wird verursacht Haarausfall und vorzeitiges Altern Sie so etwas wie dieses:

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) Bearbeiten Sie die Datei /etc/selinux/config. Ändern Sie SELINUX=enforcing zu SELINUX=permissive. Auf diese Weise können Sie beim nächsten Neustart für endlose Freude sorgen. Sie werden mit etwas am Ende wie folgt:

# 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) Deaktivieren SELinux. Sie können an dieser Stelle neu starten, aber es ist einfacher zu sagen SELinux, um sich von der Quälerei zu befreien. Führen Sie setenforce SELinux der Durchsetzung Ebene zum Zurücksetzen des /etc/selinux/config Datei übereinstimmen:

setenforce 0 

5) prüfen sestatus wieder:

sestatus 

Wenn alles wie sestatus ging erwartet wird in etwa so zurück:

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) Neustart Apache. Wenn Ihr vHost Domain-Namen auf dem Server Lösung arbeiten Sie auf Sie Ihre glänzenden neuen virtuellen Host sehen:

# 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) Halten Sie hier lesen. Oder nicht. Ich bin ein Forum, nicht deine Mutter.

Alles unter sprengt den Rahmen der ursprünglichen Frage und nur aufgenommen, weil Sie sollten wirklich mit SELinux aktiviert ausgeführt werden.

7) Arbeiten Sie wieder in Richtung selinux. Beginnen Sie, indem Sie die SELinux-Protokolle beobachten einige tolle Buchstabensuppe zu sehen:

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

8) Seien Sie in der Tiefe von Funktionen erstaunt, verrückt Anzahl von schlecht genannt Dienstprogramme und hässlich UX Chaos, das SELinux darstellt. Sie sollten wahrscheinlich auf Ihre großen Jungen Hosen angezogen und eine ganze Kanne Kaffee trinken, bevor Sie tauchen hier etwas. Info:

Verwandte Themen