VirtualHost在CentOS 7上不能在Apache 2.4.6下运行

我正在尝试在CentOS 7上的Apache 2.4.6中设置一些VH,但没有成功,因为它不工作。 这是我迄今为止所尝试的:

  • 因为在/etc/httpd/conf/httpd.conf是这一行Include conf.modules.d/*.conf然后我在/etc/httpd/conf.d/vhost.conf文件中创build一个文件并把它放在里面:

     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://webserverhttp://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被加载,但不工作,我错过了什么? 有关于此的任何帮助或build议? 也许我忘了一些东西,但我读了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禁止

被禁止

您无权访问此服务器上的/index.php。

什么在这里失败?

一些可能会导致你的问题的事情: –

 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> 

然后把一个简单的html文件放在每个目录中,说'你好从服务器名',并改变每个文件中的服务器名,所以你知道你有正确的服务器。

RE:更新test1.php

 Allow from all 

也不是有效的Apache 2.4语法,除非你已经加载了Loadmodulee access_compat_module modules/mod_access_compat.so

即使这样,它应该是

 Order Allow,Deny Allow from all 

所以使用Apache 2.4语法

 Require all granted 

如果你想采取懒惰的路线,并允许从宇宙访问。

还要小心SELinux。 默认配置将阻止您的虚拟主机目录被httpd访问。 您将需要设置适当的上下文:

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

另一个选择是只是禁用SELinux。

为了详细阐述jap1968的帖子, CentOS 7带来了SELinux在设定enforcing的痛苦。 当完全正常的服务配置默默地失败( Apache )时,这导致各种各样的混乱。

要禁用SELinux,您需要:

0) [可选]破解打开一个shell并成为root …或享受一个闪亮的新的,超级好玩的,配置sudo让你做“root stuffs”项目。 大概。

 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=enforcing更改为SELINUX=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 。 如果你的虚拟主机的域名解析到你正在使用的服务器上,你会看到你的虚拟主机:

 # 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混乱。 你可能应该穿上你的大男孩裤子,在你潜入之前喝上一整壶咖啡。下面是一些信息:

  • CentoOS简介 : https : //wiki.centos.org/HowTos/SELinux
  • 项目 : http : //selinuxproject.org/page/Main_Page