当前位置:首页 » 操作系统 » linuxnginx配置负载均衡

linuxnginx配置负载均衡

发布时间: 2023-08-10 14:22:39

‘壹’ nginx负载均衡怎么访问数据库

nginx 是一个轻量级的、高性能的 web server 主要可以干两件事情:

1、直接作为http server(代替apache,对php需要FastCGI处理器支持);
2、作为反向代理服务器实现负载均衡

以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。

方法/步骤
1
一、环境:
a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的linux系统。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );

b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

c. 如下介绍两种方法实现server cluster的负载均衡。
我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;
后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。

2
二、针对不同请求 的负载均衡:
a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;
当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。
如上是最为简单的使用nginx做为反向代理服务器的例子;
b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
我们设置nginx.conf的server模块部分,将对应部分修改为:
复制代码 代码如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127.0.0.1:80 ;
}
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
如果客户端访问URL是http://localhost/test.php 的话,则会被pass到158.37.70.143:80 的apache进行处理。
因此综上,我们实现了针对不同请求的负载均衡。
如果用户访问静态页面index.html,最前端的nginx直接进行响应;
如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;
如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;

3
三、 访问同一页面 的负载均衡:
即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。

b. 因此重新配置nginx.conf为:
首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 ;
server 158.37.70.143:80 ;
}
表示这个server cluster包含2台服务器
〉然后在server模块中定义,负载均衡:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
proxy_ www.gzlij.comredirect 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;
}
这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 weight=5;
server 158.37.70.143:80 ;
}

4
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。

‘贰’ nginx基本配置(参考)

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。

6、缓存控制字段cache-control的配置说明 ( https://www.cnblogs.com/kevingrace/p/10459429.html )

HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。

no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.
no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源).
private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.
public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.
max-age: 相对过期时间, 即以秒为单位的缓存时间.
no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.

设置以分钟为单位的绝对过期时间, 优先级比Cache-Control低, 同时设置Expires和Cache-Control则后者生效. 也就是说要注意一点: Cache-Control的优先级高于Expires

expires起到控制页面缓存的作用,合理配置expires可以减少很多服务器的请求, expires的配置可以在http段中或者server段中或者location段中. 比如控制图片等过期时间为30天

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

