【问题标题】:Apache - Configure hundreds of similar sites without specifying each oneApache - 配置数百个类似站点,无需指定每个站点
【发布时间】:2019-06-22 11:30:06
【问题描述】:

假设我在磁盘上有这个文件夹结构:

/var/www/site1.domain.com
/var/www/site2.domain.com
/var/www/site3.domain.com
/var/www/site4.domain.com
/var/www/site5.anotherdomain.com
/var/www/site6.anotherdomain.com
/var/www/site7.anotherdomain.com
/var/www/site8.anotherdomain.com

这些都是类似的普通 html/css/js 网站,配置方式完全相同。

是否可以设置 apache,将每个域的传入请求定向到适当的目录,而无需配置数百个 <VirtualHost..> 节点?我想我可以自动生成它们,但我希望能在请求的域的文件夹类型的配置中进行花哨的查看..

这可能吗?即使有可能,这种安全性或其他方面是否存在任何问题?

如果不可能,是否有另一种网络技术(例如 nginx)可以做到这一点?

【问题讨论】:

  • 对你来说简单吗? :) 我试图通过添加一个包含正确文件的新目录来创建一个新站点

标签: apache virtualhost


【解决方案1】:

使用 nginx 超级简单:

location / {
    root /var/www/$host;
}

加上 nginx 的速度非常快。如果你想坚持使用 Apache,你应该阅读这个:https://httpd.apache.org/docs/2.4/vhosts/mass.html

【讨论】:

    【解决方案2】:

    是的,存在安全和其他问题。每个站点最好有一个虚拟主机,具有单独的日志记录和单独的 SSL 证书等。

    如果它们是不同的站点,最好将它们分开,因为:

    • 更容易为每个人设置一个日志文件
    • 如果使用不同的域,则更容易为 HTTPS 配置 SSL 证书。
    • 请记住,用户可以轻松修改 $host 标头,因此如果有一天您创建目录:/var/www/site1.domain.com-backup/var/www/secret-logs 可以访问它们。
    • 按站点监控。
    • 如果有一天您需要对某些站点进行特殊配置,设置基本身份验证,更改某些参数等。您可以使用不同的虚拟主机。将它们全部混合起来既困难又肮脏。

    最好自动生成它们。您可以使用许多模板工具,从接受环境变量上的一些参数的简单 bash 脚本到更复杂的工具,如 SaltStack / Ansible。

    这里有一个简单的 bash 脚本来做,它应该适合你的需要:

    #!/bin/bash                     
    
    cat << EOF > /etc/nginx/sites-available/$SERVER_NAME.conf
    server {                        
        listen 80;                  
        server_name $SERVER_NAME $ADDITIONAL_SERVER_NAMES;
    
        access_log /var/log/nginx/$SERVER_NAME-access.log;
        error_log /var/log/nginx/$SEVER_NAME-error.log;
    
        location / {                
            root /var/www/$SERVER_NAME;
        }                           
    }                               
    EOF                             
    
    # Enable config on nginx        
    ln -s /etc/nginx/sites-available/$SERVER_NAME.conf /etc/nginx/sites-enabled
    
    # Test configration and apply if no errors                                                                                                                                                                                                                    
    nginx -t && service nginx reload
    

    要执行脚本名称为nginx-site-generator,授予执行权限并:

     SERVER_NAME=site1.com ADDITIONAL_SERVER_NAMES=www.site1.com ./nginx-site-generator
    

    【讨论】:

      【解决方案3】:

      原来有一个 apache 模块可以解决这个问题:

      sudo a2enmod vhost_alias
      

      在此处阅读有关该模块的更多信息:

      http://httpd.apache.org/docs/2.4/mod/mod_vhost_alias.html

      这是对我有用的配置:

      #Define SNAME 999
      
      <VirtualHost *:80>
              ServerAdmin webmaster@localhost
              ServerName domainname.com
              ServerAlias *.domainname.com
      
          VirtualDocumentRoot /var/www/domainname.com/%0
      
          #RewriteEngine on
      
              #This sets the variable to env:
              #RewriteRule .* - [E=SNAME:%{SERVER_NAME}]
      
              ErrorLog ${APACHE_LOG_DIR}/domainname.com.error.log
      
              # Possible values include: debug, info, notice, warn, error, crit,
              # alert, emerg.
              LogLevel debug
      
              CustomLog ${APACHE_LOG_DIR}/domainname.com.access.log combined
      
      
      </VirtualHost>
      

      【讨论】:

        猜你喜欢
        • 2013-10-10
        • 2021-12-03
        • 1970-01-01
        • 2019-07-07
        • 1970-01-01
        • 2016-07-11
        • 2017-12-04
        • 2015-07-29
        • 2010-12-28
        相关资源
        最近更新 更多