Proxy all requests for subdomain to an ip via htaccess/apache
You need ProxyPassReverse
- it catches Location
fields in response headers and alters them so that the client will continue talking to the proxy, instead of the backend server.
ProxyPass
and ProxyPassReverse
cannot be in an .htaccess
file - so replace your current rewrite rule with this, which should go inside your <VirtualHost>
block for the subdomain:
ProxyPass / http://193.159.3.129/
ProxyPassReverse / http://193.159.3.129/
As an aside: do not use .htaccess
when you can avoid it. Review the Apache documentation on the matter.
In general, you should only use .htaccess files when you don't have access to the main server configuration file.
Related videos on Youtube
Christian
Updated on September 18, 2022Comments
-
Christian over 1 year
Let's say I have the following subdomain with its own document root etc:
monad2.mysite.com
I want that all requests are proxied to an IP (for instance
193.159.3.129
) but they must pass through the server atmysite.com
(assumingmonad2
is on this same server).I have the following (htaccess) config which works up to the subdomain, but fails to proxy any other request...
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://193.159.3.129/$1 [P]
My problem is that while it does work for
http://monad2.mysite.com/a.php
(url remains the same), it doesn't work with requests likehttp://monad2.mysite.com/a/b
(url is converted tohttp://193.159.3.129/a/b
). Note that the latter address shows a directory listing of the proxied server, which is correct, except that the subdomain changed to an ip.Also, I presume this system will definitely not work for HTTPS requests, correct?
Edit: After some more troubleshooting, I've found exactly when the problem is being caused. Whenever I try to access a directory without the final slash, the proxy fails, and I end up with an IP. Some example:
Original | Result --------------------------------+-------------------------------- http://monad2.mysite.com | http://monad2.mysite.com http://monad2.mysite.com/a/ | http://monad2.mysite.com/a/ http://monad2.mysite.com/a | http://193.159.3.129/a/ <- ! http://monad2.mysite.com/a.php | http://monad2.mysite.com/a.php
-
ravi yarlagadda about 12 yearsDo you have access to the actual Apache configuration, or just an htaccess file?
-
Christian about 12 years@ShaneMadden I have root access, but I kind of preferred using htaccess. I'm perfectly fine with an alternative solution though.
-
-
Christian about 12 yearsAh, tried that one but didn't work, probably because I tried it in the .htaccess. Regarding the 'not to use htaccess' part, though it is understandable, everyone knows that it is impractical.
.htaccess
are just so convenient. Heck, even I that know my own server better than anyone else will take me several minutes to find the right apache config file. That said, thanks a lot for your help...I'll reply soon when I get it working (or break everything up!) ;) -
Scott Pack about 12 yearsSounds like you need to do a better job of naming and/or organizing your configs.
-
Christian about 12 years@ScottPack Tell that to the guys creating CPanel :(
-
Christian about 12 yearsHmm, I noticed cookies fail to work. Any idea why?
-
Christian about 12 yearsOK, I've fixed it with this PHP code:
if($_SERVER['SERVER_NAME'] == '193.159.3.129')$_SERVER['SERVER_NAME'] = 'monad2.mysite.com';
any idea why Apache didn't proxy this value by itself?