目录
一、Nginx的功能:
1.反向代理:例如我有三台服务器,Nginx可以作为代理服务器,转发用户的请求给这三台服务器,起到集中管理和优化流量分发的作用。
2.负债均衡:存在高级负载均衡策略,比如说哪个服务器内存大,动态优先让此台服务器处理用户请求,在服务器故障时自动将流量转移到健康的服务器。
3.内存小,支持高并发访问
4.可以作为静态资源服务器、缓存服务器。
二、正向代理和反向代理的区别
1.正向代理:
例如VPN,你的网络环境中存在一个正向代理服务器(墙),你无法直接访问外网。你可以连VPN,将你的请求先发送给VPN服务器(正向代理),由VPN服务器代表你向目标服务器发出请求,获取到服务器的响应后再返回给你。在这个过程中,目标服务器只能看到VPN服务器的IP地址,无法直接识别你的真实IP地址和位置信息。
2.反向代理
反向代理:例如Nginx中, 假设有一个网站部署了Nginx作为反向代理服务器。当客户端向这个网站发送请求时,请求会先到达Nginx服务器,Nginx根据预先配置的规则和负载均衡算法,将请求转发到后端的多个服务器(如应用服务器、数据库服务器等)。后端服务器处理完请求后,将结果返回给Nginx,再由Nginx将结果返回给客户端。对客户端来说,Nginx是唯一与之通信的服务器,客户端无法直接访问到后端的真实服务器。
3.总结:
流向不同:
正向代理的流程是客户端 -> 正向代理 -> 目标服务器。
反向代理的流程是客户端 -> 反向代理 -> 后端服务器。
目的不同:
正向代理的目的是代理客户端去访问其他资源,通常用于访问控制、身份隐藏等。
反向代理的目的是代理服务器来处理客户端的请求,通常用于负载均衡、缓存、安全保护等。
配置位置:
正向代理配置在客户端或客户端访问路径中。
反向代理配置在目标服务器和客户端之间,通常是在网络边界或应用服务器前。
三、Nginx负载均衡的主要功能
1. 轮询(Round-robin)
一种算法,它将每个请求按顺序分配到后端的不同服务器上,适用于每个服务器性能相近的场景。(假如三台服务器,那就123,123,123....)
bash
nginx
upstream backend {
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
2. 加权轮询(Weighted Round-robin)
加权轮询允许为每个后端服务器分配一个权重值,权重值越高的服务器每轮接收到的请求越多。
bash
nginx
upstream backend {
server server1.example.com weight=3;
server server2.example.com weight=2;
server server3.example.com weight=1;
}
3. IP哈希(IP Hash)
基于客户端IP地址,将同一个客户端的所有请求发送到同一个后端服务器。这样可以确保同一客户端的会话保持在同一服务器上。(Session:维持登录状态)
bash
nginx
upstream backend {
ip_hash;
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
4. 动静分离(Static and Dynamic Content Separation)
将静态文件(如图片、CSS、JavaScript等)的请求和动态请求(如PHP、Python等脚本生成的页面)分发到不同的后端处理机制。通常,静态文件可以直接由Nginx处理并响应,而动态请求则转发给后端应用服务器处理。
bash
nginx
server {
listen 80;
server_name example.com;
location /static/ {
root /var/www/;
}
location / {
proxy_pass http://backend;
}
upstream backend {
server backend-server1;
server backend-server2;
}
}
四、nginx安装目录下的各个文件(夹)的作用:
1.conf
2.contrib
3.docs
4.html
5.logs
6.temp
7.nginx.exe
1.conf:
这是 Nginx 的配置文件夹,包含了 Nginx 的各种配置文件。主要的配置文件是 nginx.conf,用于配置 Nginx 的全局设置、HTTP、服务器、位置等各种参数。
举例并且注释nginx.conf的内容:
python
# 全局配置
user nginx; # 设置 Nginx 进程运行的用户为 nginx 用户
worker_processes auto; # 自动设置工作进程数量,通常设置为 CPU 核心数
error_log /var/log/nginx/error.log; # 错误日志文件的路径
pid /var/run/nginx.pid; # Nginx 主进程的 PID 文件路径
# events 配置
events {
worker_connections 1024; # 每个工作进程允许的最大连接数
}
# HTTP 配置
http {
include mime.types; # 引入 MIME 类型配置文件
default_type application/octet-stream; # 默认的 MIME 类型
sendfile on; # 开启 sendfile 功能,提高文件传输效率
keepalive_timeout 65; # 客户端连接的超时时间
gzip on; # 开启 gzip 压缩
# 定义后端服务器池
upstream backend_servers {
server backend1.example.com weight=5; # 第一个后端服务器,权重为 5
server backend2.example.com:8080 max_fails=3 fail_timeout=30s; # 第二个后端服务器,指定端口和失败参数
server unix:/tmp/backend3.sock; # 第三个后端服务器,使用 Unix 域套接字
}
# 服务器配置
server {
listen 80; # 监听 80 端口
server_name example.com; # 服务器的域名为 example.com
location / {
root /usr/share/nginx/html; # 根目录位置
index index.html index.htm; # 默认首页文件
}
location /api/ {
proxy_pass http://backend_servers; # 请求转发到后端服务器池
proxy_set_header Host $host; # 设置请求头 Host
proxy_set_header X-Real-IP $remote_addr; # 设置请求头 X-Real-IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置请求头 X-Forwarded-For
}
error_page 500 502 503 504 /50x.html; # 设置错误页的处理
location = /50x.html {
root /usr/share/nginx/html; # 错误页文件的位置
}
}
}
2.contrib:
contrib 文件夹通常包含一些额外的模块或者补丁,这些模块可能不是 Nginx 官方正式支持的,但提供了一些额外的功能或者实验性质的特性。
3.docs:文档手册
4.html:Nginx 默认的网站根目录
当通过 HTTP 访问服务器时,如果没有配置其他的虚拟主机或者站点,Nginx 将会服务于这个目录下的文件。
5.logs:日志文件
6.temp:
temp 文件夹通常用于存放临时文件,例如上传文件时的临时存储位置。这些文件一般在使用完毕后会被删除或者清理。
7.nginx.exe:
nginx.exe 是 Nginx 的可执行文件(在 Windows 上)。它是启动和管理 Nginx 服务的主要程序,通过执行这个文件可以启动、停止或重新加载 Nginx 的配置。
五、常用命令
1.启动和停止(stop 参数会立即停止 Nginx 进程,而 quit 参数会等待当前请求处理完成后再停止。)
bash
nginx
nginx -s stop
2.安全退出
bash
nginx -s quit
3.重新加载配置文件(使新的配置生效)
bash
nginx -s reload
4.查看Nginx进程
bash
ps aux | grep nginx
(以上部分内容由AI生成,部分内容参考其他博主,如有错误恳请指正)