‘叁’ linux 怎么用nginx 搭建网站

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器。Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现。它可以让我们更加专注于应用的开发,而不是基础架构。Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置。容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里。在这个教程里我们将会使用 weave 快速并且简单地将 nginx web 服务器部署为一个负载均衡器,反向代理一个运行在 Amazon Web Services 里面多个节点上的 docker 容器中的简单 php 应用。这里我们将会介绍 WeaveDNS,它提供一个不需要改变代码就可以让容器利用主机名找到的简单方式,并且能够让其他容器通过主机名连接彼此。 在这篇教程里,我们将使用 nginx 来将负载均衡分配到一个运行 Apache 的容器集合。最简单轻松的方法就是使用 Weave 来把运行在 ubuntu 上的 docker 容器中的 nginx 配置成负载均衡服务器。 Docker之weave工具 weave是什么呢?weave创建了一个虚拟网络,用来连接部署在多台机器上的docker容器。 下面看看weave的应用场景: 应用在使用该网络的时候就像所有的容器都在同一个交换机网络下一样,不需要配置端口映射、连接等等,容器中的应用提供的服务在weaver网络中可以被外部世界访问,不论你的容器运行在哪里。同样的,已经存在的系统应用也可以暴露给容器中的应用来调用,而不用担心内部应用运行的位置。 weave可以穿透防火墙,流量是被加密的,允许主机连接通过一个不被信任的网络,使用weave你可以方便的部署多个容器在不同的地方运行 假如你有一个docker应用运行在两台不同的主机HOST1和HOST2上面,也就是我们要在这两台主机上各部署一个相同类型的docker应用。 在HOST1上面:启动weave 代码如下: #这一步先启动weave路由,需要在每一台HOST上都启动 weave launch #启动一个容器,在命令行设置了一个ip,weave run调用docker run -d,因此我们可以使用这种办法启动一个容器,同理存在weave start命令,它是调用docker start命令启动已经存在的容器,如果我们在该HOST1上有多个容器要部署,则继续执行第二行的命令即可,只要保证容器设置的ip没有冲突即可,同一个网段的ip可以到处使用 ssh=$(weave run 10/weaveworks/guides $ cd weave-gs/aws-nginx-ubuntu-simple 在克隆完仓库之后,我们执行下面的脚本,这个脚本将会部署两个 t1.micro 实例,每个实例中都是 ubuntu 作为操作系统并用 weave 跑着 docker 容器。 复制代码 代码如下: $ sudo ./demo-aws-setup.sh 在这里,我们将会在以后用到这些实例的 IP 地址。这些地址储存在一个 weavedemo.env 文件中,这个文件创建于执行 demo-aws-setup.sh 脚本期间。为了获取这些 IP 地址,我们需要执行下面的命令,命令输出类似下面的信息。 代码如下: $ cat weavedemo.env export WEAVE_AWS_DEMO_HOST1=52.26.175.175 export WEAVE_AWS_DEMO_HOST2=52.26.83.141 export WEAVE_AWS_DEMO_HOSTCOUNT=2 export WEAVE_AWS_DEMO_HOSTS=(52.26.175.175 52.26.83.141) 请注意这些不是固定的 IP 地址,AWS 会为我们的实例动态地分配 IP 地址。 我们在 bash 下执行下面的命令使环境变量生效。 代码如下: . ./weavedemo.env 2. 启动 Weave 和 WeaveDNS 在安装完实例之后,我们将会在每台主机上启动 weave 以及 weavedns。Weave 以及 weavedns 使得我们能够轻易地将容器部署到一个全新的基础架构以及配置中, 不需要改变代码,也不需要去理解像 Ambassador 容器以及 Link 机制之类的概念。下面是在第一台主机上启动 weave 以及 weavedns 的命令。 代码如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1 $ sudo weave launch $ sudo weave launch-dns 10.2.1.1/24 下一步,我也准备在第二台主机上启动 weave 以及 weavedns。 代码如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2 $ sudo weave launch $WEAVE_AWS_DEMO_HOST1 $ sudo weave launch-dns 10.2.1.2/24 3. 启动应用容器 现在,我们准备跨两台主机启动六个容器,这两台主机都用 Apache2 Web 服务实例跑着简单的 php 网站。为了在第一个 Apache2 Web 服务器实例跑三个容器, 我们将会使用下面的命令。 复制代码 代码如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1 $ sudo weave run --with-dns 10.3.1.1/24 -h ws1.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.2/24 -h ws2.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.3/24 -h ws3.weave.local fintanr/weave-gs-nginx-apache 在那之后,我们将会在第二个实例上启动另外三个容器,请使用下面的命令。 代码如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2 $ sudo weave run --with-dns 10.3.1.4/24 -h ws4.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.5/24 -h ws5.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.6/24 -h ws6.weave.local fintanr/weave-gs-nginx-apache 注意: 在这里,--with-dns 选项告诉容器使用 weavedns 来解析主机名,-h x.weave.local 则使得 weavedns 能够解析该主机。 4. 启动 Nginx 容器 在应用容器如预期的运行后,我们将会启动 nginx 容器,它将会在六个应用容器服务之间轮询并提供反向代理或者负载均衡。 为了启动 nginx 容器,请使用下面的命令。 复制代码 代码如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1 $ sudo weave run --with-dns 10.3.1.7/24 -ti -h nginx.weave.local -d -p 80:80 fintanr/weave-gs-nginx-simple 因此,我们的 nginx 容器在 $WEAVEAWSDEMO_HOST1 上公开地暴露成为一个 http 服务器。 5. 测试负载均衡服务器 为了测试我们的负载均衡服务器是否可以工作,我们执行一段可以发送 http 请求给 nginx 容器的脚本。我们将会发送6个请求,这样我们就能看到 nginx 在一次的轮询中服务于每台 web 服务器之间。 代码如下: $ ./access-aws-hosts.sh { "message" : "Hello Weave - nginx example", "hostname" : "ws1.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws2.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws3.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws4.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws5.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws6.weave.local", "date" : "2015-06-26 12:24:23" } 结束语 我们最终成功地将 nginx 配置成一个反向代理/负载均衡服务器,通过使用 weave 以及运行在 AWS(Amazon Web Service)EC2 里面的 ubuntu 服务器中的 docker。从上面的步骤输出可以清楚的看到我们已经成功地配置了 nginx。我们可以看到请求在一次轮询中被发送到6个应用容器,这些容器在 Apache2 Web 服务器中跑着 PHP 应用。在这里,我们部署了一个容器化的 PHP 应用,使用 nginx 横跨多台在 AWS EC2 上的主机而不需要改变代码,利用 weavedns 使得每个容器连接在一起,只需要主机名就够了,眼前的这些便捷, 都要归功于 weave 以及 weavedns。

