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

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

我不确定我的术语是否正确,所以让我解释一下......

如果我有一个域,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

我使用重写使它工作:

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;
        }
}

在此处输入图片描述

答案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;
        }
}

相关内容