<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to URL jumps between different visualizations behind a reverse proxy</title><link href="https://forge.codesys.com/forge/talk/Visualization/thread/4139900aeb/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Visualization/thread/4139900aeb/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Visualization/thread/4139900aeb/</id><updated>2024-07-26T09:56:29.614000Z</updated><subtitle>Recent posts to URL jumps between different visualizations behind a reverse proxy</subtitle><entry><title>URL jumps between different visualizations behind a reverse proxy</title><link href="https://forge.codesys.com/forge/talk/Visualization/thread/4139900aeb/?limit=25#1110" rel="alternate"/><published>2024-07-26T09:56:29.614000Z</published><updated>2024-07-26T09:56:29.614000Z</updated><author><name>squale</name><uri>https://forge.codesys.com/u/squale/</uri></author><id>https://forge.codesys.comaa0bd9c5f8d7ec536b2c6454bb259cb123a5dd79</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi kevinrn,&lt;br/&gt;
I have the same question as yours.&lt;br/&gt;
On my side I try to make nginx work but it doesn't goes well. I think the sub_filter doesn't work int this case.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>URL jumps between different visualizations behind a reverse proxy</title><link href="https://forge.codesys.com/forge/talk/Visualization/thread/4139900aeb/?limit=25#9243" rel="alternate"/><published>2023-02-01T16:34:52.633000Z</published><updated>2023-02-01T16:34:52.633000Z</updated><author><name>kevinrn</name><uri>https://forge.codesys.com/u/kevinrn/</uri></author><id>https://forge.codesys.comaddb7441157fc6f7015b315a028606e2e69dbce1</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi community,&lt;/p&gt;
&lt;p&gt;I want to open different visualizations from multiple CODESYS webservers using a reverse-proxy. Each visualization should work with the webserver's primary IP-address and a location path of the proxy. The visualization includes URL jumps to other CODESYS webservers that are accessible in the same local network. This requires replacing the content site's URL when it's opened through the proxy, as it's not possible to change the URL addresses in the PLC program.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Description and Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have a fully functioning Nginx configuration that allows accessing the webvisu from the controllers through a reverse-proxy. &lt;/p&gt;
&lt;p&gt;Image overview:&lt;br/&gt;
&lt;a class="" href="https://postimg.cc/B8wb9nxw" rel="nofollow"&gt;Overview.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Devices:&lt;br/&gt;
DDC1 with webvisu: &lt;em&gt;192.168.20.86&lt;/em&gt; (Webserver port: 80)&lt;br/&gt;
DDC2 with webvisu: &lt;em&gt;192.168.20.87&lt;/em&gt; (Webserver port: 80)&lt;br/&gt;
nginx reverse proxy server: &lt;em&gt;192.168.20.205&lt;/em&gt; (nginx port: 4000)&lt;/p&gt;
&lt;p&gt;nginx reverse proxy configuration:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &lt;span class="nt"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;listen&lt;/span&gt; &lt;span class="err"&gt;4000&lt;/span&gt; &lt;span class="err"&gt;default_server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="err"&gt;location&lt;/span&gt; &lt;span class="err"&gt;/visu1&lt;/span&gt;  &lt;span class="err"&gt;{&lt;/span&gt;
      &lt;span class="err"&gt;rewrite&lt;/span&gt; &lt;span class="err"&gt;^/WebVisuV3.bin$&lt;/span&gt; &lt;span class="err"&gt;/visu1/WebVisuV3.bin&lt;/span&gt; &lt;span class="err"&gt;last&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;rewrite&lt;/span&gt; &lt;span class="err"&gt;^(/visu1)$&lt;/span&gt; &lt;span class="err"&gt;$1/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;rewrite&lt;/span&gt; &lt;span class="err"&gt;^/visu1(.+)&lt;/span&gt; &lt;span class="err"&gt;$1&lt;/span&gt; &lt;span class="err"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="err"&gt;sub_filter&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;192.168.20.86&lt;/span&gt;&lt;span class="s1"&gt;'  '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visu1&lt;/span&gt;&lt;span class="s1"&gt;';&lt;/span&gt;
&lt;span class="s1"&gt;      sub_filter '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="mf"&gt;192.168.20.87&lt;/span&gt;&lt;span class="s1"&gt;'  '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visu2&lt;/span&gt;&lt;span class="s1"&gt;';&lt;/span&gt;

&lt;span class="s1"&gt;      sub_filter '&lt;/span&gt;&lt;span class="s2"&gt;"/' '"&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visu1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="s1"&gt;';&lt;/span&gt;
&lt;span class="s1"&gt;      sub_filter_types *;&lt;/span&gt;
&lt;span class="s1"&gt;      sub_filter_once on;&lt;/span&gt;

&lt;span class="s1"&gt;      proxy_set_header Accept-Encoding "";&lt;/span&gt;
&lt;span class="s1"&gt;      proxy_set_header Host $http_host;&lt;/span&gt;
&lt;span class="s1"&gt;      proxy_set_header X-Real-IP $remote_addr;&lt;/span&gt;
&lt;span class="s1"&gt;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;/span&gt;
&lt;span class="s1"&gt;      proxy_set_header X-Forwarded-Proto $scheme;&lt;/span&gt;

&lt;span class="s1"&gt;      proxy_pass http://192.168.20.86$1$is_args$args;&lt;/span&gt;
&lt;span class="s1"&gt;      proxy_http_version 1.1;&lt;/span&gt;
&lt;span class="s1"&gt;    }&lt;/span&gt;

