ubuntu 安装nginx,配置,负载均衡
概述
Nginx 是世界上最受欢迎的web服务器,许多大流量的主机都采用Nginx作为服务器。在大多数场景下作为web服务器的Nginx比Apache更加节省资源,它也可当作反向代理服务器。
本文主要介绍如何在ubuntu16.04上安装Nginx
前提条件
开始以前,你需要有一个安装好的ubuntu16.04,并且你需要有一个拥有sudo权限的非root普通用户。
第一步:安装Nginx
Ubuntu默认的源中就有Nginx,所以安装是比较简单的。
首先,更新apt源,以便软件是最新的,然后就可以安装nginx:
- sudo apt-get update
- sudo apt-get install nginx
执行这两个命令之后,apt-get就会安装好Nginx和它依赖的软件。
第二步:配置防火墙
开始测试Nginx前,我们需要配置防火墙,以便允许外界访问nginx服务。Nginx在安装的时候使用ufw注册自己作为一个服务,这样对nginx的访问就会变得很容易。
显示所有ufw应用的配置:
sudo ufw app list
你可以得到一个配置的输出列表:
|
1
2
3
4
5
6
|
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
|
我们可以看到,有三个Nginx的配置:
- Nginx Full: 这个配置打开 80端口和443端口
- Nginx HTTP: 这个配置只打开80 (普通, 未加密通信)
- Nginx HTTPS: 这个配置只打开 443 (TLS/SSL 加密通信 )
一般来说我们应该配置最严的限制,因为本文我们还没有配置SSL,所以我们只打开80端口。
我们执行:
|
1
|
sudo ufw allow 'Nginx HTTP'
|
验证修改状态:
|
1
|
sudo ufw status
|
我们可以看到HTTP是被打开的:
|
1
2
3
4
5
6
7
8
9
|
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
|
第三步: 检查你的web server
安装完成后,Ubuntu 16.04 会自动启动 Nginx. 我们可以使用systemd 检查运行状态:
|
1
|
systemctl status nginx
|
|
1
2
3
4
5
6
7
8
|
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: <span class="highlight">active (running)</span> since Mon 2016-04-18 16:14:00 EDT; 4min 2s ago
Main PID: 12857 (nginx)
CGroup: /system.slice/nginx.service
├─12857 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
└─12858 nginx: worker process
|
服务已经正常启动,当然最好的确认方法是通过访问web页面的方式。
如果我们能访问到默认加载页就证明启动成功了。
如果你不知道服务器的ip可以使用如下命令:
|
1
|
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
|
有了IP之后,在浏览器里输入:
http://server_domain_or_IP
你就能看到Nginx的默认加载页了:

