nginx反向代理停止端口覆盖

nginx反向代理停止端口覆盖,nginx,reverse-proxy,Nginx,Reverse Proxy,我目前正在使用nginx在一个vps上运行两个节点应用程序。但是,从任意一个URL,如果我手动输入另一个的端口,它将运行另一个应用程序,即转到mydomain1.com和mydomain2.com正确路由到端口1337和1338上运行的节点应用程序。但是我可以使用mydomain1.com:1337或mydomain1.com:1338,并且我可以访问任何一个应用程序,这似乎不正确。我是否可以,如果可以,如何防止将端口附加到交叉访问应用程序 以下是我在etc/nginx/conf.d、mydom

我目前正在使用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;

这似乎更像是防火墙问题?域名只会让您访问计算机,如果节点服务器在“公开”端口上运行,那么您当然可以访问它们。您可能应该锁定公开的端口,并在应用程序路由中强制执行域重定向


Web服务器可能只需要为http公开端口80,为https公开端口443,为ssh公开端口22,为ftp公开端口25,这似乎更像是一个防火墙问题?域名只会让您访问计算机,如果节点服务器在“公开”端口上运行,那么您当然可以访问它们。您可能应该锁定公开的端口,并在应用程序路由中强制执行域重定向


Web服务器可能只需要为http公开端口80,为https公开端口443,为ssh公开端口22,为ftp公开端口25。我正在为我自己的问题添加一个答案,我接受了一个让我朝着正确方向前进的答案。这个答案可能会被证明对那些沿着这条线走下去的人有用

当然还有更可靠的方法,但对于我使用linux iptables的ssh会话,仅允许端口80和端口22,因此用户无法进入mydomain1:1337或mydomain1:1338,它还包括一些基本的攻击保护:

冲洗

阻止空数据包

    iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
syn洪水攻击防护

    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
XMAS数据包保护

    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
允许本地主机

    iptables -A INPUT -i lo -p all -j ACCEPT
现在我们可以允许web服务器流量:

    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

我给自己的问题添加了一个答案,我接受了这个答案,这让我朝着正确的方向前进。这个答案可能会被证明对那些沿着这条线走下去的人有用

当然还有更可靠的方法,但对于我使用linux iptables的ssh会话,仅允许端口80和端口22,因此用户无法进入mydomain1:1337或mydomain1:1338,它还包括一些基本的攻击保护:

冲洗

阻止空数据包

    iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
syn洪水攻击防护

    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
XMAS数据包保护

    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
允许本地主机

    iptables -A INPUT -i lo -p all -j ACCEPT
现在我们可以允许web服务器流量:

    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

这样设置防火墙是明智的,它显然提供了一个解决方案

如果您感兴趣,可以访问节点应用的实际原因是,除非您将它们绑定到IP,否则它们正在侦听所有网络接口上的流量,因此将响应公共IP上的请求


将您的节点应用程序或计算机上运行的任何服务器绑定到127.0.0.1,它将只响应内部请求,包括由Nginx代理的请求,而不响应外部世界。

这样设置防火墙是明智的,它显然提供了一个解决方案

如果您感兴趣,可以访问节点应用的实际原因是,除非您将它们绑定到IP,否则它们正在侦听所有网络接口上的流量,因此将响应公共IP上的请求


将您的节点应用程序或您机器上运行的任何服务器绑定到127.0.0.1,它将只响应内部请求,包括由Nginx代理的请求,而不响应外部世界。

正如其他答案所指出的,最好是设置防火墙,并仅将您的节点应用程序绑定到本地主机上侦听

对于防火墙,您不必处理iptables,您可以使用简单的防火墙。这使得保护web服务器的端口变得非常轻松:

默认情况下,最初拒绝所有传入连接 仅允许HTTP:80、HTTPS:443、SSH:22和FTP:21 对于debian/ubuntu系统,该过程如下所示,首先确保您是root用户或sudo用户:

如果键入ufw status,您可以看到您有哪些活动规则

对于仅将节点进程绑定到localhost,以便不在服务器上的任何东西都无法连接到该端口,可以将主机名作为或应用程序的第二个参数传递。侦听:


正如其他答案所指出的,最好的办法是设置防火墙,并且只将节点应用程序绑定到本地主机上进行侦听

对于防火墙,您不必处理iptables,您可以使用简单的防火墙。这使得保护web服务器的端口变得非常轻松:

伊尼 t默认情况下拒绝所有传入连接 仅允许HTTP:80、HTTPS:443、SSH:22和FTP:21 对于debian/ubuntu系统,该过程如下所示,首先确保您是root用户或sudo用户:

如果键入ufw status,您可以看到您有哪些活动规则

对于仅将节点进程绑定到localhost,以便不在服务器上的任何东西都无法连接到该端口,可以将主机名作为或应用程序的第二个参数传递。侦听:


这似乎更像是防火墙问题?域名只会让您访问计算机,如果节点服务器在“公开”端口上运行,那么您当然可以访问它们。您可能应该锁定公开的端口,并在应用程序路由中强制执行域重定向。这听起来是正确的,另外,我的网络技能可能会更好,将其移动到一个答案,我可以将其标记为已回答。Web服务器可能只需要公开http的端口80,https的端口443,ssh为22,FTP为25这似乎更像是一个防火墙问题?域名只会让您访问计算机,如果节点服务器在“公开”端口上运行,那么您当然可以访问它们。您可能应该锁定公开的端口,并在应用程序路由中强制执行域重定向。这听起来是正确的,另外,我的网络技能可能会更好,将其移动到一个答案,我可以将其标记为已回答。Web服务器可能只需要公开http的端口80,https的端口443,22对于ssh,可能25对于FTPManicalRobot,请看我对下面我自己问题的补充回答,你认为这是一个合理的方法吗?maniacalrobot,请看我对下面我自己问题的补充回答,你认为这是一个合理的方法吗?