Pythonを使用して非常に単純なWebサーバーを作成できることがわかりました。私はすでにApacheWebサーバーを持っていますが、このマシンでPythonベースのWebサーバーを試してみたいと思います。でも、やってみるとなんらかの葛藤が出るのではないかと思います。つまり、2つのWebサーバーが、クライアントからの要求を処理する必要があるユーザーをどのように「決定」するのでしょうか。
7 に答える
それらに異なるポートをリッスンさせると、問題はありません。
デフォルトのWebポートは80です。ポートを指定せずにブラウザでURLを開くと、デフォルトで80が使用されます。
別のポートをリッスンするようにWebサーバーを構成できますが、URLで明示的に指定する必要もあります。
http://localhost:8080
ポートを選択するときは、この特定のポート番号が、ボックスにインストールして実行しているソフトウェアでまだ使用されていないことに注意してください。そうしないと、正しく推測したように、競合が発生します。
PSほんの数日前に再インストールを行ったところ、IISを起動できませんでした(理由がないようです)。新しいバージョンのSkypeがこのデフォルトポートを占有していることが判明しました!「着信接続の代替としてポート80と443を使用する」という設定を削除する必要がありました。
実際に別々のサーバーを実行してサーバーソフトウェアをテストしたい場合は、他の回答を参照してくださいが...
(あなたは開発者であり、システム管理者ではないので?)本当に同じコンピューターでPythonサイトとPHPサイトを実行したいようです。ですから、私があなたの質問を読んでいるなら許してください、しかしこのセットアップは私が1つのサーバー、Apacheの同じポート(ポート80)で同じコンピューター上で両方の種類のサイトを実行することを可能にします。
/ etc / hostsファイル(またはWindowsの場合はC:\ Windows \ System32 \ drivers \ etc \ hosts)に新しいエントリを作成し、それらを127.0.0.1にポイントします。
127.0.0.1 localhost
# development projects
127.0.0.1 somephpsite.com.local
127.0.0.1 www.somephpsite.com.local
127.0.0.1 otherpythonsite.com.local
127.0.0.1 www.otherpythonsite.com.local
次に、Apacheで、サイトごとにVirtualHostsを追加します。
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/Documents"
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
<Directory "/Users/Robert/Projects/SomeSite/somephpsite.com">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
DocumentRoot "/Users/Robert/Projects/SomeSite/somephpsite.com"
ServerName somephpsite.com.local
ServerAlias www.somephpsite.com.local
ErrorLog "/Users/Robert/Projects/SomeSite/error.log"
CustomLog "/Users/Robert/Projects/SomeSite/access.log" common
</VirtualHost>
<VirtualHost *:80>
<Directory "/Users/Robert/Projects/OtherSite/otherpythonsite.com">
Order allow,deny
Allow from all
</Directory>
DocumentRoot "/Users/Robert/Projects/OtherSite/otherpythonsite.com/static"
Alias /(.*(\.css|\.gif|\.ico|\.jpg|\.js|\.pdf|\.txt)) /Users/Robert/Projects/OtherSite/otherpythonsite.com/static/$1
WSGIScriptAlias / /Users/Robert/Projects/OtherSite/otherpythonsite.com/wsgi.py
ServerName otherpythonsite.com.local
ServerAlias www.otherpythonsite.com.local
ErrorLog "/Users/Robert/Projects/OtherSite/error.log"
CustomLog "/Users/Robert/Projects/OtherSite/access.log" common
</VirtualHost>
したがって、PHPサイトはDocumentRoot
いつものように実行されます。また、PythonサイトはWSGIで実行されます。そして、どちらもApacheで実行されます。次に、テストするために、ローカルコピーでの作業に使用しているブラウザに「.local」を追加するだけです。
Webサーバーは特定のポートに関連付けられています。通常、これはポート80です。ポートが明示的に指定されていない場合、これはブラウザがヒットしようとするポートです。
代替サーバーを別のポートで実行することができます(8080または8081はWebサーバーの一般的な代替手段のようですが、選択はあなた次第です)。
これにより、競合が発生しなくなります。ポート80に送られるものはすべて、古いサーバーにヒットします。8080(またはサーバーを実行することを決定したポート)に行くすべてのものは、単純なPythonサーバーにヒットします。
他のサーバーにアクセスするには、次のようなURLを使用します:-
同じポート(デフォルトは80)で2つのWebサーバーを開くことはできません。2つ以上のWebサーバーを作成する場合は、異なるポートを使用する必要があります。
DNSを使用している場合は、さまざまな要求にさまざまなWebサイトで応答するようにWebサーバーを簡単に設定できます。これは、サブドメインまたはさまざまなドメインにさまざまなWebサイトが必要な場合に役立ちます。
https(ポート443)リクエストを処理するために1台のサーバーを専用にすることをお勧めします。
そうすれば、他の人が言及しているポートの競合を回避しながら、ユーザーがブラウザに奇妙なもの(任意のポート番号)を入力する必要がなくなります。各サーバーにトラフィックを他のサーバーにリダイレクトさせることもできます(たとえば、httpサーバーはhttpsサーバーが処理することを知っているホスト名のhttpリクエストを受信するため、同じホスト名でリクエストをhttpsにリダイレクトできるため、リクエストをに転送できます。適切なサーバー)。
サーバーA:
http://localhost
サーバーB:
https://localhost
Webサーバーは、誰が接続要求を処理するかについては何もわかりません(このタスクはまだオペレーティングシステムレベルです)。さらに、特別なソケットオプションがない場合、ソケットはインターフェイス、インターネットアドレス、およびポートの一意の組み合わせにバインドする必要があります。
はい、2つの方法で同じコンピューター上で2つの異なるサーバーを実行できます(もちろん、異なるポート番号で同じIP上で実行する別の方法があります)
- 2つのサーバーを実行できます。1つはローカルホストで、もう1つはIPアドレスで実行できます。このためのノードコードを共有します
サーバー1:
app.listen(PORT, "localhost", () => {
console.log("Server is running on ${PORT} in ${process.env.NODE_ENV}");
});
サーバー2:
app.listen(PORT, "youy computer ip", () => {
console.log(server is running on ${PORT} in ${process.env.NODE_ENV});
});
- 異なるポート番号を介して同じローカルホストで2つの異なるサーバーを実行することも、同じポートで2つの異なるローカルホストを実行することもできます(ローカルホストの範囲
127.0.0.0
-127.255.255.255
)