<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 17, 2024 at 7:39 PM Sergey A. Osokin <<a href="mailto:osa@freebsd.org.ru">osa@freebsd.org.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Kaushal,<br>
<br>
On Fri, May 17, 2024 at 04:49:59PM +0530, Kaushal Shriyan wrote:<br>
> <br>
> I am running nginx version 1.26 on "Ubuntu 22.04.4 LTS" I have configured<br>
> the nginx as load balancer and the configuration details are as follows<br>
> <br>
> # nginx -v<br>
> nginx version: nginx/1.26.0<br>
> #<br>
> <br>
> server {<br>
[...]<br>
> <br>
>         location / {<br>
>             # Define the upstream servers for load balancing<br>
>             proxy_pass <a href="http://backend/" rel="noreferrer" target="_blank">http://backend/</a>;<br>
<br>
Could you please explain a reason why did you decide to use `/' after<br>
the backend's name in the proxy_pass directive.<br>
<br>
>             # Set HTTP headers<br>
>             proxy_set_header Host $host;<br>
>             proxy_set_header X-Real-IP $remote_addr;<br>
>             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>
>             proxy_set_header X-Forwarded-Proto $scheme;<br>
>         }<br>
> <br>
> location /api/docs/ {<br>
>         proxy_pass <a href="http://backend/api/docs/" rel="noreferrer" target="_blank">http://backend/api/docs/</a>;<br>
<br>
It seems like '/api/docs/' can be safely removed, so<br>
I'd recommend to read the documentation for the proxy_pass directive, [1]<br>
<br>
<quote><br>
<br>
If proxy_pass is specified without a URI, the request URI is passed to the<br>
server in the same form as sent by a client when the original request is<br>
processed, or the full normalized request URI is passed when processing<br>
the changed URI:<br>
<br>
    location /some/path/ {<br>
        proxy_pass <a href="http://127.0.0.1" rel="noreferrer" target="_blank">http://127.0.0.1</a>;<br>
    }<br>
<br>
</quote><br>
<br>
[...]<br>
<br>
> When i hit <a href="http://tead-local.com:80/api/docs/" rel="noreferrer" target="_blank">http://tead-local.com:80/api/docs/</a> I get http 200 response from<br>
> the backend server whereas when I try to hit using public IP :-<br>
> <a href="http://210.11.1.110:8085/api/docs/" rel="noreferrer" target="_blank">http://210.11.1.110:8085/api/docs/</a> I encounter http 404 not found.<br>
> <br>
> 101.0.62.200 - - [17/May/2024:16:38:24 +0530] "GET /api/docs/ HTTP/1.1" 404<br>
> 153 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)<br>
> AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15<br>
> Ddg/17.5" "-"<br>
<br>
To see the whole picture of processing a request by nginx, I'd<br>
also recommend to enable a debugging log, [2].<br>
<br>
Hope that helps.<br>
<br>
References<br>
----------<br>
1. <a href="https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass" rel="noreferrer" target="_blank">https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass</a><br>
2. <a href="https://nginx.org/en/docs/debugging_log.html" rel="noreferrer" target="_blank">https://nginx.org/en/docs/debugging_log.html</a><br>
<br>
-- <br>
Sergey A. Osokin<br></blockquote><div><br></div><div>Thanks Sergey for the detailed explanation. I have modified the /etc/nginx/conf.d/loadbalancer.conf file (nginx server running in loadbalancer mode). The upstream backend -> <a href="http://tead-local.com:80">tead-local.com:80</a> is hosted on docker based container running nginx service (version :- 1.21.6)</div><div><br></div><div>##############################loadbalancer.conf###############################################</div><div>server {<br>        listen 80;<br>        server_name <a href="http://testbe.mydomain.com">testbe.mydomain.com</a>;<br>        error_log /var/log/nginx/nginxdebug.log debug;<br><br>        location / {<br>            # Define the upstream servers for load balancing<br>            proxy_pass <a href="http://backend">http://backend</a>;<br>            # Set HTTP headers<br>            proxy_set_header Host $host;<br>            proxy_set_header X-Real-IP $remote_addr;<br>            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>            proxy_set_header X-Forwarded-Proto $scheme;<br>           error_log /var/log/nginx/nginxlocationdebug.log debug;<br>        }<br>}</div><div><br>    upstream backend {<br>        server <a href="http://tead-local.com:80">tead-local.com:80</a>;<br>    }<br></div><div> </div><div>##########################################################################################<br></div><div><br></div><div><img src="cid:ii_lwb30lud0" alt="image.png" width="212" height="105" style="margin-right: 0px;"><br></div><div># ll<br>total 12<br>drwxr-xr-x  2 root adm      93 May 18 01:05 ./<br>drwxrwxr-x 15 root syslog 4096 May 16 16:33 ../<br>-rw-r--r--  1 root root    621 May 18 01:05 access.log<br>-rw-r--r--  1 root root    594 May 18 01:05 error.log<br>-rw-r--r--  1 root root      0 May 18 01:05 nginxdebug.log<br>-rw-r--r--  1 root root      0 May 18 01:05 nginxlocationdebug.log<br>#<br></div><div><br></div><div>root@lb-01:/var/log/nginx# cat error.log<br>2024/05/18 01:05:15 [notice] 539625#539625: using the "epoll" event method<br>2024/05/18 01:05:15 [notice] 539625#539625: nginx/1.26.0<br>2024/05/18 01:05:15 [notice] 539625#539625: built by gcc 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)<br>2024/05/18 01:05:15 [notice] 539625#539625: OS: Linux 5.15.0-105-generic<br>2024/05/18 01:05:15 [notice] 539625#539625: getrlimit(RLIMIT_NOFILE): 1024:524288<br>2024/05/18 01:05:15 [notice] 539626#539626: start worker processes<br>2024/05/18 01:05:15 [notice] 539626#539626: start worker process 539627<br>2024/05/18 01:05:15 [notice] 539626#539626: start worker process 539628<br>root@lb-01:/var/log/nginx# ll<br></div><div><br></div><div># cat access.log<br>101.0.62.200 - - [18/May/2024:01:05:19 +0530] "GET /api/docs HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<a href="http://125.0.0.0">125.0.0.0</a> Safari/537.36" "-"<br>101.0.62.200 - - [18/May/2024:01:05:20 +0530] "GET /api/docs HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<a href="http://125.0.0.0">125.0.0.0</a> Safari/537.36" "-"<br>101.0.62.200 - - [18/May/2024:01:05:21 +0530] "GET /api/docs HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<a href="http://125.0.0.0">125.0.0.0</a> Safari/537.36" "-"<br>#<br></div><div><br></div><div># cat nginxdebug.log<br>2024/05/18 01:06:19 [info] 539627#539627: *2 client timed out (110: Connection timed out) while waiting for request, client: 101.0.62.200, server: <a href="http://0.0.0.0:80">0.0.0.0:80</a><br>2024/05/18 01:08:01 [info] 539628#539628: *7 client timed out (110: Connection timed out) while waiting for request, client: 101.0.62.200, server: <a href="http://0.0.0.0:80">0.0.0.0:80</a><br>#<br></div><div><br></div><div># nginx -v<br>nginx version: nginx/1.26.0<br>#<br></div><div><br></div><div><div> Am I missing anything? Please guide me. </div><div><br></div><div>Thanks in advance.</div><div><br></div><div>Best Regards,</div><div><br></div><div>Kaushal</div></div></div></div>