为什么这个代理密码会影响所有域?

为什么这个代理密码会影响所有域?

我正在运行 Apache,并且在 Apache 中有一个如下所示.conf的文件。site-enabled

<Virtualhost blog.example.com:80>
  ServerName blog.example.com
  ServerAdmin [email protected]
  ProxyRequests Off
  ProxyPass        /phpmyadmin !
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>

如您所见,我只希望blog.example.comProxyPass 命令处理命中。然而,它实际上影响了所有其他域example.comother.example.com

我这里遗漏了什么吗?

如果 ProxyPass 的工作方式如此,那么有什么方法可以告诉它在检测到物理文件和目录时忽略它吗?

启用其他站点(只有一个站点在 ruby​​ 下运行,其余站点遵循第一种形式):

<VirtualHost other.example.com:80>
  ServerName other.example.com
  ServerAdmin [email protected]
  DocumentRoot /var/www/html/other
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


<Virtualhost other2.example.com:80>
  ServerName other2.example.com
  ServerAdmin [email protected]

  DocumentRoot /var/www/html/rails/other2/public
  <Directory /var/www/html/rails/other2/public>
  AllowOverride all
  Options -MultiViews
  Require all granted
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  PassengerUser www-data
  PassengerAppEnv production
  PassengerRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby
</Virtualhost>

答案1

这是不是最佳实践在定义中使用 FQDN VirtualHost,可能会导致此类意外问题。我猜想一些主机名在服务器内解析为与发送请求的 IP 地址不同的 IP 地址。这可能会阻止 Apache 匹配正确的虚拟主机。

因此,VirtualHost可以对所有虚拟主机进行如下定义更改,以便我们可以确保 Apache 匹配基于正确名称的虚拟主机。

<VirtualHost *:80> 
     or
<VirtualHost [insert public IP here]:80>

另一点需要注意的是,如果您希望example.com由默认主机以外的虚拟主机来处理请求,则需要一个ServerAlias mydomain指令。

本页详细介绍了基于名称的虚拟主机的工作原理——http://httpd.apache.org/docs/current/vhosts/name-based.html

答案2

像这样调整你的配置。注意我为VirtualHost指令。最佳做法是只使用通配符 ( *)VirtualHost指令。此外,我还设置了ServerAlias分隔和格式化配置,以便于阅读,这在调试此类问题时很有帮助。此外,我还将配置设置mod_proxy为更接近我喜欢用于此类内容的标准公式。

另外,通过运行检查虚拟主机设置的输出,sudo apachectl -S看看您能看到什么。

<Virtualhost *:80>

  ServerName blog.example.com
  ServerAlias blog.example.com
  ServerAdmin [email protected]

  <IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
      AddDefaultCharset off
      Order deny,allow
      Allow from all
    </Proxy>

    ProxyPass        /phpmyadmin !
    ProxyPass        /  http://localhost:2368/
    ProxyPassReverse /  http://localhost:2368/

  </IfModule>

</Virtualhost>

<VirtualHost *:80>

  ServerName other.example.com
  ServerAlias other.example.com
  ServerAdmin [email protected]

  DocumentRoot /var/www/html/other

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

<Virtualhost *:80>

  ServerName other2.example.com
  ServerAlias other2.example.com
  ServerAdmin [email protected]

  DocumentRoot /var/www/html/rails/other2/public

  <Directory /var/www/html/rails/other2/public>
    AllowOverride all
    Options -MultiViews
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  PassengerUser www-data
  PassengerAppEnv production
  PassengerRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby

</Virtualhost>

相关内容