如何将子域重定向到同一服务器上的不同端口?

80 linux subdomain apache-2.2 apache-2.4

我有一些子域要重定向到同一服务器上的特定端口。说我有

dev.mydomain.com 
Run Code Online (Sandbox Code Playgroud)

我想dev.mydomain.com透明地重定向到mydomain.com:8080浏览器的 url,我想保留原始子域名。

如何使用 Apache 2.2 执行此操作?我在默认端口上运行 Apache 2.2 80。我无法弄清楚要实现此目的的写入配置。

我已经设置dev.mydomain.com为在 DNS 中解析为mydomain.com.

这是针对具有不可路由 IP 地址的 Intranet 开发服务器,因此我不太担心会危及面向公众的服务器的漏洞利用和安全性。

小智 80

解决方案

在迈尔斯·埃里克森 (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
Run Code Online (Sandbox Code Playgroud)

接下来,将以下内容添加到您的站点配置中(例如,/etc/apache2/sites-available/000-default.conf):

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    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>
Run Code Online (Sandbox Code Playgroud)

  • 对于此答案不起作用的每个人,请记住,您必须启用 mods `mod_proxy` 和 `proxy_http`。 (9认同)

M.A*_*pon 14

在终端上运行以下行(正确指定您的域和子域名)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 
Run Code Online (Sandbox Code Playgroud)

粘贴以下代码并根据您的要求进行更改

<VirtualHost *:80>
        ServerAdmin admin@example.com
        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>
Run Code Online (Sandbox Code Playgroud)

在终端上运行以下几行(正确指定您的域和子域名)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

  • 这与接受的答案之间有什么本质区别吗? (4认同)
  • 更正注册子域`sudo a2ensite sub.yourdomain.com` (2认同)

Sky*_*awk 10

假设 dev.mydomain.com 可以解析为 mydomain.com 的 IP,您可以将以下内容添加到 httpd.conf:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

相关的 Apache 文档:

  1. 创建基于名称的虚拟主机指南
  2. 核心,包括VirtualHostNameVirtualHost
  3. 重定向

相关问题: 基于主机名的Apache重定向

(注意:这个答案的原始版本错误地建议使用 RedirectMatch,正如@ChrisS 帮助指出的那样,它无法解析 URL 的域部分。)


小智 5

在您的主要 vhost 配置中添加以下几行:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/
Run Code Online (Sandbox Code Playgroud)

请注意,这需要 Apache 上的 mod_proxy。

  • 根据他的 OP,他不想要重定向。他希望原始网址保留在地址栏中;这意味着使用 mod_proxy 或 mod_rewrite,你们最好避免使用 mod_rewrite。 (4认同)