因为换了工作现在公司缺人,不得不重入一线干起技术开发的工作,公司没有运维人员所以我来兼职。为了节约云服务器的租用费,我准备在正式环境上再部署一套测环
境,这也是暂时的先过过渡。于是上网查阅apache配置虚拟主机的相关资料,各种资料众说纷纭,搞了半天也没成功,正式环境总是提示403 accescc forbidden。就在我快放
弃,准备再购置一套云服务器的时候,终于成功了。下面我就把我的配置过程和所遇到的坑记录下来,做一份备忘录。
我准备以test.XXXX.com做为测试环境的域名,首先我进入域名服务商的页面新增了一个域名解析test,IP还是指向正式环境的IP,因为测试环境也在同一台服务器上嘛,
作完这一步后才正式开始配置apache的虚拟主机。查看网上资料大都直接写明需要在httpd.conf文件中去掉 Include "conf/extra/httpd-vhosts.conf"前面的注释,表示
开启虚拟主机。但是并没有说明在httpd.conf中配置的相关信息和httdp-vhost.conf中配置的相关信息有什么联系,例如如果本来在httpd.conf中就配置
了正式环境的根目录,相关权限,那么如果开启了虚拟主机的配置文件,到底是只需要配置其他你需要的其他端口或者域名的虚拟主机还是也要把在
httpd.conf中配置的信息也要写入到httpd-vhosts.conf中呢?为了尽快搞定,带着疑问我开始配置httpd-vhost.conf文件。
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host3.example.com
DocumentRoot "我的代码目录"
ServerName test.XXX.com
ErrorLog "logs/dummy-host3.example.com-error_log"
CustomLog "logs/dummy-host3.example.com-access_log" common
</VirtualHost>
保存退出,重启apache。访问正式环境出现报错:403 accescc forbidden。测试环境是好的。再次网上找资料,说是缺少权限相关的配置项,于是重新配置如下:
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host3.example.com
DocumentRoot "我的代码目录"
ServerName test.XXX.com
ErrorLog "logs/dummy-host3.example.com-error_log"
CustomLog "logs/dummy-host3.example.com-access_log" common
<Directory "我的代码目录">
Options Indexes FollowSymLinks
AllowOverride All
Allow from all
Order allow,deny
</Directory>
</VirtualHost>
保存退出,重启apache,问题照旧。比较抓狂了,上网搜索,又有说是因为apache2.4的配置和apache2.2的关于权限的配置写法不一样,我的apache是2.4版本的,配置文件写
法应该是
<Directory "我的代码目录">
Options Indexes FollowSymlinks
AllowOverride All
Require all granted
</Directory>
保存退出,重启apache,依然报同样的错。快疯了,搞了半天了,没有解决问题啊。于是我想是不是httpd.conf里面的配置应该再放一份到httpd-vhost.conf中去呢,并且根据网
上的资料,我把权限相关的配置项从虚拟主机的配置项中提了出来,我想只要目录是我正式环境和测试环境的上级目录的话,应该可以管到他们两的,于是配置又变成了:
<Directory "/opt/lampp/htdocs">
Options Indexes FollowSymlinks
AllowOverride All
Require all granted
</Directory>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host3.example.com
DocumentRoot "/opt/lampp/htdocs/weizeto_test"
ServerName test.weizeto.com
ErrorLog "logs/dummy-host3.example.com-error_log"
CustomLog "logs/dummy-host3.example.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host4.example.com
DocumentRoot "/opt/lampp/htdocs/weizeto"
ServerName www.weizeto.com
ErrorLog "logs/dummy-host4.example.com-error_log"
CustomLog "logs/dummy-host4.example.com-access_log" common
</VirtualHost>
保存退出,重启apache,终于OK了!!!正式环境和测试环境都可以正常访问了。
总结一下:
1.如果开启了虚拟主机的配置文件,也就是在httpd.conf中去掉了 Include "conf/extra/httpd-vhosts.conf"前面的注释的话,一定要在httpd-vhost.conf中写上权限
的配置项,否则会导致你的localhost也就是初始配置的根目录下的站点出现403,没权限访问的报错。
2.除了在httpd-vhost.conf中配置你想新增的站点外,还要把在httpd.conf中的初始配置站点,新增在httpd-vhost.conf中。
3.如果你所有站点的路径到在htdocs下面,那可以在httpd-vhost.conf中统一写一份权限配置项,只要保证路径是你所有站点的上级目录,不用在每个
virtualhost配置中都去写一份权限配置项。
4.请检查你的apache版本,2.2和2.4的权限配置写法是不一样的。
2.2的如下:
Options Indexes FollowSymLinks
AllowOverride All
Allow from all
Order allow,deny
2.4的如下:
Options Indexes FollowSymlinks
AllowOverride All
Require all granted
最后再说一句,搞开发遇到的问题,无论是代码上的还是配置上的或者数据库等等到后面都是可以解决的,只要你真的想解决它,一定要有这个信心。