我正在运行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.com
来处理ProxyPass命令。 但是,它实际上影响所有其他域example.com
, other.example.com
。
我在这里错过了什么?
如果这就是ProxyPass的工作方式,有没有办法告诉它忽略物理文件和目录?
其他网站启用(只有一个网站运行ruby,其余的遵循第一种forms):
<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>
在VirtualHost
定义中使用FQDN 并不是最佳实践 ,它可能会导致这样的意外问题。 我猜测一些主机名在服务器内parsing为一个不同于发送请求的IP地址。 这可能会阻止Apache匹配正确的虚拟主机。
所以虚拟主机的定义可以如下改变,所有的虚拟主机,所以我们可以肯定Apache匹配正确的名称为基础的虚拟主机。
<VirtualHost *:80> or <VirtualHost [insert public IP here]:80>
还有一点需要注意的是,如果你想请求一个虚拟主机服务的example.com
而不是默认主机,你需要一个ServerAlias mydomain
指令。
本页面详细介绍了基于名称的虚拟主机是如何工作的 – http://httpd.apache.org/docs/current/vhosts/name-based.html
像这样调整你的configuration。 请注意我为VirtualHost
指令设置的通配符。 VirtualHost
指令是通配符( *
)的最佳实践。 此外,我设置了一个ServerAlias
以及间隔和格式化的configuration更容易可读性是谁debugging这样的问题很有帮助。 此外,我设置mod_proxy
configuration更贴近我喜欢用这个东西的标准公式。
另外,通过运行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>