‘肆’ nginx配置文件详解

一、安装Nginx
在安装Nginx之前,需确保系统已经安装了gcc、 openssl-devel、 pcre-devel和zlib-devel软件库。

其中, _with-http_stub_status_mole 可以用来启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的运行状态。

二、Nginx的配置文件结构
Nginx的配置文件nginx.conf位于其安装目录的conf目录下。

nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location。

main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。

1、main块设置的指令将影响其他所有设置。

2、server块的指令主要用唤搜于指定主机和端口。

3、upstream指令主要用于负载均衡,设置一系列的后端服务器。

4、location块用于匹配网页位置。

这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。

在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。

三、Nginx的全局配置

events事件指令是设定Nginx的工作模式及连接数上限:

use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。

其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数和塌历,默认是1024。

最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。

在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。

进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。

四、下面配置Nginx的HttpGzip模块。这个模块支持在线实时压缩输出数据流。

通过/opt/nginx/sbin/nginx -V命令可以查看安装Nginx时的编译选项,由输出可知,已经安装了HttpGzip模块。

五、负载均衡配置

下面设定负载均衡的服务器列表:

upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。

在上面的设定中,通过upstream指令指定了一个负载均衡器的名称cs.com。这个名称可以任意指定,在后面需要的地方直接调用即可,Nginx的负载均衡模块目前支持4种调度算法。

六、server虚拟主机配置

下面介绍对虚拟主机的配置。

建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过include指令包含进来,这样更便于维护和管理。

server标志定义虚拟主机开始,listen用于指定虚拟主机的服务端口,server_name用来指定IP地址或者域名,多个域名之间用空格分 开。index用于设定访问的默认首页地址,衫搏root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。

Charset用于 设置网页的默认编码格式。access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

七、location URL匹配配置

URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。

以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。

八、StubStatus模块配置

StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用此功能。

stub_status设置为“on”表示启用StubStatus的工作状态统计功能。access_log 用来指定StubStatus模块的访问日志文件。auth_basic是Nginx的一种认证机制。

auth_basic_user_file用来指定认证的密码文件,由于Nginx的auth_basic认证采用的是与Apache兼容的密码文件,因此需要用Apache的htpasswd命令来生成密码文件。

然后输入两次密码后确认之后添加用户成功。

要查看Nginx的运行状态,可以输入http://ip/NginxStatus,输入创建的用户名和密码就可以看到Nginx的运行状态。

Active connections表示当前活跃的连接数,第三行的三个数字表示 Nginx当前总共处理了34561个连接, 成功创建次握手, 总共处理了354399个请求。

最后一行的Reading表示Nginx读取到客户端Header信息数, Writing表示Nginx返回给客户端的Header信息数,“Waiting”表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数。

在最后这段设置中,设置了虚拟主机的错误信息返回页面,通过error_page指令可以定制各种错误信息的返回页面。在默认情况下,Nginx会在主目录的html目录中查找指定的返回页面。

