web版apache常见问题之虚拟主机篇

1 提问:
<VirtualHost *:8080>
   DocumentRoot /var/www/vhost/
  Options   Indexes   MultiViews
</VirtualHost>
      Listen 8080
把8080改成其它端口都不行如:512 7000 7001.启动apache时报错, 请问是那里的问题,如何解决.谢谢各位!
                                                           
[root@fish etc]# /etc/init.d/httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: [Tue Jan 09 17:09:29 2007] [warn] The Alias directive in /etc/httpd/conf/httpd.conf at line 535 will probably never match because it overlaps an earlier AliasMatch.
(13)Permission denied: make_sock: could not bind to address [::]:7001
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]
回答:你linsten了7001端口吗?
答案:问题终于解决了,是selinux设置的问题, 把selinux给禁用了,然后重启就OK了!
vi /etc/selinux/config
#SELINUX=enforcing  把这行前加一个# .把它给屏蔽了
 
2 提问:
配置apache虚拟主机时,在servername 写的是www.abc.com,访问此网址没问题。
而当访问abc.com却指向了,apache默认的路径。
请问:如何让abc.com也指向www.abc.com这个虚拟主机的设置。
回答:
ServerAlias abc.com
注意在你的域名服务器上也把abc.com指过来
http://man.chinaunix.net/newsoft/ApacheManual/mod/core.html#serveralias
 
3 提问
如何暂停APACHE中的虚拟主机
回答:
1 把目录改名
2我都是将单独的虚拟主机用单独的conf文件。所以我只需要将对应的conf文件mv就好了。
3 chmod 000 /path to the docroot
 
4 提问
我是win2003+appserv 的环境.目前只做一个web的服务器,运行正常.现在想增加几个虚拟主机.
我的配置文件(原始状态)所有的行都是#开头,我知道#是注释的意思,但这里不可能所有语句都是注释吧,不解,所以我下面的几种情况都是因为这#引起的,请高手帮我指点:
222.73.*.*:80 表示我的主机地址
www.aaa.com 表示我的主网站
www.abc.net 表示我的虚拟主机一
www.abcdef.net 表示我的虚拟主机二
我按照下面语句,主网站正常,但所有虚拟网站都指向了主网站www.aaa.com.
#NameVirtualHost 222.73.*.*:80
<VirtualHost 222.73.*.*:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/
    ServerName www.aaa.com
    ErrorLog logs/www.54sy.com-error_log
    CustomLog logs/www.54sy.com-access_log common
</VirtualHost>
<VirtualHost 222.73.*.*:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/abc
    ServerName www.abc.net
    ErrorLog logs/xoops.54sy.com-error_log
    CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>
<VirtualHost 222.73.0.61:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/abcdef
    ServerName www.abcdef.net
    ErrorLog logs/xoops.54sy.com-error_log
    CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>
我按照下面语句,主网站不能访问,但所有虚拟网站都正常了
#NameVirtualHost 222.73.*.*:80
#<VirtualHost 222.73.*.*:80>
#    ServerAdmin abc@abc.com
#   DocumentRoot C:/AppServ/www/
#    ServerName www.aaa.com
#    ErrorLog logs/www.54sy.com-error_log
#    CustomLog logs/www.54sy.com-access_log common
# </VirtualHost>
<VirtualHost 222.73.*.*:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/abc
    ServerName www.abc.net
    ErrorLog logs/xoops.54sy.com-error_log
    CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>
<VirtualHost 222.73.0.61:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/abcdef
    ServerName www.abcdef.net
    ErrorLog logs/xoops.54sy.com-error_log
    CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>我去掉了下面语句中的#,如下,都正常了,谢谢各位大哥帮助
NameVirtualHost 222.73.*.*:80
<VirtualHost 222.73.*.*:80>
    ServerAdmin abc@abc.com
   DocumentRoot C:/AppServ/www/
    ServerName www.aaa.com
    ErrorLog logs/www.54sy.com-error_log
    CustomLog logs/www.54sy.com-access_log common
</VirtualHost>
<VirtualHost 222.73.*.*:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/abc
    ServerName www.abc.net
    ErrorLog logs/xoops.54sy.com-error_log
    CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>
<VirtualHost 222.73.*.*:80>
    ServerAdmin abc@abc.com
    DocumentRoot C:/AppServ/www/abcdef
    ServerName www.abcdef.net
    ErrorLog logs/xoops.54sy.com-error_log
    CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>

===========================================

提问
有一台机器(192.168.1.1)只为一个域名提供服务,设定虚拟主机
NameVirtualHost 192.168.1.1:80
<VirtualHost 192.168.1.1:80>
        ServerAdmin webmaster@mydomain.com
        ServerName www.mydomain.com
        DocumentRoot /home/www/apache
