ホームページ >バックエンド開発 >PHPチュートリアル >NginxとApacheがポート80を共有する設定方法を詳しく解説

NginxとApacheがポート80を共有する設定方法を詳しく解説

不言
不言オリジナル
2018-05-05 09:57:392640ブラウズ

この記事では、主に Nginx と Apache がポート 80 を共有する設定方法を紹介します。もちろん、Nginx が Apache とポート 80 を競合しないようにしたい場合は、この記事の最後に Nginx のポート変更方法も添付します。参照できます

典型的な例 Nginx + Apache アプリケーション ソリューションでは、Nginx がポート 80 を占有し、静的リクエストをフィルターし、Apache ポート 8080 にプロキシを動的にリクエストします。プロキシ リバース プロキシの利点は、アクセスするときは常にポート 80 であり、訪問者は違いに気付かないことです。

しかし、一部のアプリケーションは確かに非常に「賢い」もので、Apache が配置されているポートが 8080 であることを認識し、関連するすべてのハイパーリンクに 8080 を追加します。すでに停止している場合でも、通常どおりアクセスできますか? !

この問題を解決する方法は、Apache をポート 80 で実行することです。同じサーバーに Nginx と Apache、2 つの httpd サービスがあり、どちらも 80 ですが、競合は発生しませんか?

以下は一例です。
Nginx.conf の

server {
 listen 80;
 server_name www.webyang.net;
}

の設定を変更します。

server {
 listen 192.168.3.3:80;  #指定Nginx只占用某个IP的80端口。
 listen 192.168.10.3:80;  #如果你服务器中有多个IP,还可以指定多个。
 server_name www.webyang.net;
}

Nginx に複数の仮想ホストがある場合、それぞれを次のように変更する必要があります。

次はApacheのhttpd.confの出番です
元の

Listen 80


Listen 127.0.0.1:80

に変更します。Nginxと同様に、Apacheが占有するIPとポートを指定します。
保存して終了し、Apache を再起動して有効にします。
Apache 上に複数の仮想ホストがある場合。すべてがポート 80 上にある限り、Nginx のように 1 つずつ変更する必要はありません。

例:

NameVirtualHost *:80
<VirtualHost *:80>
 ServerAdmin hello@abc.com
 DocumentRoot /data/web_server/admin
 ServerName www.webyang.net
</VirtualHost>

すべてうまくいくと思いますか?いいえ。

そのような Apache には http://127.0.0.1:80 経由でのみアクセスできるため、ポート 80 を占有することは意味がありません。 Apache には 8080、nginx には 80 を使用することをお勧めします。
そのため、現時点でサーバーに複数の IP がある場合、Apache を 127.0.0.1 にバインドするだけでなく、別のネットワーク カードの IP をバインドすることもでき、問題は解決されます。

しかし、ほとんどの人は独立した IP を 1 つしか持っていないため、この方法は多くの人にとって蜃気楼です。
アイデアを変更して、Apache はポート 8080 のままで、1 つの nginx ドメイン名の conf ファイルを変更します

location / {
 try_files $uri @apache;
}
 
location @apache {
 internal;
 proxy_pass http://127.0.0.1:8080;
}
 
location ~ .*.(php|php5)?$ {
 proxy_pass http://127.0.0.1:8080;
}

現時点では、静的ファイルを含むドメイン名のすべてのアクションは Apache に送られます。

こんな風に書く人も多いです

upstream zend {
 server 127.0.0.1:8080;
}
 
location / {
 proxy_pass  http://zend;
 proxy_redirect   off;
 proxy_set_header  Host $host;
 proxy_set_header  X-Real-IP $remote_addr;
 proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header   X-Scheme $scheme;
}
 
location ~ .*.(php|php5)?$ {
 proxy_pass  http://zend;
 proxy_redirect   off;
 proxy_set_header  Host $host;
 proxy_set_header  X-Real-IP $remote_addr;
 proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header   X-Scheme $scheme;
}

大体似たような感じです。

Nginxポートの変更
nginx.confファイルの実装を変更します。このファイルのパスは、Linux では /usr/local/nginx/conf/nginx.conf、Windows ではインストール ディレクトリ confnginx.conf です。

server {
 listen  80;
 server_name localhost;
 
 ……
}


server {
 listen  81;
 server_name localhost;
 
 location / {
 root html;
 index index.html index.htm;
 }
 ……
}

に変更します。 もちろん、8080、8081 などに変更します。81 である必要はありませんが、iptable がポートへのアクセスを許可していることを確認してください。

場所の構成に注意してください:

root html; #根目录,相对于安装目录 
index index.html index.htm; #默认主页

デフォルトでは、ファイルはインストールディレクトリの html フォルダーに置かれ、Nginx を通じてアクセスできます。

関連する推奨事項:

Nginx と Apache の比較

以上がNginxとApacheがポート80を共有する設定方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。