shellスクリプトは80ポートのデータパケットをNode.jsサーバに転送します。


注意:無駄を省き、直接ROOTユーザーを使ってNode.jsサービスを実行しないでください。これは予想できない安全問題をもたらします。しかし、80ポートをHTTPデフォルトポートとする習慣はMS時代から続いています。どうすればいいですか?インターネット上ではNginXを使って逆代理をするなどと滔々と話していますが、そんなに大げさにする必要はないと思います。ROOTユーザーを使って普通のポートと80ポートのデータ転送をしたらいいです。iptables文を使って次のようにします。2.このようなステートメントを実行した後、80ポートバインディングを他のポートに転送したい場合は、まず
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port      
を使用してください。
3.AchLinuxを使う子供靴は注意が必要です。カーネルがモジュールに欠けている可能性があります。上記の文でバインディング転送ポートを設定できません。カーネルまたはモジュールを再コンパイルする必要があります。
以上のエッグ痛の問題を介在して、台本を書きました。記録と自動バインディングを自動的に削除することができます。

#
iptables --line-numbers --list PREROUTING -t nat

# , , , “ ”。
iptables -t nat -D PREROUTING

は、上のコードをファイルとして保存し、実行権限を追加するだけで、前のレコードをクリアし、新しいポートをバインディング転送することができます。
#!/bin/bash
if [ $# = 1 ]; then
    if [ $1 -ge 0 ]; then
        if [ $1 -le 65535 ]; then

            #Delete all old bindings
            for line_num in $(iptables --line-numbers --list PREROUTING -t nat|grep dpt:http|awk '{print $1}')
            do
                LINES="$line_num $LINES"
            done
            for line in $LINES
            do
                iptables -t nat -D PREROUTING $line
            done
            unset LINES

            #Make a new binding
            iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port $1
            echo "Port 80 is bound with $1 !"
            exit 1
        fi
    fi
fi
echo "Please input ONE PORT NUMBER!"