目录
如果您还不会安装Nginx或对Nginx的命令不熟悉,请先看 在CentOS7上安装Nginx,或则直接关注Nginx栏目。
一、Nginx代理 prxoy_pass
需求:通过访问我自己的Nginx服务器,跳转到百度。
假设我的nginx服务器地址是192.168.108.31。我想访问http://192.168.108.31/baidu时跳转到https://wwww.baidu.com/,可以通过如下配置实现。
核心部份
location /baidu {
proxy_pass https://www.baidu.com/;
}
完整配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location /baidu {
proxy_pass https://www.baidu.com/;
}
}
}
修改完后重新加载配置
sbin/nginx -reload
注意:“https://www.baidu.com/”地址后面有个“/”,他表示根目录。如果没有这个“/”,nginx跳转时会把匹配路径“/baidu”也带过去,最后在地址栏看到的会是这样:“https://www.baidu.com/baidu”。也就是是代理地址有根路径部分,nginx代理时不会把匹配路径带去,否则会把匹配路径带过去。测试时浏览器会有缓存,不是很好测试,建议每次修改后使用浏览器的无痕模式新开窗口。
二、负载均衡,反向代理 upstream
如果在局域网中有三台主机(分为192.168.108.35,192.168.108.36,192.168.108.37)。想要使用ningx来代理这三个主机,实现负载均衡可以通过配置upstream 来实现。
如下,使用upstream 关键字定义了一个名为proxyservers后端服务器配置表。在这个配置表中又使用server 关键字定义了三个后端服务器地址和端口。然后添加一个虚拟目录,并在这个虚拟目录中使用proxy_pass代理到刚配置的proxyservers上。
核心部分
upstream proxyservers{
server 192.168.108.35:8080;
server 192.168.108.36:8080;
server 192.168.108.37:8080;
}
location / {
proxy_pass http://proxyservers;
}
完整配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
upstream proxyservers{
server 192.168.8.200:8801;
server 192.168.8.200:8802;
server 192.168.8.200:8803;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://proxyservers;
}
}
}
修改完后重新加载配置
sbin/nginx -reload
三、负载均衡权重配置 weight
配置代理服务器权重使用关键字weight。权重越高ningx将流量转发该服务的机会就越多。
核心部份
upstream proxyservers2{
server ip:port weight=1;
server ip:port weight=1;
server ip:port weight=1;
}
完整配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
upstream proxyservers{
server 192.168.8.200:8801 weight=6;
server 192.168.8.200:8802 weight=4;
server 192.168.8.200:8803 weight=2;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://proxyservers;
}
}
}
修改完后重新加载配置
sbin/nginx -reload
四、负载均衡 算法选择
Nginx 支持多种负载均衡算法:
1、轮询(Round Robin):这是默认的负载均衡算法。Nginx按照服务器列表的顺序依次将请求分发给后端服务器,直到所有服务器都收到了相同数量的请求。适用于后端服务器性能相近的情况。轮询可配合权重(weight)使用。
2、IP 哈希(IP Hash):该算法基于客户端的IP地址,将同一客户端的请求始终分发给同一台后端服务器。这对于需要保持会话一致性的应用程序非常有用。
3、最小连接数(Least Connections):Nginx将请求发送到当前连接数最少的后端服务器,以平衡连接的分布。适用于服务器性能不均匀的情况。最小连接数可配合权重(weight)使用,权重越高的服务器连接数更少。
4、当然有些版本的Nginx还可以扩展url_hash、 east_time算法,也可以安装相应的插件,或者自己相应的选择算法。
使用ip_hash算法核心部分
upstream proxyservers3{
#不配置就是轮询、ip_hash、least_conn
ip_hash;
server ip:port weight=1;
server ip:port weight=1;
server ip:port weight=1;
}
修改完后重新加载配置
sbin/nginx -reload
五、负载均衡其他选项
down:表示当前的server暂时不参与负载
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
max_conns:最大连接数,可以根据服务硬件情况来设置。如800。
max_fails:这是一个故障计数器参数,它指定了允许的最大失败次数。如果连续请求该服务器失败的次数达到或超过这个值,Nginx 将将服务器标记为不可用,不再将请求发送给它,直到故障计数器重置。在这个例子中,允许的最大失败次数是 3。公司资源少的话一般设置2~3次,多的话设置1次。
fail_timeout:失败后超时时间,与max_fails一起使用。如:max_fails=3,fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试3次,如果还是失败,则继续等待30秒...以此循环,直到恢复。
这个部分的配置要参考健康检查(健康检查详情看这里),否则可能运行不起来。
配置示例
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
upstream proxyservers{
server 192.168.8.201:8801 weight=6 down;
server 192.168.8.202:8802 weight=4 max_fails=3 fail_timeout=30;
server 192.168.8.203:8803 weight=2 backup;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://proxyservers;
}
location /nginx_basic_status {
stub_status on;
}
location /nginx_check_status {
check_status;
}
}
}