- 概念:
- nginx:是一款高性能的HTTP和反向代理服务器。它的诞生背景主要是为了应对当时大量并发连接的需求,尤其是在高流量网站上,传统的Apache服务器在处理并发连接时表现不佳
- 使用场景:
- 静态文件服务器:Nginx特别擅长处理静态文件,如HTML、CSS和图像,能够快速响应请求。
- 反向代理服务器:可以将请求转发到后端应用服务器(如Node.js、Django等),提供负载均衡和提高应用的可用性。
- 负载均衡:可以将流量分发到多个服务器上,以提高应用的可靠性和性能。
- SSL/TLS终端:Nginx可以处理HTTPS请求,解密SSL/TLS流量,减轻后端服务器的负担。
- API网关:在微服务架构中,Nginx常用作API网关,管理和路由API请求。
- 内容缓存:Nginx可以缓存内容,提高响应速度和减轻后端负担。
- WebSocket支持:支持实时通信场景,如聊天应用。
- 高可用性:通过配置Nginx,能够实现高可用架构,确保系统在高负载下仍然稳定运行。
- 关于正向代理和反向代理
- 正向代理:知道目标服务器,但是出于安全或是别的原因,不想让目标服务器获取我们的IP地址,实现这种的方式就是正向代理
- 反向代理:反向代理指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的
- 关于nginx中的配置解释
- 正向代理:
-
server { listen 8080; location / { resolver 8.8.8.8; # 使用Google的公共DNS proxy_pass http://$http_host$request_uri; # 转发请求 proxy_set_header Host $http_host; # 保留原始Host头 proxy_set_header X-Real-IP $remote_addr; # 转发客户端IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发X-Forwarded-For头 } }
-
listen 8080:Nginx将在8080端口监听请求。
-
resolver 8.8.8.8:设置DNS解析器,Nginx将使用这个DNS来解析目标主机。
-
proxy_pass http://$http_host$request_uri:将请求转发到目标主机,
$http_host
表示原始请求的主机名,$request_uri
表示请求的URI。 -
proxy_set_header Host $http_host:确保转发请求时保持原始的Host头。
-
proxy_set_header X-Real-IP $remote_addr:转发客户端的真实IP地址。
-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:将客户端的IP添加到X-Forwarded-For头中,以便后端服务器可以获取原始IP。
反向代理:
server {
listen 80;
server_name example.com; # 替换为你的域名
location / {
proxy_pass http://127.0.0.1:5000; # 将请求转发到后端应用服务器
proxy_set_header Host $host; # 保留原始Host头
proxy_set_header X-Real-IP $remote_addr; # 转发客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发X-Forwarded-For头
proxy_set_header X-Forwarded-Proto $scheme; # 转发协议(http/https)
}
}
-
listen 80:Nginx将在80端口监听HTTP请求。
-
server_name example.com:指定服务器的域名,这里需要替换为你自己的域名。
-
location /:匹配所有请求路径。
-
**proxy_pass http://127.0.0.1:5000**:将请求转发到本地运行的后端应用服务器(假设它在5000端口上运行)。
-
proxy_set_header Host $host:确保转发请求时保持原始请求的Host头。
-
proxy_set_header X-Real-IP $remote_addr:转发客户端的真实IP地址,以便后端应用能够知道请求来源。
-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:将客户端的IP添加到X-Forwarded-For头中,以便后端服务器能够获取原始IP。
-
proxy_set_header X-Forwarded-Proto $scheme:转发请求的协议(如http或https),方便后端处理。