Localhostで実行しているWebアプリがいくつかあり、Webブラウザーから異なるポートでアクセスできます。
たとえば、ポート8888で実行されているIPythonノートブックサーバー(http://localhost:8888
でアクセスできます)と、ポート9000でリッスンする小さなflaskアプリがあります。
/etc/hosts
を変更することでlocalhostのエイリアスを設定できることは知っていますが、ここで達成したいのは、ポートごとに異なるエイリアスを持つことです。
たとえば、ブラウザを開いて、http://notebooks/
ではなくhttp://localhost:8888
とhttp://flaskapp
の代わりにhttp://localhost:9000
を使用したいと思います。
これを行う簡単な方法はありますか?
何らかの形式のiptables宛先ベースの転送ルールを使用するか、または Apache または プロキシとしてのnginx を使用する必要があります。 nginx
の場合:
Sudo apt-get install nginx
次の形式の 仮想サーバー構成 を作成します。
server {
server_name notebooks;
location / {
proxy_pass http://localhost:8888;
proxy_redirect default;
}
access_log /var/log/nginx/notebook-access.log;
error_log /var/log/nginx/notebook-error.log;
}
これは、デフォルトのサイト(/etc/nginx/sites-available/default
)を編集するか、そのディレクトリに新しいファイルを作成する(/etc/nginx/sites-available/notebook
など)ことで実行できます。管理者権限(Sudo vim
、Sudo -H gedit
など)でお気に入りのエディターを使用します。
次に、/etc/nginx/sites-enabled/
にリンクを作成してサイトを有効にします(まだ存在しない場合):
Sudo ln -s /etc/nginx/sites-{available,enabled}/default
# or, if you created a new file:
Sudo ln -s /etc/nginx/sites-{available,enabled}/notebook
再起動nginx
:
Sudo service nginx restart
/etc/hosts
を編集して、上記の構成でserver_name
に使用されるのと同じ名前のエイリアスを作成します。
さまざまなポートにプロキシするために、このような仮想サーバーをさらに多く作成できます。
Iptables-fuについてはよくわかりませんが、いくつかの単純なリダイレクトはうまくいくようです。たとえば、単純なPython Webサーバー(python3 -m http.server 8888
)の場合:
iptables -t nat -A OUTPUT -p tcp -d notebooks --dport 80 -j REDIRECT --to-ports 8888
コマンドは理解しやすいです:
-A OUTPUT -p tcp
は発信TCPトラフィックと一致します。-d notebooks
および--dport 80
は、宛先ホスト名とポートに一致します。いずれにしても1つのポートしか使用しない可能性があるため、ここではポートは必要ありません。-j REDIRECT --to-ports 8888
はリダイレクトチェーンを使用し、8888
をリダイレクトのターゲットポートとして使用します。このチェーンは、nat
テーブルでのみ使用できます。notebooks
のエントリが/etc/hosts
に存在する必要がありますbeforeこのルールを適用します。