Nginx 反向代理
Nginx 可以充当反向代理服务器,将客户端请求转发到后端的多个服务器上,并将响应返回给客户端。
工作原理:
客户端发送请求:当客户端(例如浏览器)需要访问某个Web服务时,它会向Nginx服务器发送HTTP请求。这个请求包括了要访问的URL和其他相关信息。
Nginx接收请求:Nginx服务器接收到客户端发送的请求后,会解析请求中的URL和其他信息。
转发请求:Nginx根据配置规则,将接收到的客户端请求转发给后端的Web服务器(或称为应用服务器)。这个过程可能是基于轮询、加权轮询、IP hash等负载均衡策略来选择的。 后端服务器处理请求:后端的Web服务器接收到Nginx转发过来的请求后,会处理这个请求,并生成相应的响应。
返回响应:后端服务器将处理后的响应返回给Nginx服务器。Nginx服务器可能会对这个响应进行一些处理,例如缓存、压缩等。
Nginx转发响应:Nginx将后端服务器返回的响应转发给客户端。这样,客户端就得到了它需要的数据。
在整个过程中,Nginx作为反向代理服务器,起到了一个中间人的角色。它接收客户端的请求,转发给后端服务器,再将后端服务器的响应返回给客户端。这样,客户端并不知道它实际上访问的是哪个后端服务器,从而实现了隐藏后端服务器、负载均衡、缓存加速等功能。同时,由于Nginx的高性能和稳定性,它可以处理大量的并发请求,提高整个Web服务的性能和可靠性。
Nginx反向代理配置
/etc/nginx/nginx.conf:这是Nginx的主配置文件,包含了全局的配置信息。在这个文件中,你可以配置Nginx的全局设置,如进程数、用户、日志格式等。此文件通常用于配置Nginx的全局行为,例如设置worker_processes参数、加载模块等。
Nginx 可以通过配置 Nginx 的 location 和 proxy_pass 指令来实现反向代理,location 用于指定处理哪些URL请求,proxy_pass 用于指定反向代理的服务器地址
你可以使用多个 location 块来根据不同的路径进行不同的转发
以下是一个示例配置:
- 安装 Certbot:首先,确保你已经安装了 Certbot。你可以通过包管理器安装 Certbot,具体安装命令取决于你使用的操作系统。例如,在 Ubuntu 上,你可以使用以下命令安装:
http {
server {
listen 80;
location /api/ {
proxy_pass http://127.0.0.1:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /server/ {
proxy_pass http://127.0.0.1:8080/server/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
在这个配置中,
所有以 /api/ 开头的请求会被转发到 http://127.0.0.1:8080/api/
所有以 /server/ 开头的请求会被转发到 http://127.0.0.1:8080/server/
其他所有请求会被转发到 http://127.0.0.1:8002
注意:Nginx 会按照配置文件中 location 块的顺序进行匹配,一旦找到匹配的 location,就会停止查找。因此,你应该将最特殊的 location(例如,以特定前缀开始的路径)放在最上面,将最通用的 location(例如,用于匹配所有其他请求的路径)放在最下面。
proxy_pass http://127.0.0.1:8080:表示将所有请求转发到本地的 8080 端口,proxy_pass 就是用来设置反向代理的目标服务器地址和端口
proxy_set_header 用于设置转发请求的 HTTP 头部信息。
proxy_set_header Host $host;:这个指令用于设置 HTTP 请求头部中的 Host 字段,将客户端请求中的 Host 头部信息传递给后端服务器。这样后端服务器就能知道客户端请求的原始 Host 信息。
proxy_set_header X-Real-IP $remote_addr;:这个指令用于设置 HTTP 头部 X-Real-IP字段,将客户端的真实 IP 地址传递给后端服务器。这有助于后端服务器获取客户端的真实 IP 地址(通过读取 “X-Real-IP” 字段来获取客户端的真实 IP 地址)。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:这个指令用于设置 HTTP 头部 X-Forwarded-For字段,将客户端的原始 IP 地址列表传递给后端服务器(简单来说就是将客户端的真实 IP 地址添加到 “X-Forwarded-For” 字段中。同时,它还会保留原有的 “X-Forwarded-For” 字段值,以便于追踪请求经过了哪些代理服务器)。这个头部通常用于记录经过的代理服务器的 IP 地址,以便后端服务器跟踪请求的来源。