第四步: 管理 Nginx 进程
现在我们已经有nginx在运行了,我们可以再试一些管理命令:
停止nginx:
|
1
|
sudo systemctl stop nginx
|
启动nginx:
|
1
|
sudo systemctl start nginx
|
重启nginx:
|
1
|
sudo systemctl restart nginx
|
修改配置文件后,平滑加载配置命令(不会断开用户访问):
|
1
|
sudo systemctl reload nginx
|
默认,nginx是随着系统启动的时候自动运行。如果你不想开机启动,那么你可以禁止nginx开机启动:
|
1
|
sudo systemctl disable nginx
|
重新配置nginx开机自动启动:
|
1
|
sudo systemctl enable nginx
|
第五步: 熟悉Nginx的文件和目录
现在我们已经管理nginx了,接下来可以熟悉一下nginx的目录结构和一些重要的文件:
网站文件位置
-
-
/var/www/html: 网站文件存放的地方, 默认只有我们上面看到nginx页面,可以通过改变nginx配置文件的方式来修改这个位置。
-
服务器配置
-
-
/etc/nginx: nginx配置文件目录。所有的nginx配置文件都在这里。/etc/nginx/nginx.conf: Nginx的主配置文件. 可以修改他来改变nginx的全局配置。/etc/nginx/sites-available/: 这个目录存储每一个网站的"server blocks"。nginx通常不会使用这些配置,除非它们陪连接到sites-enabled目录 (see below)。一般所有的server block 配置都在这个目录中设置,然后软连接到别的目录 。/etc/nginx/sites-enabled/: 这个目录存储生效的 "server blocks" 配置. 通常,这个配置都是链接到sites-available目录中的配置文件/etc/nginx/snippets: 这个目录主要可以包含在其它nginx配置文件中的配置片段。重复的配置都可以重构为配置片段。
-
日志文件
-
/var/log/nginx/access.log: 每一个访问请求都会记录在这个文件中,除非你做了其它设置。/var/log/nginx/error.log: 任何Nginx的错误信息都会记录到这个文件中。-
#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; #工作模式及连接数上限 events { #epoll是多路复用IO(I/O Multiplexing)中的一种方式, #仅用于linux2.6以上内核,可以大大提高nginx的性能 use epoll; #单个后台worker process进程的最大并发链接数 worker_connections 1024; # 并发总数是 worker_processes 和 worker_connections 的乘积 # 即 max_clients = worker_processes * worker_connections # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么 # 为什么上面反向代理要除以4,应该说是一个经验值 # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000 # worker_connections 值的设置跟物理内存大小有关 # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数 # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右 # 我们来看看360M内存的VPS可以打开的文件句柄数是多少: # $ cat /proc/sys/fs/file-max # 输出 34336 # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内 # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置 # 使得并发总数小于操作系统可以打开的最大文件数目 # 其实质也就是根据主机的物理CPU和内存进行配置 # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。 # ulimit -SHn 65535 } http { #设定mime类型,类型由mime.type文件定义 include mime.types; default_type application/octet-stream; #设定日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件, #对于普通应用,必须设为 on, #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off, #以平衡磁盘与网络I/O处理速度,降低系统的uptime. sendfile on; #tcp_nopush on; #连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]."; #设定请求缓冲 client_header_buffer_size 128k; large_client_header_buffers 4 128k; #设定虚拟主机配置 server { #侦听80端口 listen 80; #定义使用 www.nginx.cn访问 server_name www.nginx.cn; #定义服务器的默认网站根目录位置 root html; #设定本虚拟主机的访问日志 access_log logs/nginx.access.log main; #默认请求 location / { #定义首页索引文件的名称 index index.php index.html index.htm; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { } #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { #过期30天,静态文件不怎么更新,过期可以设大一点, #如果频繁更新,则可以设置得小一点。 expires 30d; } #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置. location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #禁止访问 .htxxx 文件 location ~ /.ht { deny all; } } }
nginx命令行参数
不像许多其他软件系统,Nginx 仅有几个命令行参数,完全通过配置文件来配置
-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。
-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
-v 显示 nginx 的版本。
-V 显示 nginx 的版本,编译器版本和配置参数。
nginx控制信号
可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/nginx.pid 文件中。通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。
主进程可以处理以下的信号:
TERM, INT 快速关闭 QUIT 从容关闭 HUP 重载配置
用新的配置开始新的工作进程
从容关闭旧的工作进程USR1 重新打开日志文件 USR2 平滑升级可执行程序。 WINCH 从容关闭工作进程 尽管你不必自己操作工作进程,但是,它们也支持一些信号:
TERM, INT 快速关闭 QUIT 从容关闭 USR1 重新打开日志文件 nginx 启动、停止、重启命令
nginx启动
sudo /usr/local/nginx/nginx (nginx二进制文件绝对路径,可以根据自己安装路径实际决定)
nginx从容停止命令,等所有请求结束后关闭服务
ps -ef |grep nginx
kill -QUIT nginx主进程号
nginx 快速停止命令,立刻关闭nginx进程
ps -ef |grep nginx
kill -TERM nginx主进程号
如果以上命令不管用,可以强制停止
kill -9 nginx主进程号
如果嫌麻烦可以不用查看进程号,直接使用命令进行操作
其中/usr/local/nginx/nginx.pid 为nginx.conf中pid命令设置的参数,用来存放nginx主进程号的文件
kill -信号类型(HUP|TERM|QUIT)cat /usr/local/nginx/nginx.pid
例如1kill -QUIT `cat /usr/local/nginx/nginx.pid`nginx重启命令
nginx重启可以分成几种类型
1.简单型,先关闭进程,修改你的配置后,重启进程。
kill -QUITcat /usr/local/nginx/nginx.pid
sudo /usr/local/nginx/nginx
2.重新加载配置文件,不重启进程,不会停止处理请求
3.平滑更新nginx二进制,不会停止处理请求使用信号加载新的配置
Nginx 支持几个信号,能在它运行时控制其操作。其中最普通的是 15 ,用来中止运行的进程:
1234# <strong>ps aux | egrep '(PID|nginx)'</strong>USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 2213 0.0 0.0 6784 2036 ? Ss 03:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf# <strong>kill -15 2213</strong>而最有趣的是能平滑改变 nginx 配置的选项(请注意,在重载前,要先测试一下配置文件):
1234567#<strong> nginx -t -c /etc/nginx/nginx.conf</strong>2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully#<strong> ps aux | egrep '(PID|nginx)'</strong>USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 2213 0.0 0.0 6784 2036 ? Ss 03:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf<strong># kill -HUP 2213</strong>当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接 字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。
平滑升级到新的二进制代码
你可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。
首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程:
123456789PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx)33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
1234567PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx)36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了:
123456PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:
- 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
- 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
- 发送 TERM 信号给新的主进程,迫使其退出
- 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号
新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。
如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:
12345PID PPID USER %CPU VSZ WCHAN COMMAND36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)-
负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法。Nginx是一种流行的Web服务器软件,可以配置为简单但功能强大的负载均衡器,以提高服务器资源的可用性和效率。在负载平衡配置中,nginx充当在多个单独服务器上工作的分布式Web应用程序的单个入口点。 在Web场上进行负载平衡 本文介绍如何使用nginx为云服务器配置负载均衡。作为先决条件,您需要至少安装两台主机并安装Web服务器软件,以便了解负载均衡器的优势。 安装nginx 目前,最新版本的CentOS,Debian和Ubuntu都提供nginx软件包,可以使用命令快速安装nginx。 #Debian和Ubuntu <br>sudo apt-get update <br>#然后安装Nginx开源版 <br>sudo apt-get install nginx 1 #Debian和Ubuntu <br>sudo apt-get update <br>#然后安装Nginx开源版 <br>sudo apt-get install nginx #CentOS <br>#安装额外的软件包存储库 <br>sudo yum install epel-release<br>#更新存储库并安装Nginx <br>sudo yum update <br>sudo yum install nginx 1 #CentOS <br>#安装额外的软件包存储库 <br>sudo yum install epel-release<br>#更新存储库并安装Nginx <br>sudo yum update <br>sudo yum install nginx 安装完成后,进入nginx主配置文件夹。 cd /etc/nginx/ 1 cd /etc/nginx/ 根据您的操作系统不同,Web服务器配置文件将位于两个位置之一。 Ubuntu和Debian遵循在 /etc/nginx/sites-available/, 中存储虚拟主机文件的规则,这些规则 通过符号链接启用到 /etc/nginx/sites-enabled/。您可以使用以下命令启用任何新的虚拟主机文件。 sudo ln -s /etc/nginx/sites-available/<strong>vhost</strong> /etc/nginx/sites-enabled/<strong>vhost</strong><br><br> 1 sudo ln -s /etc/nginx/sites-available/<strong>vhost</strong> /etc/nginx/sites-enabled/<strong>vhost</strong><br><br> CentOS用户可以在/etc/nginx/conf.d/下找到其主机配置文件,加载了任何.conf类型的虚拟主机文件。 检查您是否可以找到至少默认配置,然后重新启动nginx。 sudo systemctl restart nginx 1 sudo systemctl restart nginx 通过在Web浏览器中打开负载均衡器服务器的IP地址来测试服务器是否回复HTTP请求。当您看到nginx的默认欢迎页面时,安装成功。 Nginx默认欢迎页面。 如果您在加载页面时遇到问题,请检查防火墙是否阻止了您的连接。例如,在CentOS 7上,默认防火墙规则不允许HTTP流量,请使用以下命令启用它。 sudsudo firewall-cmd --add-service=http --permanent <br>sudo firewall-cmd --reload<br><br> 1 sudsudo firewall-cmd --add-service=http --permanent <br>sudo firewall-cmd --reload<br><br> 然后尝试重新加载浏览器。 将nginx配置为负载均衡器 安装并测试nginx后,您可以开始配置它以实现负载平衡。从本质上讲,您需要做的就是设置nginx,其中包含要监听的连接类型以及重定向位置的说明。要实现此目的,请使用您喜欢的任何文本编辑器创建新的配置文件,例如使用vi: sudo vi /etc/nginx/conf.d/load-balancer.conf 1 sudo vi /etc/nginx/conf.d/load-balancer.conf 在load-balancer.conf中,您需要定义以下两个段:上游和服务器,请参阅下面的示例。 #定义要包含在负载均衡方案中的服务器。 <br>#最好使用服务器的私有IP以获得更好的性能和安全性。 <br>http {<br> upstream backend {<br> server 10.1.0.101;<br> server 10.1.0.102;<br> server 10.1.0.103;<br> }<br> <br> #该服务器接受到端口80的所有流量并将其传递给上游。<br> #请注意,上游名称和proxy_pass需要匹配。<br> server {<br> listen 80;<br> location / {<br> proxy_pass http://backend;<br> }<br> }<br> } 1 #定义要包含在负载均衡方案中的服务器。 <br>#最好使用服务器的私有IP以获得更好的性能和安全性。 <br>http {<br> upstream backend {<br> server 10.1.0.101;<br> server 10.1.0.102;<br> server 10.1.0.103;<br> }<br> <br> #该服务器接受到端口80的所有流量并将其传递给上游。<br> #请注意,上游名称和proxy_pass需要匹配。<br> server {<br> listen 80;<br> location / {<br> proxy_pass http://backend;<br> }<br> }<br> } 然后保存文件并退出编辑器。 接下来,您需要禁用先前在安装后测试的默认服务器配置。同样取决于您的操作系统,这部分略有不同。 在Debian和Ubuntu系统上,您需要从启用站点的文件夹中删除默认符号链接。 sudo rm /etc/nginx/sites-enabled/default 1 sudo rm /etc/nginx/sites-enabled/default CentOS的主机不使用相同的链接,而是简单地将重命名default.conf在conf.d /目录下的东西,不是结束的.conf,例如: sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled 1 sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled 然后使用以下命令重新启动nginx。 sudo systemctl restart nginx 1 sudo systemctl restart nginx 检查nginx是否成功启动。如果重新启动失败,请查看刚刚创建的 /etc/nginx/conf.d/load-balancer.conf,以确保没有错误类型或缺少分号。 在Web浏览器中输入负载均衡器的公共IP地址时,您现在应该被传递到其中一个后端服务器。 负载均衡方法 如果没有定义其他方法,默认情况下使用nginx进行负载均衡会使用循环算法,如上面的第一个示例所示。使用循环方案,将根据您在load-balancer.conf 文件中设置的顺序轮流选择每个服务器。这平衡了短期操作的请求数量。 基于最少连接的负载平衡是另一种简单的方法。顾名思义,此方法将请求定向到当时具有最少活动连接的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环法更有效。 要启用最少连接平衡方法,请将参数least_conn添加到上游 部分,如下例所示。 upstream backend {<br> least_conn;<br> server 10.1.0.101;<br> server 10.1.0.102;<br> server 10.1.0.103;<br> } 1 upstream backend {<br> least_conn;<br> server 10.1.0.101;<br> server 10.1.0.102;<br> server 10.1.0.103;<br> } 虽然循环和最少连接平衡方案是公平的并且有其用途,但是它们不能提供会话持久性。如果您的Web应用程序要求用户随后被定向到与之前连接相同的后端服务器,则应使用IP哈希方法。IP哈希使用访问者IP地址作为密钥来确定应选择哪个主机来为请求提供服务。这允许访问者每次被定向到同一服务器,被授予服务器可用且访问者的IP地址未被更改。 要使用此方法,请将ip_hash 添加到上游 段,如下面的示例所示。 upstream backend {<br> ip_hash;<br> server 10.1.0.101;<br> server 10.1.0.102;<br> server 10.1.0.103;<br> } 1 upstream backend {<br> ip_hash;<br> server 10.1.0.101;<br> server 10.1.0.102;<br> server 10.1.0.103;<br> } 在不同主机之间的可用资源不相等的服务器设置中,可能希望某些服务器优先于其他服务器。定义服务器权重允许您使用nginx进一步微调负载平衡。负载均衡器中权重最高的服务器最常选择。 upstream backend {<br> server 10.1.0.101 weight=4;<br> server 10.1.0.102 weight=2;<br> server 10.1.0.103;<br> } 1 upstream backend {<br> server 10.1.0.101 weight=4;<br> server 10.1.0.102 weight=2;<br> server 10.1.0.103;<br> } 例如,在上面显示的配置中,第一个服务器的选择频率是第二个服务器的两倍,与第三个服务器相比,它再次获得两倍的请求。 启用HTTPS的负载均衡 为您的网站启用HTTPS是保护访问者及其数据的好方法。如果您尚未在网络主机上实施加密,我们强烈建议您查看我们的指南,了解如何在nginx上安装Let's Encrypt。 在负载均衡器中使用加密比您想象的要容易。您需要做的就是在负载均衡器配置文件中添加另一个服务器部分,该文件使用SSL侦听端口443上的HTTPS流量,并为上游段设置proxy_pass,就像上一个示例中的HTTP一样。 再次打开配置文件进行编辑。 sudo vi /etc/nginx/conf.d/load-balancer.conf 1 sudo vi /etc/nginx/conf.d/load-balancer.conf 然后将以下服务器段添加到文件末尾。 server {<br> listen 443 ssl;<br> server_name domain_name;<br> ssl_certificate /etc/letsencrypt/live/domain_name/cert.pem;<br> ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;<br> ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br> location / {<br> proxy_pass http://backend;<br> }<br> } 1 server {<br> listen 443 ssl;<br> server_name domain_name;<br> ssl_certificate /etc/letsencrypt/live/domain_name/cert.pem;<br> ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;<br> ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br> location / {<br> proxy_pass http://backend;<br> }<br> } 然后保存文件,退出编辑器并再次重新启动nginx。 sudo systemctl restart nginx 1 sudo systemctl restart nginx 健康检查 为了知道哪些服务器可用,nginx的反向代理实现包括被动服务器健康检查。如果服务器无法响应请求或回复错误,nginx将注意服务器已失败,并将尝试避免一段时间转发到该服务器的连接。 通过将参数max_fails设置为服务器行,可以在负载均衡器配置文件中定义特定时间段内连续不成功的连接尝试次数。默认情况下,如果未指定max_fails,则将此值设置为1.(可选)将max_fails设置为0将禁用对该服务器的运行状况检查。 如果将max_fails设置为大于1的值,则后续失败必须在特定时间范围内发生,以便无法计数。此时间范围由参数fail_timeout指定,该参数还定义服务器应被视为失败的时间。默认情况下,fail_timeout设置为10秒。 在服务器标记失败并且fail_timeout设置的时间已过后,nginx将开始使用客户端请求正常探测服务器。如果探测返回成功,则服务器再次标记为实时并且正常包含在负载平衡中。 upstream backend {<br> server 10.1.0.101 weight=5;<br> server 10.1.0.102 max_fails=3 fail_timeout=30s;<br> server 10.1.0.103;<br> } 1 upstream backend {<br> server 10.1.0.101 weight=5;<br> server 10.1.0.102 max_fails=3 fail_timeout=30s;<br> server 10.1.0.103;<br> } 使用运行状况检查可以根据需要通过启动或关闭主机来使服务器后端适应当前需求。在高流量期间启动其他服务器可以在新资源自动供负载均衡器使用时轻松提高应用程序性能。 结论 如果您希望提高Web应用程序的性能和可用性,那么设置负载均衡器绝对值得考虑。使用nginx进行负载均衡功能强大且设置相对简单,并且与简单的加密解决方案(例如Let's Encrypt客户端)一起使用,它为您的Web场提供了一个很好的前端。 虽然使用多个主机可以保护您的Web服务具有冗余,但负载均衡器本身仍然可以留下单点故障。您可以通过在多个负载平衡器之间设置浮动IP来进一步提高高可用性。
浙公网安备 33010602011771号