陕西省西安市建设局网站,公司网站建设建议,苏州工业园区招聘官网,水土保持与生态建设网站1.Nginx介绍
Nginx是一款开源的、高性能的HTTP和反向代理服务器
1.正向代理和反向代理
正向代理#xff08;代理客户端#xff09;是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求#xff0c;代理服务器将请求转发给目标服…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️⃣ 定义后端服务集群upstreamupstream my_backend {server 127.0.0.1:8081 weight3 max_fails3 fail_timeout30s;server 127.0.0.1:8082 weight1;}# 服务器块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.0
2. 配置编译选项重点是加上 --with-stream
./configure --prefix/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-stream \ --with-stream_ssl_module
3. 编译并安装
make -j$(nproc) sudo make install
安装完成后nginx 会被装在 /usr/local/nginx 下。
4.验证安装是否成功
/usr/local/nginx/sbin/nginx -V
#启动 nginxsudo /usr/local/nginx/sbin/nginx#然后查看是否启动成功ps aux | grep nginx
5.设置 nginx 命令软链接可选
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
以后就可以直接用 nginx 命令了。
4.Nginx使用
1.准备多个后端服务
方法1使用 ncnetcat模拟 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 weight1 max_fails2 fail_timeout20s;server 127.0.0.1:5002 weight2 max_fails4 fail_timeout40s;# fail_timeout 多长时间内允许服务器失败的次数达到 max_fails}server {listen 6000;proxy_pass backend_group;proxy_connect_timeout 3s; # 设置 Nginx 与后端服务器建立连接的超时时间tcp_nodelay on; # 禁用 Nagle 算法}
}
nginx -t
sudo nginx -s reload
3.测试负载均衡是否生效
使用 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
观察输出是否轮流从两个后端返回。
5.查看网络连接状态
sudo netstat -tanp
是一个常用的 Linux 命令用于显示当前系统中所有网络连接的状态。这个命令可以帮助你查看哪些进程正在监听特定端口以及当前的网络连接情况。
命令解释 netstat显示网络连接、路由表、接口统计等网络相关信息。 -t显示 TCP 连接。 -a显示所有网络连接包括监听和非监听状态。 -n显示数字形式的地址和端口而不是解析为域名或服务名称。 -p显示每个连接的进程 ID 和进程名称。