reverse proxying towards various hardware devices
Maxim Dounin
mdounin at mdounin.ru
Sat Jan 23 21:42:12 MSK 2010
Hello!
On Sat, Jan 23, 2010 at 04:45:07PM +0100, Paul Swielingen wrote:
> Hi all,
>
> I need some help with NGINX reverse proxying setup.
>
> The problem: make several devices accessible through a single IP
> address.
> my current configuration works:
> 1) For some devices: fine
> 2) For other devices: for a large part
> 3) For still other devices: hardly
>
> I analyzed the reason for 2) and 3) above and it comes down to: as soon
> as such a device returns a page with links that starts with a / clicking
> the link fails. The reason for this is that the reverse proxy no longer
> recognizes the request as destined for the particular device.
>
> The relevant part from my nginx.conf file:
>
> server {
> listen xxxxx.yyyyyy.zzzz.com:80;
>
> location / {
> root /var/mine/data;
> index index.html;
> }
>
> location /spa3000-1/ { # forward to device
> proxy_pass http://spa3000-1.xxxxx.yyyyyy.zzzz.com/;
> }
> ...
> similar configs for other devices
> ...
> }
>
> I am aware that I could destine all these devices to their own port but
> I don't want to do that because securing them will become very
> difficult. Therefore I don't want to take that path.
>
> I know of the existence of referrers but I do not understand how to
> approach using that. Anybody can help me?
It's up to the device in question to form correct links on pages
it returns. If it doesn't do so - some limited changes may be
done by sub filter module. But it's not really a solution as it's
not able to parse and interpret all of the returned code (even if
teach it to parse html - what to do with broken html, javascript,
css, xml+xslt and so on?).
So the only generic solution is to use separate hosts (or ports).
You may still proxy them via nginx, i.e. write something like
this:
server {
server_name device.example.com;
location / {
proxy_pass http://real-device.example.com;
proxy_set_header Host $host;
}
}
and make sure device thinks it's called "device.example.com" while
this name in fact points to nginx server.
Maxim Dounin
More information about the nginx
mailing list