</VirtualHost>
这样使用 www.mydomain.com 可以访问 使用IP可以访问没问题,但是有一个人(我不认识他,他想用我的站点来给他的域名冲排名的)...他把 www.shitdomain.com DNS也解析到 192.168.1.1 这样是使用他的 www.shitdomain.com 也可以访问我的站点.,帮帮忙... 我现在只有在 www.mydomain.com 前面随便一个虚拟主机.这样 www.shitdomain.com 访问不到 www.mydomain.com了!
回答:
NameVirtualHost 192.168.1.1:80
<VirtualHost 192.168.1.1:80>
        ServerAdmin webmaster@mydomain.com
        ServerName 192.168.1.1
        DocumentRoot /dev/null
</VirtualHost>
<VirtualHost 192.168.1.1:80>
        ServerAdmin webmaster@mydomain.com
        ServerName www.mydomain.com
        DocumentRoot /home/www/apache
</VirtualHost>
6 提问
我apache中有两个虚拟主机 111.com 和 222.com
目前都能正常使用
111.com中可以解释php和html,这也是apache的主配置
222.com中我想让他只解释html,而不来解释php等,
请问要如何来设计和配置呢?
回答:
把解析php的配置仅仅放入需要解析的虚拟主机的配置段
呵呵~~~成功了,把这两条语句从主配置里禁用掉,放到你想让他生效的虚拟主机段中去就可以了
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
7 提问
我的主机上有两个基于域名的虚拟主机,我想实现如下功能:只能通过我限定的域名访问,不可以通过输入IP地址的方式访问,请问该如何做呢?谢谢。举例说明。新浪,用域名www.sina.com.cn可以访问,用地址http://218.57.9.53就不可以。我就是想实现这样的功能。
回答:我找到方法了,apache的配置文件认为如果找不到所对应的域名,就自动转交给第一个域名,所以我把第一个域名下放置一个错误页就ok了。
我的相关配置如下:
NameVirtualHost *
<VirtualHost *>
ServerName error.wework.cn
DocumentRoot /usr/local/ahache/htdocs/error
</VirtualHost>
<VirtualHost *>
ServerName bbs.wework.cn
ServerAlias bbs.wework.com.cn
DocumentRoot /usr/local/ahache/htdocs/bbs
</VirtualHost>
<VirtualHost *>
ServerName www.wework.cn
ServerAlias www.wework.com.cn wework.cn wework.com.cn
DocumentRoot /usr/local/ahache/htdocs/www
</VirtualHost>
提问
版本:Server version: Apache/2.2.4 (Unix)
httpd.conf 默认的,没怎么改,就去掉了Include conf/extra/httpd-vhosts.conf的注释
extra/httpd-vhosts.conf内容:
NameVirtualHost *:80
<VirtualHost *:80>
  DocumentRoot /usr/local/apache2/htdocs
  Servername www.123.com
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@ncxxy.com
    DocumentRoot /root/a/
    ServerName www.ncxxy.com
    <Directory /root/a>
      Options FollowSymLinks
      AllowOverride None
      Order Allow,Deny
      Allow from all
   </Directory>
   DirectoryIndex a.html
</VirtualHost>
默认域为123.com,所以在这里建了一个123.com的虚拟主机
ncxxy.com为另外一个虚拟主机,目录在/root/a下
在客户机上hosts文件添加了www.ncxxy.com ip
访问出现403错误
请问还有什么地方没有注意到的吗?
回答:
1  http.conf里找
<Directory />
看有没有deny from all
2 果然,我把/root/a 换到了/home下,可以访问了
提问
我在APACHE中配置了基于IP的虚拟主机,希望通过输入IP地址就能访问PERL CGI,而不必输入一长串IP/cgi-bin/dir/index.pl来访问.但当我配好后打开网页访问时,网页上将我程序的代码都显示出来了, #/usr/bin/perl use strict; use warnings;....等等.
我的虚拟主机配置块是:
<VirtualHost 10.0.0.147:80>
        DocumentRoot /usr/local/apache2/cgi-bin/dir
        ServerName www.dir.com.cn
        ErrorLog logs/dir-error_log
        CustomLog logs/dir-access_log common
