我正在尝试在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://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被加载,但不工作,我错过了什么? 有关于此的任何帮助或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混乱。 你可能应该穿上你的大男孩裤子,在你潜入之前喝上一整壶咖啡。下面是一些信息: