1.Nginx介绍
Nginx是一款开源的、高性能的HTTP和反向代理服务器
1.正向代理和反向代理
正向代理(代理客户端)是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求,代理服务器将请求转发给目标服务器,并将目标服务器的响应返回给客户端
反向代理(代理服务端)客户端的请求首先发送到反向代理服务器,反向代理服务器再将请求转发到后端的服务器。后端服务器处理请求后,将响应返回给反向代理服务器,反向代理服务器再将响应返回给客户端。
2.负载均衡(Load Balancing)
负载均衡用于在多个服务器之间分配客户端的请求,以优化资源利用、提高系统的可用性和可靠性。
主要功能
流量分配:
根据预设的算法(如轮询、最少连接、加权等),将客户端的请求分配到不同的服务器上,避免某一台服务器过载。
常见的算法包括:
轮询(Round Robin):按顺序依次分配请求。
最少连接(Least Connections):优先分配到当前连接数最少的服务器。
加权轮询(Weighted Round Robin):根据服务器的权重分配请求。
加权最少连接(Weighted Least Connections):结合权重和连接数分配请求。
IP哈希(IP Hash):根据客户端的IP地址进行哈希计算,将请求分配到固定的服务器。
故障转移(Failover):
当某一台服务器出现故障时,能够自动将流量切换到其他健康的服务器上,确保服务的持续可用。
负载均衡器会定期检查后端服务器的健康状态,自动移除故障服务器,并重新分配流量。
3.Nginx
主要特点
高性能:
Nginx采用事件驱动的异步非阻塞架构,能够处理大量的并发连接,性能优于传统的Apache服务器。
它可以轻松处理数万个并发连接,适合高流量的网站。
反向代理和负载均衡:
Nginx可以作为反向代理服务器,将客户端请求转发到后端的多个服务器上,并根据配置的策略进行负载均衡。
支持多种负载均衡算法,如轮询、最少连接、IP哈希等。
静态文件服务:
Nginx对静态文件(如HTML、CSS、JavaScript、图片等)的处理非常高效,可以直接从磁盘读取文件并返回给客户端,减少后端服务器的负担。
2.Nginx启动和停止
1. 启动 Nginx
sudo systemctl start nginx
sudo nginx
说明:启动 Nginx 服务。
2. 停止 Nginx
bash复制
sudo systemctl stop nginx
或者
bash复制
sudo nginx -s stop
说明:立即停止 Nginx 服务。
3. 重启 Nginx
bash复制
sudo systemctl restart nginx
或者
bash复制
sudo nginx -s reload
说明:重新加载 Nginx 配置文件而不中断现有连接。
4. 重新加载配置文件
bash复制
sudo nginx -s reload
说明:重新加载 Nginx 配置文件而不中断现有连接。如果配置文件有语法错误,Nginx 会拒绝加载。
3.Nginx配置
/etc/nginx/nginx.conf
nginx.conf
├── 全局块
├── events 块
└── http 块
├── 通用设置(日志、MIME等)
├── server 块(一个网站)
│ ├── listen / server_name
│ ├── location /(静态文件或反向代理)
│ └── error_page
└── ...
# 全局块
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 事件块
events {
worker_connections 1024;
}
# HTTP 块
http {
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 /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# 1️⃣ 定义后端服务集群(upstream)
upstream my_backend {
server 127.0.0.1:8081 weight=3;
server 127.0.0.1:8082 weight=1;
}
# 服务器块
server {
listen 80;
server_name localhost;
# 位置块
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 错误页
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
# 反向代理示例
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
proxy_set_header Host $host;
proxy_set_header
指令用于设置转发请求时的 HTTP 头。Host $host;
表示在转发请求时,将原始请求的Host
头设置为$host
(即客户端请求的域名或 IP 地址)。这确保后端服务器能够正确处理请求,因为它知道请求原本是针对哪个域名的。
proxy_set_header X-Real-IP $remote_addr;
这行配置设置了
X-Real-IP
头,值为$remote_addr
,即客户端的真实 IP 地址。由于 Nginx 作为代理服务器,后端服务器看到的请求来源是 Nginx 的 IP 地址(通常是
127.0.0.1
)。通过设置X-Real-IP
,后端服务器可以知道实际发起请求的客户端 IP 地址。
用途 | 配置示例 |
---|---|
静态文件服务 | location / { root /path/to/html; } |
反向代理 | proxy_pass http://backend; |
负载均衡 | upstream backend { server 127.0.0.1:8001; server 127.0.0.1:8002; } |
HTTPS 配置 | 使用 listen 443 ssl; 和 ssl_certificate 等参数 |