我目前正在使用nginx在一个vps上运行两个节点应用程序。然而,它从任一URL工作,如果我手动输入另一个端口,它将运行另一个应用程序,即转到mydomain1.com和mydomain2.com正确路由到在端口1337和1338上运行的节点应用程序。但是,我可以做mydomain1.com:1337或mydomain1.com:1338我可以访问任一应用程序,这似乎没有问题。我是否可以阻止将端口附加到跨访问应用程序?
以下是我在etc / nginx / conf.d,mydomain1.conf和mydomain2.conf中的文件:
mydomain1.conf
server {
listen 80;
server_name mydomain1.com;
location / {
proxy_pass http://localhost:1337;
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;
}
}
mydomain2.conf
server {
listen 80;
server_name mydomain2.com;
location / {
proxy_pass http://localhost:1338;
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;
}
}
我还添加了一个/etc/nginx/nginx.conf文件,其中包含以下内容:
server_names_hash_bucket_size 64;
答案 0 :(得分:2)
这似乎更像是防火墙问题?域名只会让您进入计算机,如果节点服务器在“公开”端口上运行,那么您可以访问它们。您应该锁定暴露的端口,并可能在应用程序路由中强制执行域重定向。
Web服务器可能只需要公开端口80用于http,443用于https,22用于ssh,可能25用于ftp
答案 1 :(得分:1)
像这样设置防火墙很明智,并且显然提供了解决方案。
如果您有兴趣,可访问节点应用程序的实际原因是,除非将它们绑定到IP,否则它们将监听所有网络接口上的流量,因此将响应您的公共IP上的请求。
将您的节点应用程序(或计算机上运行的任何服务器)绑定到127.0.0.1,它将仅响应内部请求,包括Nginx代理的请求,而不响应外部请求。
答案 2 :(得分:0)
我在自己的问题中添加了一个答案,我接受了一个让我朝着正确的方向前进的答案。这个答案可能对于那些在线上打这个线程的人有用。
肯定有更强大的方法,但对我来说使用linux iptables,以下只允许端口80和端口22(对于我的ssh会话),因此用户无法输入mydomain1:1337或mydomain1:1338,它还包括一些基本的攻击保护:
冲洗
iptables -F
阻止空包
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
同步洪水攻击保护
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
XMAS数据包保护
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
允许本地主机
iptables -A INPUT -i lo -p all -j ACCEPT
现在我们可以允许网络服务器流量:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
允许相关的,已建立的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT