Nginx
Nginx
Nginx(发音为"engine-x")是一个高性能的开源Web服务器和反向代理服务器。它具有占用资源少、并发处理能力强、扩展性好等特点,因此被广泛应用于构建高性能的网站、负载均衡、反向代理、缓存等场景。
正向代理
反向代理
负载均衡
轮询(Round Robin)
默认的负载均衡方法,按照请求的顺序依次将请求分发给后端服务器。每个请求按照轮询算法分配给不同的服务器。例如:
加权轮询(Weighted Round Robin)
可以给不同的后端服务器设置权重,权重越大的服务器接收到的请求比例越高。通过调整权重,可以灵活地控制每个服务器的负载情况。
IP 哈希(IP Hash)
根据客户端的 IP 地址进行哈希运算,将同一个 IP 的请求始终分发到同一台后端服务器。这样可以保持会话的一致性,适用于需要保持状态的应用场景。
常用命令
启动 Nginx:
nginx
或systemctl start nginx
(若使用 systemd)该命令用于启动 Nginx 服务器。
停止 Nginx:
nginx -s stop
或systemctl stop nginx
该命令用于停止正在运行的 Nginx 服务器。
重新加载配置文件:
nginx -s reload
或systemctl reload nginx
该命令用于重新加载 Nginx 的配置文件,使更改生效,而无需停止服务器。
检查配置文件语法是否正确:
nginx -t
或nginx -c /path/to/nginx.conf -t
该命令用于检查 Nginx 配置文件的语法是否正确,如果有错误,将会给出相应的错误信息。
查看 Nginx 版本:
nginx -v
或nginx -V
该命令用于显示当前安装的 Nginx 版本号信息。
查看 Nginx 运行状态:
nginx -s status
或systemctl status nginx
该命令用于查看 Nginx 服务器的运行状态,包括进程 ID(PID)、监听端口、内存占用等信息。
平滑重启 Nginx:
nginx -s reload
或systemctl reload nginx
该命令用于在不中断服务的情况下重新加载配置文件,并平滑地重启 Nginx 服务器。
停止所有 Nginx 进程:
nginx -s quit
或systemctl stop nginx
该命令用于停止所有正在运行的 Nginx 进程,包括 master 进程和 worker 进程。
配置文件
Nginx 的配置文件主要由以下几个部分组成:
全局块(http 块外):全局块包含了全局的指令,对整个 Nginx 服务器生效。一般用于设置全局参数,例如 worker 进程数、用户和日志配置等。
示例:
user nginx; worker_processes auto; error_log /var/log/nginx/error.log;
Events 块:Events 块用于配置 Nginx 的事件处理机制,如连接的最大数目和工作模式等。
示例:
events { worker_connections 1024; }
Http 块:Http 块包含了 HTTP 相关的配置指令,定义了 HTTP 请求的处理方式、代理服务器、负载均衡等。
示例:
http { server { listen 80; server_name example.com; location / { root /var/www/html; index index.html; } } }
server
块:定义一个 HTTP 服务器,可以监听一个或多个端口,并配置其相关的虚拟主机信息。listen
指令:定义服务器监听的端口号。server_name
指令:定义服务器名称,用于匹配请求的域名。location
块:用于匹配 URL,并定义相应的处理方式,如反向代理、静态文件处理等。
Server 块:Server 块是在 Http 块内定义的,用于配置每个虚拟主机的相关设置。
示例:
server { listen 80; server_name example.com; location / { root /var/www/html; # 根路径 index index.html; # index为参数,首先尝试返回index.html } }
Server 块可以包含多个 Location 块,用于不同 URL 的请求处理。
配置负载均衡
要在 Nginx 中为代理设置负载均衡,你可以使用 upstream
指令来定义后端服务器的组,并在 proxy_pass
指令中引用该组。下面是一个负载均衡配置示例:
upstream backend_servers {
server backend-server1;
server backend-server2;
server backend-server3;
}
location / {
proxy_pass http://backend_servers;
}
在上述配置中,我们使用 upstream
指令定义了一个名为 backend_servers
的后端服务器组,其中包含了多个后端服务器的地址。
然后,在 location
块中,我们使用 proxy_pass
指令将请求转发到 http://backend_servers
,这里的 backend_servers
实际上是之前定义的后端服务器组。
当有请求到达时,Nginx 将会根据负载均衡算法,选择其中一个后端服务器处理请求,实现负载均衡的效果。
在负载均衡配置中,你可以通过添加 weight
参数来为不同的后端服务器分配不同的权重,以调整负载均衡的比例。例如:
upstream backend_servers {
server backend-server1 weight=3;
server backend-server2 weight=2;
server backend-server3 weight=1;
}
在上述配置中,backend-server1
的权重为3,backend-server2
的权重为2,backend-server3
的权重为1,这意味着 backend-server1
将接收更多的流量。