我们有一个运行Apache VirtualHost的NodeJS站点,如下所示:
<VirtualHost *:80>
ServerName domain.org
ServerAlias www.domain.org
ProxyPass / http://localhost:8884/
ProxyPassReverse / http://localhost:8884/
ProxyPreserveHost on
LogLevel debug
</VirtualHost>
这工作正常。
但是,我们现在的任务是安装WordPress博客作为域的别名。
www.domain.org/blog
为此,我们尝试设置一个带有如下别名的虚拟主机:
<VirtualHost *:80>
Alias /blog /var/apache-vhosts/www.domain.org-blog
<Directory /var/apache-vhosts/www.domain.org-blog/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我们启用了 mod_alias apache 模块,但它就是无法拾取它。
还有其他人做到了这一点吗?
我也尝试过包含没有 vhost 包装标签的别名,但仍然没有快乐:/
请注意,ProxyPass
优先于 Alias
。
要修复,请声明另一个指向感叹号 ( !
的ProxyPass
。
例如:
<VirtualHost *:80>
ServerName domain.org
ServerAlias www.domain.org
# the next line is your fix
ProxyPass /blog !
Alias /blog /var/apache-vhosts/www.domain.org-blog
<Directory /var/apache-vhosts/www.domain.org-blog/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://localhost:8884/
ProxyPassReverse / http://localhost:8884/
ProxyPreserveHost on
LogLevel debug
</VirtualHost>
您可以在官方ProxyPass
文档中找到更多信息:
! 指令在您不想反向代理子目录的情况下很有用― https://httpd.apache.org/docs/2.4/mod/mod_proxy.html