Nginx上游和侦听同一端口
我已经在EC2实例上配置了Nginx上游和侦听同一端口,nginx,amazon-ec2,nginx-reverse-proxy,Nginx,Amazon Ec2,Nginx Reverse Proxy,我已经在EC2实例上配置了nginx http://ip-address:15672 我正在运行rabbitmq管理,它运行在端口15672上,可以使用实例的IP地址访问 http://ip-address:15672 我不希望允许使用IP地址进行访问,希望使用我的域,但使用与相同的端口 http://utils.example.com:15672 为此,我尝试使用配置来配置nginx服务器 upstream rabbitmq_server { server localhost:1
nginx
http://ip-address:15672
我正在运行rabbitmq管理
,它运行在端口15672
上,可以使用实例的IP地址访问
http://ip-address:15672
我不希望允许使用IP地址进行访问,希望使用我的域,但使用与相同的端口
http://utils.example.com:15672
为此,我尝试使用配置来配置nginx
服务器
upstream rabbitmq_server {
server localhost:15672;
}
server {
listen 15672 ssl;
server_name utils.example.com;
location / {
proxy_pass http://rabbitmq_server/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol $scheme;
}
}
但是,这会在启动nginx
服务器时出错
[emerg] 7476#7476: bind() to 0.0.0.0:15672 failed (98: Address already in use)
当我将端口更改为listen 15673
时,它可以工作,也可以使用域访问,但也可以使用IP地址访问
http://utils.example.com
您可以使用IF并检查位置中的$host变量,您可以在此处找到nginx的IF指南 结果将与此类似
upstream rabbitmq_server {
server localhost:15672;
}
server {
listen 15672 ssl;
server_name utils.example.com;
location / {
if ($host = utils.example.com) {
proxy_pass http://rabbitmq_server/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol $scheme;
}
}
}
1) 如何使用运行应用程序的同一内部IP进行访问
您不能让这两个应用程序(nginx和rabbit)监听同一个端口
向ip发送请愿书:与此相同(不完全相同,但在示例中它会起作用)
我的推荐:
将rabbitmq端口更改为另一个端口,比如15673。并按如下方式设置nginx配置:
upstream rabbitmq_server {
server localhost:15673;
}
server {
listen 15672 ssl;
server_name utils.example.com your_ip_numbers;
location / {
proxy_pass http://rabbitmq_server/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol $scheme;
}
}
这样,您的_ip:15672和utils.example.com:15672都将通过nginx被代理到rabbitmq
2) 如何禁用IP地址的直接访问并仅限制对域/子域的访问
如果要使用建议并阻止对防火墙中15673端口的任何访问,请从server_name指令中删除“your_ip_number”。大多数防火墙不将本地主机代理视为正常连接
如果您只有服务器名称utils.example.com的服务器括号中的rabbitmq代理;这已经是一种只过滤到rabbitmq的子域连接的方法
如果我没有正确地表达自己,在评论中问我指的是什么,我很乐意回答
编辑:
对于不被代理传递的ip,在同一端口中创建另一个默认的服务器支架(它是nginx,这样它们就不会冲突)将ip发送到那里
server {
listen 15672 ssl default_server;
server_name _;
return 418; #(or really any code you like)
}
希望我能提供帮助。您不能让两个应用程序使用同一端口。您可以在另一台服务器上安装nginx,并在rabbitmq服务器的上游安装一些防火墙规则,以便只允许从您的nginx服务器在该端口上安装nginx。由于您尝试获取相同的端口,它不会仍然失败吗?加上服务器名称utils.example.com;已筛选域2。我没有在
server\u name
中添加IP
地址,但仍然可以从IP
地址访问该地址。我认为从服务器\u name
@AnujTBE添加和删除IP不会产生任何效果,只需添加一个服务器配置,将错误代码返回到IP请求。如果我将return
添加到基本配置中,它会在所有端口上工作吗?。我有多个端口服务于多个应用程序,只需要一个一次性解决方案;这意味着它只侦听15672,接受ssl连接,并且它是此端口的默认_服务器,而不是所有nginx配置。如果您对此感觉不好,只需将服务器名称从更改为您的ip,并去掉“默认服务器”。像这样,它只会得到“ip:15672”这样的连接,返回418它位于一个服务器支架内,侦听一个端口。不是所有的