特别需要注意的是,这些错误信息的返回页面大小一定要超过512K,否者会被ie浏览器替换为ie默认的错误页面。

‘伍’ 不容错过的Nginx配置详解,一文带你搞懂Nginx

Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

需要客户自己在浏览器配置代理服务器地址

例如:在大陆访问www.google.com,我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。

反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡。

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

进入到下面的目录,然后使用命令

配置文件所在位置:/usr/local/nginx/conf/nginx.conf

由全局块+events块+http块组成

从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等。

events块设计的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。下面的例子表示每个work process支持的最大连接数为1024。这部分配置对Nginx的性能影响较大,在实际中应该灵活配置。

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。

http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。

每个server块也可以分为全局server块,以及可以同时包含多个location块。

最常见的配置时本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

访问http://ip,访问到的是Tomcat的主页面http://ip:8080。

Nginx+JDK8+Tomcat

访问:http://192.168.71.167/,看到的是Tomcat的首页。

根据访问的路径跳转到不同的服务器中去。

访问http://ip:9001/e 直接跳到http://127.0.0.1:8080/e

访问http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod

Nginx+JDK8+配置两个Tomcat,Tomcat的配置不再讲述。

访问http://192.168.71.167:9001/e/a.html跳到了http://127.0.0.1:8080/e/a.html页面。

访问http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html页面。

假如Nginx代理服务器Server的配置为:192.168.71.167:9001,跳到:127.0.0.1:8080,访问者的IP为:192.168.71.200:20604。

通过访问http://192.168.71.167/e/a.html,实现负载均衡的效果,平均分摊到8080和8081端口中。

Nginx+JDK8+2台Tomcat,一台8080,一台8081。

访问:http://192.168.71.167/e/a.html,8080和8081交替访问。

1 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2 weight

weight代表权重,默认为1,权重越高被分配的客户端越多。

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3 ip_hash

每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,示例如下:

4 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

访问图片:http://192.168.71.167/image/1.jpg

访问页面:http://192.168.71.167/www/a.html

访问目录:http://192.168.71.167/image/(因为设置了autoindex on;)

两台机器,每台机器都装有keepalived+Nginx+Tomcat。

主备keepalived服务器中只有master一台机器会出现VIP地址,否则会出现脑裂问题。

【提示】脚本要加+x的执行权限:chmod +x chk_nginx.sh

在Nginx里把虚拟IP配置进去即可。

一个Nginx是由一个master进程和多个worker进程组成的。

客户端发送请求到Master,然后给worker,再由这些work争抢处理这个请求。

1 可以使用nginx -s reload进行热部署方式;

2 每个worker是独立的进程,如果有其中的一个worker出现了问题,其他worker独立的继续进行争抢,实现请求的过程,不会造成服务的中断;

Nginx和Redis类似,都采用了io多路复用机制。每个worker进程都可以把CPU发挥到极致,一般来说worker数和服务器的CPU数相等是最为适宜的。

发送请求:访问静态资源占用2个连接,反向代理占用4个连接。

【温馨提示】

热点内容
登录密码什么意思啊 发布:2025-03-11 06:52:24 浏览:688
q2l哪个配置最值 发布:2025-03-11 06:50:19 浏览:915
嗨皮咳嗽国际服服务器地址 发布:2025-03-11 06:37:12 浏览:697
网易我的世界如何登陆服务器 发布:2025-03-11 06:23:22 浏览:713
用电脑玩逆战连接服务器很久 发布:2025-03-11 06:13:18 浏览:181
天翼智能路由器的初始密码是多少 发布:2025-03-11 06:10:17 浏览:914
安卓机怎么领岭南通 发布:2025-03-11 05:56:54 浏览:132
求生之路2虐电脑服务器 发布:2025-03-11 05:35:40 浏览:632
编译学堂 发布:2025-03-11 05:31:06 浏览:185
苹果文件夹隐藏 发布:2025-03-11 05:26:42 浏览:546