RProxy | RProxy is a reverse proxy server written with performance | Proxy library
kandi X-RAY | RProxy Summary
kandi X-RAY | RProxy Summary
RProxy is a reverse proxy server written with performance and scale in mind.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of RProxy
RProxy Key Features
RProxy Examples and Code Snippets
Community Discussions
Trending Discussions on RProxy
QUESTION
I've set up a simple Nginx reverse proxy using the "official image" Docker container. I've set it up to act as a front end for three containers, but only one is working correctly. The others load their index.html, but then try to pull ancillary files with URLs that make Nginx think they're local files.
The Docker host is called otto. I have Docker containers for Home Assistant listening on port 8123, Statping on port 8080, and Portainer on port 9000. Because I'm tired of remembering port numbers, my proxy_pass is set up so http://otto/homeassistant/ redirects to http://otto:8123/, http://otto/statping/ to http://otto:8080/ and http://otto/portainer/ to http://otto:9000
But, only Portainer works. The other two load their index.html just fine, but then start trying to pull javascript files from /js/somefilename.js. This of course fails, because there's no http://otto/homeassistant or http://otto/statping on the front of it. Nginx then tries to find the file locally in /etc/nginx/html, fails, and gives up.
My question is why does Portainer work so flawlessly when the other two can't even load a home page?
I've tried disabling local file serving, by commenting out location / { }, but it doesn't matter.
I've tried assigning HTTP headers that I've seen in other examples, like this:
...ANSWER
Answered 2021-Mar-18 at 15:29The problem was exactly as @zigarn had pointed out in the comments. The apps being reverse proxied were relying on URLs with a base of / and not something like /statping or /homeassistant. Portainer worked because it apparently does not have that same dependency.
The solution is to move away from reverse proxying based on URL and instead use reverse proxy based on hostname. So now, rather than http://otto.local/statping/, I have http://statping.otto.local/ All reverse proxied apps load their home pages with this arrangement, so I feel like it's a win.
There area still some minor troubles with homeassistant and node-red, and I suspect this may be due to a need to reverse proxy web sockets. Still researching that, but the main objective of getting them all to pull up a home page or login page has been accomplished.
Now for the gory details...
Because this is a home setup, with the standard, basic functionality internet router, I had to put some work into setting up a DNS server before names like statping.otto.local or homeassistant.otto.local would resolve.
To do this, I installed bind 9 on otto, the same host running the Docker containers. It's installed from a package on Raspberry Pi OS rather than as a container. The trick was to use a wildcard CNAME in addition to the DNS entry for otto.local.
With *.otto.local pointing to otto.local, I am able to get any combination of {appname}.otto.local to resolve to otto's IP address. Now, typing http://portainer.otto.local et al. gets me to otto and Nginx.
In the Nginx config, it's a matter of creating several entries that look like this one:
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install RProxy
cmake ..
make
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page