我有一些子域名,我想重定向到同一台服务器上的特定端口。假设我有
dev.mydomain.com
我想要dev.mydomain.com
透明地重定向到mydomain.com:8080
浏览器的url并且我想要保留原始子域名。
我该如何使用 Apache 2.2 来实现这一点?我的 Apache 2.2 在默认端口上运行80
。我不知道该如何写入配置才能实现这一点。
我已将dev.mydomain.com
DNS 解析设置为mydomain.com
。
这是针对具有不可路由 IP 地址的内部网开发服务器,因此我不太担心会危及面向公众的服务器的漏洞和安全性。
答案1
解决方案
在 Miles Erickson 的正确指引下,我最终想到了以下方法。我希望地址栏反映请求的原始子域/域,而不是重定向的服务器和端口,但他让我走上了正确的道路,使用 Google 搜索解决方案VirtualHost
,最终我找到了一个包括使用的解决方案mod_proxy
。
首先,确保mod_proxy
已启用:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo systemctl restart apache2
接下来,将以下内容添加到您的站点配置中(例如/etc/apache2/sites-available/000-default.conf
):
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName dev.mydomain.com
ProxyPreserveHost On
# setup the proxy
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://localhost:8888/
ProxyPassReverse / http://localhost:8888/
</VirtualHost>
答案2
在终端上运行以下行(正确指定您的域名和子域名)
sudo nano /etc/apache2/sites-available/subdomain.example.com.conf
粘贴以下代码并根据需要进行更改
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName subdomain.example.com
ServerAlias subdomain.example.com
ProxyRequests Off
#ProxyPass / http://localhost:8080/
<Location />
ProxyPreserveHost On
ProxyPass http://example.com:8080/
ProxyPassReverse http://example.com:8080/
</Location>
# Uncomment the line below if your site uses SSL.
#SSLProxyEngine On
</VirtualHost>
在终端上运行以下行(正确指定您的域名和子域名)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart
答案3
假设 dev.mydomain.com 可以解析为 mydomain.com 的 IP,您可以将以下内容添加到 httpd.conf:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName dev.mydomain.com
redirect / http://mydomain.com:8080/
</VirtualHost>
相关 Apache 文档:
- 基于名称的虚拟主机创建指南
- 核, 包括虚拟主机和名称虚拟主机
- 重定向
相关问题: 根据主机名进行 Apache 重定向
(注意:这个答案的原始版本错误地建议使用 RedirectMatch,正如@ChrisS 指出的那样,它无法解析 URL 的域部分。)
答案4
您正在寻找 mod_rewrite。这是 Apache 文档的链接其中包括许多例子基本的和先进的配置..
如果您无法自己解释文档,请尝试将其添加到 httpd.conf:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]
如果这还不够清楚,下面是一个例子链接至 mod_rewrite 初学者指南也。