Edgar Martínez
Edgar Martínez

Reputation: 33

Apache Reverse Proxy configuration - Subdomains

I am trying to configure an Apache server to have 2 subdomains making use of a reverse proxy. I am able to redirect traffic to the first subdomain (first.example.com) and retrieve content from the https site successfully. However, whenever I try to access the second subdomain I end up getting content from the first, and since routes don't match my local website, I get a not found page.

I would like to know what can I adjust from my current configuration so I can get content from my localhost site to.

Here is my current configuration:

<Proxy *>
Require all granted
</Proxy>

SSLProxyEngine On
ProxyRequests Off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLInsecureRenegotiation on
SSLProxyVerify none
SSLVerifyClient none
SSLProxyCheckPeerName off

<VirtualHost first.example.com:80>
    ServerName first.example.com
    ProxyPass /first https://stackoverflow.com
    ProxyPassReverse /first https://stackoverflow.com
    ProxyPassMatch ^/(.*)$ https://stackoverflow.com/$1

</VirtualHost>

<VirtualHost second.example.com:80>
    ServerName second.example.com
    ProxyPass /site http://localhost/site
    ProxyPassReverse /site http://localhost/site
    ProxyPassMatch ^/(.*)$ http://localhost/site/$1
</VirtualHost>

Thank you very much in advance!

Best Regards!

Edgar Martínez.

Upvotes: 3

Views: 7752

Answers (1)

Grumpy
Grumpy

Reputation: 1478

Your current configuration is conflicting with itself. ProxyPass and ProxyPassMatch does the same thing (in regex) but you declared it both with different rules.

ProxyPass /site http://localhost/site

Rule says: anyone that visits http://second.example.com/site will be fed content from http://localhost/site. If you visit http://second.example.com/foo, you get nothing.

The match line

ProxyPassMatch ^/(.*)$ http://localhost/site/$1

Rule says: Anyone that visits http://second.example.com/site will be fed content from http://localhost/site/site. If you visit http://second.example.com/foo, you get http://localhost/site/foo.

If you use the Match version (regex), you're also out of luck for the reverse rule which doesn't have a regex version. Though, I'm not certain you actually need the reverse rule.

As to why your second request got result from the first... I have no idea.

Upvotes: 4

Related Questions