httpd本地虚拟主机示例

时间:2017-07-05 20:28:23

标签: apache virtualhost httpd.conf

- 原帖---

我想设置一个dev env来玩一些apache功能。我在fedora上运行httpd。

我添加了托管本地重定向

# cat /etc/hosts
127.0.0.1 example1.com
127.0.0.1 example2.com

# cmkdir /var/www/example1;      echo "Hello from /var/www/example1/index.html" > /var/www/example1/index.html
# cmkdir /var/www/example2;      echo "Hello from /var/www/example2/index.html" > /var/www/example2/index.html
# cmkdir /var/www/example2/sub ; echo "Hello from /var/www/example2/sub/index.html" > /var/www/example2/sub/index.html

# cvi /etc/httpd/conf/httpd.conf
<VirtualHost _default_:80>
    DocumentRoot "/var//www/html"
</VirtualHost>

<VirtualHost 127.0.0.1:80>
    DocumentRoot "/var/www/example1"
    ServerName example1.com

</VirtualHost>

<VirtualHost 127.0.0.1:80>
    DocumentRoot "/var/www/example2"
    ServerName example2.com

</VirtualHost>

<VirtualHost 127.0.0.1:80>
    DocumentRoot "/var/www/example2/sub"
    ServerName sub.example2.com
    ServerPath "/sub/"
    RewriteEngine On
    RewriteRule "^(/sub/.*)" "/var/www/example2$1"

</VirtualHost>

# capachectl -t ; apachectl restart

# curl localhost
Hello from /var/www/html/index.html
# curl example1.com
Hello from /var/www/example1/index.html
# curl example2.com
Hello from /var/www/example2/index.html
# curl sub.example2.com
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
... ( lots of stuff different from the one i echoed) ...

如果我在本地firefox中执行相同操作 - localhost按预期工作,example1.com按预期工作,但sub.example2.com将我重定向到example2.com。

您能否帮我弄清楚如何配置本地子域?缺什么?根据{{​​3}},我相信我所做的是正确的。

- 编辑/更新---

如果我遵循以下Newbie的建议并仅更改重写规则,而不对上述设置进行任何其他更改:

    <VirtualHost 127.0.0.1:80>
        DocumentRoot "/var/www/example2/sub"
        ServerName sub.example2.com
        ServerPath "/sub/"
#        RewriteEngine On
#        RewriteRule "^(/sub/.*)" "/var/www/example2$1"

    </VirtualHost> 

我明白了:

# curl sub.example2.com
curl: (6) Could not resolve host: sub.example2.com

如果我

# cat /etc/hosts | grep sub
127.0.0.1 example2.com sub.example2.com

按预期工作

#curl example2.com
Hello from /var/www/example2/index.html
# curl sub.example2.com
Hello from /var/www/example2/sub/index.html

这似乎是奇怪的设置。我不想为每个子域创建/ etc / hosts记录......不应该只能通过httpd VirtualHost设置来处理这种情况,而不是在本地更改DNS设置甚至更糟 - 添加C记录在域的DNS中(如果不是localhost)?什么提示我做错了什么?如何在不修改DNS设置的情况下让sub.example1.com工作?

此致 帕维尔

3 个答案:

答案 0 :(得分:1)

我相信我找到了问题的答案......

**如何运行本地子域?**

/ etc / hosts不支持通配符(* .example2.com),例如,需要设置本地dns代理服务器,如dnsmasq。否则,出于开发目的,您必须在/ etc / hosts中逐个列出(然后维护:/)子域以用于本地开发目的。

如何通过域名的官方DNS记录运行子域?

似乎最懒的方法是设置DNS设置:

example2.com     A      the-server-IP
example2.com     MX 0   example2.com    
*.example2.com   CNAME  example2.com

期待您的意见,如果有更聪明的方法。 如果您同意这是要走的路 - 请接受答案,以便其他成员知道这是要走的路。

问候,帕维尔

答案 1 :(得分:0)

删除重写规则,它用于重定向,因此你有一个循环。

<VirtualHost 127.0.0.1:80> DocumentRoot "/var/www/example2/sub" ServerName sub.example2.com ServerPath "/sub/"

答案 2 :(得分:0)

如果您遇到问题,请告诉我。这个dns可以使用您的常规浏览,因为对于所有无法解析的名称,它将使用Google搜索并将其保存到文件中。

    install bind
apt-get install bind9 -y

cd /etc/bind

vim named.conf.options

And uncomment forwarders and two rows bellow and instead of 0.0.0.0 enter google's dns IP (8.8.8.8).

service bind9 restart

vim named.conf.options

zone "YOURDOMAIN NAME" {
        type master;
        file "db.site.com";
        notify yes;
        };

cp db.local /var/cache/bind/db.site.com
cd /var/cache/bind/
vim db.site.com

$TTL    604800
@       IN      SOA     admin. admin.itlink.edu. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
        IN NS ns.YOURDOMAINNAMEHERE.
        IN      A       192.168.1.10 replace this with the IP of your PC that has apache installed
ns      A       192.168.1.10 replace this with the IP of your PC that has apache installed
www     A       192.168.1.10 replace this with the IP of your PC that has 



service bind9 restart