我不确定我的术语是否正确,请让我解释一下…
如果我有一个域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; } }