使用NGINX将“目录”映射到应用程序

我不确定我的术语是否正确,请让我解释一下…

如果我有一个域test.example.com ,我希望能够将/abc映射到运行在端口8080上的该服务器上的应用程序,并将另一个应用程序/def映射到运行在端口8081上的应用程序。

我已经试过用Docker运行的RabbitMQ,并且暴露了端口15672 ,但NGINX不在Docker内部,直接在机器上运行。

 docker run -d --hostname rabbitmq --name rabbitmq -p 15672:15672 rabbitmq:3-management 

无论是在Docker中运行,还是直接在机器上运行,我认为是无关紧要的,我有一个在端口15672上运行的应用程序,我想映射到location /rabbitmq

我到目前为止尝试过的NGINXconfiguration:

 server { listen 80; server_name test.example.com; location /rabbitmq { proxy_pass http://127.0.0.1:15672; } } 

当去test.example.com/rabbitmq我看到以下内容:

在这里输入图像说明

我不知道这是NGINX的页面还是RabbitMQ的页面显示没有find。

打开服务器上的端口15672 ,我可以清楚地看到RabbitMQ

在这里输入图像说明

并去:15672/blah这似乎是未find相同的页面,所以它必须得到RabbitMQ。

在这里输入图像说明

RabbitMQ正在监听0.0.0.0:15672 ,所以它应该从任何域,主机或IP工作。

在这里输入图像说明

那么如何让test.example.com/rabbitmq实际上提供test.example.com/rabbitmq的内容: test.example.com:15672

我得到它使用重写工作:

 server { listen 80; server_name test.example.com; location /rabbitmq { rewrite /rabbitmq/(.*) /$1 break; proxy_pass http://127.0.0.1:15672; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

在这里输入图像说明

 server { listen 80; listen 443 default_server ssl; ssl_certificate /etc/nginx/ssl/1_www.danielecencig.com_bundle.crt; ssl_certificate_key /etc/nginx/ssl/ssl.key; server_name www.danielecencig.com; root /www/public; rewrite ^/$ /index.html permanent; location / { root /www/public; try_files $uri $uri/ $uri.html =404; } location /SienaBikes { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } error_page 503 /error/maintenance.html; location ^~ /error/ { internal; root /www/public; } } 

这是我的nginxconfiguration; 我使用它和逆向代理,但为我的节点应用程序。 “位置/ SienaBikes”是nodejs应用程序,它适用于我。

我做的一件事(但我不知道它是否也适用于rabbitmq)是安装PM2守护进程并运行我的节点应用程序。 也许你需要这样做,或者沿着这条路走。

你的NGINXconfiguration很好,只需要像下面那样重写位置映射即可。

 server { listen 80; server_name test.example.com; location /rabbitmq/ { proxy_pass http://127.0.0.1:15672; } }