我不确定我的术语是否正确,所以让我解释一下......
如果我有一个域,test.example.com
我希望能够映射/abc
到该服务器上在端口上运行的应用程序8080
,并将另一个应用程序映射/def
到在端口上运行的应用程序8081
。
我已经尝试使用 RabbitMQ,它在 docker 内部运行并公开端口15672
,但是 NGINX 不在 Docker 内部,并且直接在机器上运行。
docker run -d --hostname rabbitmq --name rabbitmq -p 15672:15672 rabbitmq:3-management
我认为,无论它是在 Docker 内部运行还是直接在机器上运行,都无关紧要,我有一个应用程序在端口上运行15672
,我想将其映射到位置/rabbitmq
到目前为止我已经尝试过的 NGINX 配置:
server {
listen 80;
server_name test.example.com;
location /rabbitmq {
proxy_pass http://127.0.0.1:15672;
}
}
当我去的时候,test.example.com/rabbitmq
我看到了以下内容:
我不知道那是 NGINX 的页面还是 RabbitMQ 的页面显示未找到。
在服务器上打开端口15672
我可以清楚地访问 RabbitMQ
并且进入:15672/blah
该页面似乎是相同的未找到页面,因此它一定是进入了 RabbitMQ。
RabbitMQ 正在监听0.0.0.0:15672
,因此它应该可以从任何域、主机或 IP 工作。
那么我该如何真正test.example.com/rabbitmq
地提供内容呢test.example.com:15672
?
答案1
答案2
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;
}
}
这是我的 nginx 配置;我也将它用作反向代理,但是用于我的节点应用程序。“location /SienaBikes”是 nodejs 应用程序,它对我来说运行正常。
我做了一件事(但我不知道它是否也适用于 rabbitmq)是安装PM2 守护进程并将我的节点应用程序作为一个进程运行。也许你也需要这样做或类似的事情。
答案3
您的 NGINX 配置很好,只需要像下面这样重写位置映射。
server {
listen 80;
server_name test.example.com;
location /rabbitmq/ {
proxy_pass http://127.0.0.1:15672;
}
}