</VirtualHost>
其他地方没修改,请问是哪儿的问题?请各位赐教!!
回答:
Apache没有被正确配置以执行CGI程序
要让CGI程序能正常运作,必须配置Apache以允许CGI的执行,其方法有多种。
ScriptAlias
ScriptAlias指令使Apache允许执行一个特定目录中的CGI程序。当客户端请求此特定目录中的资源时,Apache假定其中文件都是CGI程序并试图运行。
ScriptAlias指令形如:
ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
如果Apache被安装到默认的位置,默认的配置文件httpd.conf中则会有上述配置。ScriptAlias指令定义了映射到一个特定目录的URL前缀,与Alias指令非常相似,两者一般都用于指定位于DocumentRoot目录以外的目录,其区别是ScriptAlias又多了一层含义,即其URL前缀中任何文件都被视为CGI程序。所以,上述例子会指示Apache,/cgi-bin/应该指向/usr/local/apache/cgi-bin/目录,且视之为CGI程序。
举例,如果有URL为http://www.example.com/cgi-bin/test.pl的请求,Apache会试图执行/usr/local/apache/cgi-bin/test.pl文件并返回其输出。当然,这个文件必须存在而且可执行,并以特定的方法产生输出,否则Apache返回一个出错消息。
ScriptAlias目录以外的CGI
由于安全原因,CGI程序通常被限制在ScriptAlias指定的目录中,如此,管理员就可以严格地控制谁可以使用CGI程序。但是,如果采取了恰当的安全方法措施,则没有理由不允许其他目录中的CGI程序运行。比如,你可能希望用户在UserDir指定的宿主目录中存放页面,而他们有自己的CGI程序,但无权存取cgi-bin目录,这样,就产生了运行其他目录中CGI程序的需求。
用Options显式地允许CGI的执行
可以在主服务器配置文件中,使用Options指令显式地允许特定目录中CGI的执行:
<Directory /usr/local/apache/htdocs/somedir>
Options +ExecCGI
</Directory>
上述指令使Apache允许CGI文件的执行。另外,还必须告诉服务器哪些文件是CGI文件。下面的AddHandler指令告诉服务器所有带有cgi或pl后缀的文件是CGI程序:
AddHandler cgi-script cgi pl
.htaccess文件
.htaccess文件是针对目录进行配置的一种方法。Apache在提供一个资源时,会在此资源所在目录中寻找.htaccess文件,如果有,则使其中的指令生效。AllowOverride 指令决定了.htaccess文件是否有效,它指定了哪些指令可以出现在其中,或者根本不允许使用。为此,需要在主服务器配置中如此配置:
AllowOverride Options
在.htaccess文件中,需要如此配置:
Options +ExecCGI
以使Apache允许此目录中CGI程序的执行。
提问:
的虚拟主机是基于域名的,我在主配置文件里的设置如下
NameVirtualHost 192.168.1.239
<VirtualHost apache.send.com>
   ServerName apache.send.com:80
   DocumentRoot /www/send.com
</VirtualHost>
<VirtualHost apache.sendmail.com>
   ServerName apache.sendmail.com:80
   DocumentRoot /www/sendmail.com
</VirtualHost>
同时我还定义了默认的文件查找名,如下:
DirectoryIndex index.html long.html yang.html
以前我在/var/www/html/里定义了默认的index.html,我把/conf.d/下的welcome.conf也删掉了
我的默认主机域名是apache.mail.com
然后我在相应的/www/下都建立好了目录和文件,最后我用http://apache.mail.com的时候却跳到apache.send.com里的页面去了,
到今天我还是没解决掉,请高手指点,谢谢!!
回答:
NameVirtualHost 192.168.1.239
<VirtualHost *:80>
   ServerName apache.send.com
   DocumentRoot /www/send.com
</VirtualHost>
<VirtualHost *:80>
   ServerName apache.sendmail.com
   DocumentRoot /www/sendmail.com
</VirtualHost>
提问
AS4 平台使用tar包安装apache2.2.2,编译命令为:
./configure --prefix=/usr/local/apache --enable-so
安装成功后,可以正常访问定义在httpd.conf里面的网页(DoumentRoot)
修改httpd.conf里面的
# Virtual hosts
Include conf/extra/httpd-vhosts.conf拟实现虚拟基于名称的虚拟主机功能,但IE访问怎么也定位不到httpd-vhost.conf控制文件里定义的目录,
请问在开启虚拟主机功能,还需要做什么?谢谢.
httpd-vhosts.conf文件内容如下:
NameVirtualHost *:80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
    ServerAdmin webmaster@mail.njqlx.com
    DocumentRoot /data/mail
    ServerName mail.njqlx.com
    ServerAlias mail.njqlx.com
    ErrorLog logs/mail.njqlx.com-error_log
    CustomLog logs/mail.njqlx.com-access_log common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@cms.njqlx.com
    DocumentRoot /data/cms
    ServerName cms.njqlx.com
    ErrorLog logs/cms.njqlx.com-error_log
    CustomLog logs/cms.njqlx.com-access_log common
</VirtualHost>
感觉像是vhost不起作用一样
回答:
Include 后面用绝对路径
eg.
Include /usr/local/apache2/conf/extra/httpd-vhosts.conf

=======================================

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值