Nginx の最大のハイライトはリバース プロキシと負荷分散です。この記事では、Nginx の負荷分散の構成について詳しく説明します。
負荷分散
まず、負荷分散とは何かを簡単に理解します。文字通りに理解すると、N 台のサーバーが均等に負荷を分散し、高負荷のために特定のサーバーがダウンしたり、特定のサーバーがアイドル状態になったりすることはありません。したがって、負荷分散の前提は、複数のサーバーで実現できること、つまり 3 台以上のサーバーで十分であるということです。
テスト環境
サーバーがないため、このテストでは指定されたドメイン名を直接ホストし、VMware に 3 つの CentOS をインストールします。
テストドメイン名: a.com
サーバーIP: 192.168.5.149 (メイン)
BサーバーIP: 192.168.5.27
CサーバーIP: 192.168.5.126
導入のアイデア
サーバー A はメイン サーバーとして機能し、ドメイン名はサーバー A (192.168.5.149) に直接解決され、サーバー A はサーバー B (192.168.5.27) とサーバー C (192.168.5.126) に負荷分散されます。
写真に示すように:
ドメイン名解決
実際の環境ではないので、ドメイン名はテスト用のa.comになっているだけなので、a.comの解像度はhostsファイルでしか設定できません。
開く: C:WindowsSystem32driversetchosts
最後に
を追加します
192.168.5.149 a.com
保存して終了し、コマンド モードを開始して ping を実行して、設定が成功したかどうかを確認します
スクリーンショットから判断すると、a.com は 192.168.5.149IP に正常に解決されました
サーバーのnginx.conf設定
nginx.conf を開きます。ファイルの場所は nginx インストール ディレクトリの conf ディレクトリにあります。
次のコードを http セクションに追加します
<code>upstream a<span>.</span>com { server <span>192.168</span><span>.5</span><span>.126</span>:<span>80</span>; server <span>192.168</span><span>.5</span><span>.27</span>:<span>80</span>; } server{ listen <span>80</span>; server_name a<span>.</span>com; location <span>/</span> { proxy_pass http:<span>//a.com;</span> proxy_set_header Host <span>$host</span>; proxy_set_header X<span>-Real</span><span>-IP</span><span>$remote_addr</span>; proxy_set_header X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>; } }</code>
保存して nginx を再起動します
B.Cサーバーのnginx.conf設定
nginx.conf を開き、http セクションに次のコードを追加します
<code><span>server</span>{ listen <span>80</span>; server_name a.com; <span>index</span><span>index</span>.html; root /data0/htdocs/www; }</code>
保存して nginx を再起動します
テスト
a.comにアクセスする際、どのサーバーにリダイレクトされて処理されるかを区別するために、サーバーBとサーバーCの下にそれぞれ内容の異なるindex.htmlファイルを書きました。
ブラウザを開いて a.com にアクセスすると、すべてのリクエストがメイン サーバー (192.168.5.149) によってサーバー B (192.168.5.27) とサーバー C (192.168.5.126) に割り当てられ、負荷が発生していることがわかります。バランス効果。
B サーバーがページを処理します
C サーバーがページを処理します
サーバーの 1 つがダウンしたらどうなるでしょうか?
サーバーがダウンした場合、アクセスに影響はありますか?
まず例を見てみましょう。上記の例に基づいて、マシン C サーバー 192.168.5.126 がダウンしていると仮定して (ダウンタイムをシミュレートできないため、C サーバーをシャットダウンします)、再度アクセスします。
訪問結果:
C サーバー (192.168.5.126) がダウンしていましたが、Web サイトへのアクセスには影響がなかったことがわかりました。こうすることで、特定のマシンが負荷分散モードでダウンしているためにサイト全体がドラッグダウンすることを心配する必要がなくなります。
b.com も負荷分散を設定する必要がある場合はどうすればよいでしょうか?
a.comの設定と同じで非常に簡単です。以下の通り:
b.com のメインサーバー IP が 192.168.5.149 で、負荷が 192.168.5.150 と 192.168.5.151 マシンに分散されていると仮定します
次に、ドメイン名 b.com を 192.168.5.149IP に解決します。
メインサーバー (192.168.5.149) の nginx.conf に次のコードを追加します:
<code>upstream b<span>.</span>com { server <span>192.168</span><span>.5</span><span>.150</span>:<span>80</span>; server <span>192.168</span><span>.5</span><span>.151</span>:<span>80</span>; } server{ listen <span>80</span>; server_name b<span>.</span>com; location <span>/</span> { proxy_pass http:<span>//b.com;</span> proxy_set_header Host <span>$host</span>; proxy_set_header X<span>-Real</span><span>-IP</span><span>$remote_addr</span>; proxy_set_header X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>; } }</code>
nginx を保存して再起動します
192.168.5.150 および 192.168.5.151 マシンで nginx をセットアップし、nginx.conf を開いて最後に次のコードを追加します。
<code><span>server</span>{ listen <span>80</span>; server_name b.com; <span>index</span><span>index</span>.html; root /data0/htdocs/www; }</code>
保存重启nginx
完成以后步骤后即可实现b.com的负载均衡配置。
主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。
如以上案例三台服务器:
A服务器IP :192.168.5.149 (主)
B服务器IP :192.168.5.27
C服务器IP :192.168.5.126
我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。
我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:
1、主服务器转发到了其它IP上,其它IP服务器正常处理;
2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。
怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理a.com的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:
<code><span>server</span>{ listen <span>8080</span>; server_name a.com; <span>index</span><span>index</span>.html; root /data0/htdocs/www; }</code>
重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问
既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:
<code>upstream a.com { <span>server</span><span>192.168</span><span>.5</span><span>.126</span>:<span>80</span>; <span>server</span><span>192.168</span><span>.5</span><span>.27</span>:<span>80</span>; <span>server</span><span>127.0</span><span>.0</span><span>.1</span>:<span>8080</span>; }</code>
由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。
主服务器也能正常加入服务了。
最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。
http://www.qttc.net/201208181.html
以上就介绍了Nginx负载均衡设置实例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本篇文章给大家带来了关于nginx的相关知识,其中主要介绍了nginx拦截爬虫相关的,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

高并发系统有三把利器:缓存、降级和限流;限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据);高并发系统常见的限流有:限制总并发数(数据库连接池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(nginx的limit_req模块,用来限制每秒的平均速率);另外还可以根据网络连接数、网络流量、cpu或内存负载等来限流。1.限流算法最简单粗暴的

nginx php403错误的解决办法:1、修改文件权限或开启selinux;2、修改php-fpm.conf,加入需要的文件扩展名;3、修改php.ini内容为“cgi.fix_pathinfo = 0”;4、重启php-fpm即可。

实验环境前端nginx:ip192.168.6.242,对后端的wordpress网站做反向代理实现复杂均衡后端nginx:ip192.168.6.36,192.168.6.205都部署wordpress,并使用相同的数据库1、在后端的两个wordpress上配置rsync+inotify,两服务器都开启rsync服务,并且通过inotify分别向对方同步数据下面配置192.168.6.205这台服务器vim/etc/rsyncd.confuid=nginxgid=nginxport=873ho

跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加

nginx部署react刷新404的解决办法:1、修改Nginx配置为“server {listen 80;server_name https://www.xxx.com;location / {root xxx;index index.html index.htm;...}”;2、刷新路由,按当前路径去nginx加载页面即可。

nginx禁止访问php的方法:1、配置nginx,禁止解析指定目录下的指定程序;2、将“location ~^/images/.*\.(php|php5|sh|pl|py)${deny all...}”语句放置在server标签内即可。

linux版本:64位centos6.4nginx版本:nginx1.8.0php版本:php5.5.28&php5.4.44注意假如php5.5是主版本已经安装在/usr/local/php目录下,那么再安装其他版本的php再指定不同安装目录即可。安装php#wgethttp://cn2.php.net/get/php-5.4.44.tar.gz/from/this/mirror#tarzxvfphp-5.4.44.tar.gz#cdphp-5.4.44#./configure--pr


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









