web-dev-qa-db-ja.com

同じコンピューターで2つのWebサーバーを実行できますか?

Pythonを使用して本当に 単純なWebサーバー を記述できることがわかりました。私はすでにApacheWebサーバーを持っています。このマシンでPythonベースのWebサーバーを試してみたいです。しかし、試してみると、なんらかの競合が発生する可能性があります。つまり、 2つのWebサーバーが、クライアントからの要求を処理する必要があるのは誰かを「決定」しますか?

18
Roman

それらに異なるポートをリッスンさせると、問題はありません。

デフォルトのWebポートは80です。ポートを指定せずにブラウザでURLを開くと、デフォルトで80が使用されます。

別のポートをリッスンするようにWebサーバーを構成できますが、URLで明示的に指定する必要もあります。

http://localhost:8080

ポートを選択するときは、この特定のポート番号が、ボックスにインストールして実行しているソフトウェアでまだ使用されていないことに注意してください。そうしないと、正しく推測したように、競合が発生します。

P.S.ほんの数日前に再インストールを行ったところ、IIS起動できません(理由がないようです)。新しいバージョンのSkypeがこのデフォルトのポートを占有していることが判明しました!「ポート80を使用」の設定を削除する必要がありましたおよび着信接続の代替としての443」。

29
user151323

実際に別々のサーバーを実行してサーバーソフトウェアをテストしたい場合は、他の回答を参照してくださいが...

(あなたは開発者であり、システム管理者ではないので?)あなた本当に実行したいだけですPython and PHP同じコンピューター上のサイトです。質問を読んでいる場合はご容赦ください。ただし、この設定により、同じコンピューター上で同じポート(ポート80)の両方の種類のサイトを1つのサーバーApacheで実行できます。

/ 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」を追加するだけです。

9
Robert

Webサーバーは特定のポートに関連付けられています。通常、これはポート80です。ポートが明示的に指定されていない場合、これはブラウザがヒットしようとするポートです。

代替サーバーを別のポートで実行することができます(8080または8081はWebサーバーの一般的な代替手段のようですが、選択はあなた次第です)。

これにより、競合が発生しなくなります。ポート80に送られるものはすべて、古いサーバーにヒットします。 8080(またはサーバーを実行することを決定したポート)に行くすべてのものは、単純なpythonサーバーにヒットします。

他のサーバーにアクセスするには、次のようなURLを使用します:-

http:// localhost:8080 /

8

同じポート(デフォルトは80)で2つのWebサーバーを開くことはできません。2つ以上のWebサーバーを作成する場合は、異なるポートを使用する必要があります。

DNSを使用している場合は、さまざまな要求にさまざまなWebサイトで応答するようにWebサーバーを簡単に設定できます。これは、サブドメインまたはさまざまなドメインにさまざまなWebサイトが必要な場合に役立ちます。

1
jpabluz

Webサーバーは、誰が接続要求を処理するかについては何も言いません(このタスクはまだオペレーティングシステムレベルです)。さらに、特別なソケットオプションがない場合、ソケットはインターフェイス、インターネットアドレス、およびポートの一意の組み合わせにバインドする必要があります。

1
Matt Joiner

Https(ポート443)リクエストの処理に1台のサーバーを割り当てることをお勧めします。

そうすれば、他の人が言及したポートの競合を回避しながら、ユーザーがブラウザに奇妙なもの(任意のポート番号)を入力する必要がなくなります。各サーバーにトラフィックを他のサーバーにリダイレクトさせることもできます(たとえば、httpサーバーはhttpsサーバーが処理することを知っているホスト名のhttpリクエストを受信するため、同じホスト名でリクエストをhttpsにリダイレクトできるため、リクエストをに転送できます。適切なサーバー)。

サーバーA:

http://localhost

サーバーB:

https://localhost
1
Dolph