Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nginx reverse proxy to backend running on localhost

Tags:

EDIT: It turns out that the my setup below actually works. Previously, I was getting redirections to port 36000 but it was due to some configuration settings on my backend application that was causing it.

I am not entirely sure, but I believe I might be wanting to set up a reverse proxy using nginx.

I have an application running on a server at port 36000. By default, port 36000 is not publicly accessible and my intention is for nginx to listen to a public url, direct any request to the url to an application running on port 36000. During this entire process, the user should not know that his/her request is being sent to an application running on my server's port 36000.

To put it in more concrete terms, assume that my url is http://domain.somehost.com/

Upon visiting http://domain.somehost.com/ , nginx should pick up the request and redirect it to an application already running on the server on port 36000, the application does some processing, and passes the response back. Port 36000 is not publicly accessible and should not appear as part of any url.

I've tried a setup that looks like:

server {     listen 80;     server_name domain.somehost.com     location / {         proxy_pass http://127.0.0.1:36000;         proxy_set_header Host $host;         proxy_set_header X-Real-IP $remote_addr;         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     } } 

and including that inside my main nginx.conf

However, it requires me to make port 36000 publicly accessible, and I'm trying to avoid that. The port 36000 also shows up as part of the forwarded url in the web browser.

Is there any way that I can do the same thing, but without making port 36000 accessible?

Thank you.

like image 911
yanhan Avatar asked May 21 '13 12:05

yanhan


People also ask

Can Nginx be used as reverse proxy?

Nginx is an open source web server that can also serve as a reverse proxy. Apart from being used to host websites, it's also one of the most widely used reverse proxy and load balancing solutions.

What is proxy_pass Nginx?

proxy_pass – This directive specifies the proxied server's address. The configuration below tells NGINX to pass every request to the proxied application on http://127.0.0.1:8000.

How do you check if Nginx reverse proxy is working?

To check the status of Nginx, run systemctl status nginx . This command generates some useful information. As this screenshot shows, Nginx is in active (running) status, and the process ID of the Nginx instance is 8539.


1 Answers

EDIT: The config below is from a working nginx config, with the hostname and port changed.

You need to may be able to set the server listening on port 36000 as an upstream server (see http://nginx.org/en/docs/http/ngx_http_upstream_module.html).

server {         listen   80;         server_name domain.somehost.com;          location / {                 proxy_set_header X-Real-IP $remote_addr;                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                 proxy_set_header Host $host;                 proxy_set_header X-NginX-Proxy true;                 proxy_pass http://localhost:36000/;                 proxy_redirect http://localhost:36000/ https://$server_name/;         } } 
like image 123
Intermernet Avatar answered Oct 05 '22 04:10

Intermernet