Using Apache Virtual Hosts and ProxyPass Together



Using Apache Virtual Hosts and ProxyPass Together

I recently ran into a situation where I had a server with Apache on it that was already hosting a few PHP sites using VirtualHost mappings, but I now wanted to add a new Tomcat-hosted site to the same machine.

In a way, what I wanted was to setup a new VirtualHost entry on Apache to handle the new domain but also make use of the ProxyPass and ProxyReversePass directives to have Apache transparently pass-through traffic from the VirtualHost domain to Tomcat running in the background on some non-conflicting port, like port 80.

At first I didn't know how to approach this problem; the Googling I was doing was showing me how to use the VirtualHost directive (which I already had a few of) or the ProxyPass/ProxyPassReverse… but not both together.

I thought maybe what I was trying to do didn't make sense, until I came across an article on the Atlassian website for suggestions on how to setup one of their products.

It seems that in order to use both of these constructs together in Apache, it's as straight forward as you might think… you simply put your ProxyPass and ProxyPassReverse mappings inside your VirtualHost declaration, like so:

<VirtualHost *:80>      ServerAdmin john@doe.com      ServerName <my domain>.com      ServerAlias www.<my domain>.com      ProxyPass / http://localhost:8080/<web-app context root>/      ProxyPassReverse / http://localhost:8080/<web-app context root>/      ErrorLog logs/<my domain>.com-error_log      CustomLog logs/<my domain>.com-access_log combined  </VirtualHost>

NOTE: Don't forget the trailing / at the end of the mapped URL for ProxyPass and ProxyPassReverse; otherwise your traffic will get redirected to invalid URLs like http://mydomain.comblahblah, instead of /blahblah.

Notice the ProxyPass mappings to the root (/) which is safe to do since it's occuring inside the VirtualHost. Very cool trick and I owe thanks to Marc Chung of OpenRain getting me started down the right Apache-directive-path when I began researching this.

Update #1: User G. Gibson noted that using the settings above didn't work for him and he had to modify them slightly, in case any other readers are running into this hickup, here are the settings G. Gibson used (thanks G!):

RewriteEngine on  # Tomcat rewrite rule – as route  RewriteCond %{REQUEST_URI} /tomcatAppName*  RewriteRule ^(/.*)$ http://localhost:8080$1 [P]  ProxyPassReverse / http://localhost:8080/  # Rails Server  ServerName myFunkyServer.myDomain.net  ServerAlias http://www.myFunkyServer.myDomain.net  DocumentRoot /path/to/railsapp/public  ServerAdmin admin@myDomain.net  LogLevel warn  ErrorLog /path/to/railsapp/logs/error.log  CustomLog /path/to/railsapp/logs/access.log combined  Options Indexes FollowSymLinks  AllowOverride None  Order allow,deny  allow from all

Read full article from Using Apache Virtual Hosts and ProxyPass Together


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts