web-dev-qa-db-ja.com

異なるポートでローカルホストアドレスの複数のエイリアスを作成する

Localhostで実行しているWebアプリがいくつかあり、Webブラウザーから異なるポートでアクセスできます。

たとえば、ポート8888で実行されているIPythonノートブックサーバー(http://localhost:8888でアクセスできます)と、ポート9000でリッスンする小さなflaskアプリがあります。

/etc/hostsを変更することでlocalhostのエイリアスを設定できることは知っていますが、ここで達成したいのは、ポートごとに異なるエイリアスを持つことです。

たとえば、ブラウザを開いて、http://notebooks/ではなくhttp://localhost:8888http://flaskappの代わりにhttp://localhost:9000を使用したいと思います。

これを行う簡単な方法はありますか?

3
lucacerone

何らかの形式の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 vimSudo -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このルールを適用します。
2
muru