Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can ProxyPass and ProxyPassReverse work in htaccess?

I've never set up a proxy before. I'm using shared hosting, so to set Apache directives, I need to use .htaccess. Can I use .htaccess to do something like below? Any limitations?

ProxyRequests Off ProxyPass /img/ http://internal.example.com/img/ ProxyPass /app/ http://internal.example.com/app/  ProxyPassReverse / http://internal.example.com/ 
like image 349
Joe Fletcher Avatar asked Oct 09 '12 21:10

Joe Fletcher


People also ask

What is ProxyPass and ProxyPassReverse?

The "ProxyPass" and "ProxyPassReverse" parameters are used to tell Apache how to proxy requests. They require the "mod_proxy.so" and "mod_proxy_http.so" Apache modules, which are loaded by default in RHEL5 and RHEL6, but check the following lines are uncommented in the "/etc/httpd/conf/httpd. conf" file to make sure.

What is the use of ProxyPass?

ProxyPass is the main proxy configuration directive. In this case, it specifies that everything under the root URL ( / ) should be mapped to the backend server at the given address.

What is ProxyPreserveHost?

The ProxyPreserveHost directive is used to instruct Apache mod_proxy, when acting as a reverse proxy, to preserve and retain the original Host: header from the client browser when constructing the proxied request to send to the target server.


1 Answers

You cannot use a ProxyPass in an htaccess file. The documentation says it is only applicable in the context:

Context: server config, virtual host, directory

which excludes htaccess (you can't have a <Directory> block in htaccess). However, you can use a ProxyPassReverse to internally rewrite the Location field of proxied requests that cause a redirect. You'll just need to use mod_rewrite's P flag to proxy instead of ProxyPass. So something like:

RewriteEngine On RewriteRule ^/?img/(.*)$ http://internal.example.com/img/$1 [L,P] RewriteRule ^/?app/(.*)$ http://internal.example.com/app/$1 [L,P]  ProxyPassReverse / http://internal.example.com/ 

Just to be clear, you cannot use ProxyPass or ProxyPassReverse in the htaccess file, but you can use ProxyPassReverse with mod_rewrite rules that utilize the P flag.

like image 109
Jon Lin Avatar answered Sep 22 '22 16:09

Jon Lin