Does Apache2 support virtual hosting of subdomains?

前端 未结 1 1658
死守一世寂寞
死守一世寂寞 2021-01-31 12:50

Currently my Apache server is set up like so


 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www


        
相关标签:
1条回答
  • 2021-01-31 13:27

    Using local measures only (/etc/hosts instead of a DNS) I found that this can indeed work.

    First, change your /etc/hosts file to have a mapping of your desired website name(s) (www.example.com), and target IP address (192.168.1.1). I used my local IP address.

     IPAddress               Hostname                   Alias
    -----------     --------------------------    ------------------
    192.168.1.1     www.example.com               example.com 
    192.168.1.1     www.john.example.com          john.example.com
    192.168.1.1     www.jane.example.com          jane.example.com
    

    Your web browser will check your /etc/hosts file before looking at the world wide web.

    Next go through all your Apache config files (httpd.conf, apache2.conf, ports.conf, conf.d/*) and make sure in exactly one file the command NameVirtualHost *:80 is issued (it doesn't have to be port :80 but if it is issued more than once, you will get this problem). Mine was issued in /etc/apache2/ports.conf, so put yours there if you have to. Finally, update your Apache configuration file (mine was at /etc/apache2/sites-available/default) like so.

    <VirtualHost *:80>
        ServerName www.example.com
        ServerAlias example.com
        DocumentRoot /var/www
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName www.john.example.com
        ServerAlias john.example.com
        DocumentRoot /var/www/john
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName www.jane.example.com
        ServerAlias jane.example.com
        DocumentRoot /var/www/jane
    </VirtualHost>
    

    As a final step, you may need to add the websites to Apache by issuing the below commands (this step is not necessary, if you give all websites into sites-available/default and not into separate files for individual websites).

    # a2ensite www.example.com
    # a2ensite www.john.example.com
    # a2ensite www.jane.example.com
    

    After doing this, john.example.com will go to /var/www/john. That directory will then act as the root directory, and john will no longer have access to www, and, therefore, have no access to /var/www/jane.

    Likewise, after doing this, jane.example.com will go to /var/www/jane. That directory will then act as the root directory, and jane will no longer have access to www, and, therefore, have no access to /var/www/john.

    With symbolic links turned off --by default-- neither directories will be able to access each other

    0 讨论(0)
提交回复
热议问题