Nginx介绍及使用
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 nginxsudo 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 max_fails=3 fail_timeout=30s;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等参数 | 
3.Nginx安装
1. 什么是 --with-stream?
 
这个参数是用来启用 Nginx 的 Stream 模块的。
-  默认情况下,Nginx 只支持 HTTP、HTTPS 等基于应用层的协议。 
-  加上 --with-stream,你就可以让 Nginx 作为 TCP 或 UDP 的反向代理使用,比如:-  代理 MySQL、Redis、FTP 等 TCP 服务 
-  或者代理 DNS、QUIC 等 UDP 服务 
 
-  
2. 源码安装 Nginx 并启用 --with-stream
 
1 下载官方 Nginx 源码包:
wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.02. 配置编译选项(重点是加上 --with-stream):
 
./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-stream \ --with-stream_ssl_module3. 编译并安装:
make -j$(nproc) sudo make install安装完成后,nginx 会被装在 /usr/local/nginx 下。
4.验证安装是否成功
/usr/local/nginx/sbin/nginx -V#启动 nginx:sudo /usr/local/nginx/sbin/nginx#然后查看是否启动成功:ps aux | grep nginx5.设置 nginx 命令软链接(可选)
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx以后就可以直接用 nginx 命令了。
4.Nginx使用
1.准备多个后端服务
方法1:使用 nc(netcat)模拟 TCP 服务
 
使用 nc 模拟两个简单的 TCP 服务,分别在端口 5001 和 5002 上监听。
# 模拟两个 TCP 后端服务器(不同端口)
nc -lk 5001 <<< "hello from backend 1"
nc -lk 5002 <<< "hello from backend 2"-  -l:监听模式。
-  -k:在连接关闭后继续监听。
-  <<<:将字符串作为输入传递给nc。
这样,你就有两个简单的 TCP 服务,分别在 5001 和 5002 上监听。
2. 配置 Nginx 的 stream 负载均衡
 
编辑你的 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf,添加如下内容(保留原来的 events {} 块):
stream {upstream backend_group {least_conn;  # 负载均衡策略:最少连接,可改为 round-robin(默认)server 127.0.0.1:5001;server 127.0.0.1:5002;}server {listen 6000;  # 暴露一个统一的入口proxy_pass backend_group;}
}nginx -t
sudo nginx -s reload3.测试负载均衡是否生效
使用 telnet 或 netcat 连接 Nginx 暴露的端口:
nc 127.0.0.1 6000多次连接,或者从多个终端连接,你应该会轮流连接到 5001 和 5002,分别输出不同的 "hello from backend"。
for i in {1..10}; do nc 127.0.0.1 6000; done观察输出是否轮流从两个后端返回。
