0

I have a golang application running on port 3001. curl http://127.0.0.1:3001 gives the correct HTML response. But I am facing issues when I am trying to do a proxy_pass via NginX.

Below is my NginX configuration. I am doing a route based location block -

upstream my-app { server 127.0.0.1:3001; } server { listen 80 default_server; server_name localhost; underscores_in_headers on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; error_page 404 /404.html; client_max_body_size 300M; location ^~ /theapp { proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://my-app; } } 

When I access http://example.com/theapp/, it downloads the my-app binary instead of forwarding the http request to my-app.

What am I doing wrong?

Output of nginx -T -

nginx: the configuration file /mnt/vol1/nginx/conf/nginx.conf syntax is ok nginx: configuration file /mnt/vol1/nginx/conf/nginx.conf test is successful # configuration file /mnt/vol1/nginx/conf/nginx.conf: #user nobody; worker_processes 12; access_log /mnt/vol2/logs/nginx/access.log main-2 buffer=5k; error_log /mnt/vol2/logs/nginx/error.log; events { worker_connections 4000; multi_accept on; } http { include mime.types; underscores_in_headers on; default_type application/octet-stream; log_format main-2 '$host $http_client_ip $remote_addr - $remote_user - $request_time [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$http_cache_control" ' '"$http_via" '; client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5; send_timeout 10; sendfile on; upstream my-app { server 127.0.0.1:3001; } server { listen 80 default_server; server_name localhost; underscores_in_headers on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; error_page 404 /404.html; client_max_body_size 300M; location ^~ /theapp { proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://my-app; } } } # configuration file /mnt/vol1/nginx/conf/mime.types: types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg; application/javascript js; application/atom+xml atom; application/rss+xml rss; text/mathml mml; text/plain txt; text/vnd.sun.j2me.app-descriptor jad; text/vnd.wap.wml wml; text/x-component htc; image/png png; image/tiff tif tiff; image/vnd.wap.wbmp wbmp; image/x-icon ico; image/x-jng jng; image/x-ms-bmp bmp; image/svg+xml svg svgz; image/webp webp; application/font-woff woff; application/java-archive jar war ear; application/json json; application/mac-binhex40 hqx; application/msword doc; application/pdf pdf; application/postscript ps eps ai; application/rtf rtf; application/vnd.apple.mpegurl m3u8; application/vnd.ms-excel xls; application/vnd.ms-fontobject eot; application/vnd.ms-powerpoint ppt; application/vnd.wap.wmlc wmlc; application/vnd.google-earth.kml+xml kml; application/vnd.google-earth.kmz kmz; application/x-7z-compressed 7z; application/x-cocoa cco; application/x-java-archive-diff jardiff; application/x-java-jnlp-file jnlp; application/x-makeself run; application/x-perl pl pm; application/x-pilot prc pdb; application/x-rar-compressed rar; application/x-redhat-package-manager rpm; application/x-sea sea; application/x-shockwave-flash swf; application/x-stuffit sit; application/x-tcl tcl tk; application/x-x509-ca-cert der pem crt; application/x-xpinstall xpi; application/xhtml+xml xhtml; application/xspf+xml xspf; application/zip zip; application/octet-stream bin exe dll; application/octet-stream deb; application/octet-stream dmg; application/octet-stream iso img; application/octet-stream msi msp msm; application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; audio/midi mid midi kar; audio/mpeg mp3; audio/ogg ogg; audio/x-m4a m4a; audio/x-realaudio ra; video/3gpp 3gpp 3gp; video/mp2t ts; video/mp4 mp4; video/mpeg mpeg mpg; video/quicktime mov; video/webm webm; video/x-flv flv; video/x-m4v m4v; video/x-mng mng; video/x-ms-asf asx asf; video/x-ms-wmv wmv; video/x-msvideo avi; } 
17
  • 1
    Did you do something silly like put the binary inside the document root? I don't even see a root here. Where did you define it?! Commented Jul 23, 2020 at 18:54
  • 1
    You aren't using the block only to proxy pass. You're only passing some URLs, not all of them. Commented Jul 23, 2020 at 18:57
  • 1
    What about your custom 404 page? That won't go to the app. Commented Jul 23, 2020 at 19:00
  • 1
    I was focused on the issue, so here it is again: What is your document root? Where did you put this Go binary? Commented Jul 23, 2020 at 19:06
  • 1
    That means that the document root is inherited from the level above, not that there is not one. There is always a document root, even if you don't define one anywhere, the compiled-in default will be used. But based on your new information I think the problem is that your requests are going to a different server block. Please edit your question to include the output from nginx -T. Commented Jul 23, 2020 at 19:14

1 Answer 1

0

I have solved it by adding / at the end of http://my-app.

Not really sure how that works. But it did work.

Thanks to - Nginx: How do I forward a http request to another port?

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.