&lt;span class="s1"&gt;    location /visu2 {&lt;/span&gt;
&lt;span class="s1"&gt;      rewrite ^/WebVisuV3.bin$ /visu2/WebVisuV3.bin last;&lt;/span&gt;
&lt;span class="s1"&gt;      rewrite ^(/visu2)$ $1/;&lt;/span&gt;
&lt;span class="s1"&gt;      rewrite ^/visu2(.+) $1 break;&lt;/span&gt;

&lt;span class="s1"&gt;      sub_filter '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="mf"&gt;192.168.20.86&lt;/span&gt;&lt;span class="s1"&gt;'  '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visu1&lt;/span&gt;&lt;span class="s1"&gt;';&lt;/span&gt;
&lt;span class="s1"&gt;      sub_filter '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="mf"&gt;192.168.20.87&lt;/span&gt;&lt;span class="s1"&gt;'  '&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visu2&lt;/span&gt;&lt;span class="s1"&gt;';&lt;/span&gt;

&lt;span class="s1"&gt;      sub_filter '&lt;/span&gt;&lt;span class="s2"&gt;"/' '"&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visu2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;sub_filter_types&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;sub_filter_once&lt;/span&gt; &lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="err"&gt;proxy_set_header&lt;/span&gt; &lt;span class="err"&gt;Accept-Encoding&lt;/span&gt; &lt;span class="err"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;proxy_set_header&lt;/span&gt; &lt;span class="err"&gt;Host&lt;/span&gt; &lt;span class="err"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;proxy_set_header&lt;/span&gt; &lt;span class="err"&gt;X-Real-IP&lt;/span&gt; &lt;span class="err"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;proxy_set_header&lt;/span&gt; &lt;span class="err"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="err"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;proxy_set_header&lt;/span&gt; &lt;span class="err"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="err"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="err"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;192.168.20.87&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;is_args&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;proxy_http_version&lt;/span&gt; &lt;span class="err"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This configuration works as expected and I can open the visualizations through the proxy-server.&lt;/p&gt;
&lt;p&gt;visu1: &lt;em&gt;http://192.168.20.205:4000/visu1&lt;/em&gt;&lt;br/&gt;
visu2: &lt;em&gt;http://192.168.20.205:4000/visu2&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The visualizations have url jumps that direct to other webservers. For example: On the webserver &lt;em&gt;visu1&lt;/em&gt;, there is a button with an URL jump to the url of &lt;em&gt;visu2&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;Such behaviour is normal, and it can be solved by using &lt;code&gt;sub_filter&lt;/code&gt; for nginx. &lt;br/&gt;
So, I configured the &lt;code&gt;sub_filter&lt;/code&gt; and I see from the client site, that the origin url is replaced. &lt;/p&gt;
&lt;p&gt;But I'm afraid that the &lt;code&gt;WebVisuV3.bin&lt;/code&gt; is doing some checks with the program code before the jump is executed. From my point of understanding it checks the size of the given URL string or something, because I get following error: &lt;br/&gt;
&lt;code&gt;Actual packet size 936 smaller than expected 940.&lt;/code&gt;&lt;br/&gt;
If I change the string to something else or add some whitespaces, it shows that the size does change.&lt;br/&gt;
I attached a gif which shows this: &lt;/p&gt;
&lt;p&gt;&lt;a class="" href="https://postimg.cc/N2rY3zSr" rel="nofollow"&gt;size-change.gif&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is there a way to find out more about the function and behavior of "webVisuV3.bin"?&lt;/li&gt;
&lt;li&gt;Does anyone have any ideas on how to proceed to solve the problem?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you in advance,&lt;br/&gt;
cheers&lt;br/&gt;
Kevin&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>