Nginx 可以充当反向代理服务器,将客户端请求转发到后端的多个服务器上,并将响应返回给客户端。
Nginx作为反向代理服务器的工作原理如下:
在整个过程中,Nginx作为反向代理服务器,起到了一个中间人的角色。它接收客户端的请求,转发给后端服务器,再将后端服务器的响应返回给客户端。这样,客户端并不知道它实际上访问的是哪个后端服务器,从而实现了隐藏后端服务器、负载均衡、缓存加速等功能。同时,由于Nginx的高性能和稳定性,它可以处理大量的并发请求,提高整个Web服务的性能和可靠性。
Nginx的配置文件主要有两个,/etc/nginx/nginx.conf和/etc/nginx/conf.d/default.conf
/etc/nginx/nginx.conf:这是Nginx的主配置文件,包含了全局的配置信息。在这个文件中,你可以配置Nginx的全局设置,如进程数、用户、日志格式等。此文件通常用于配置Nginx的全局行为,例如设置worker_processes参数、加载模块等。
/etc/nginx/conf.d/default.conf:这是一个子配置文件,位于/etc/nginx/conf.d/目录下。在Nginx的主配置文件中,通常会通过include指令来引入该目录下的所有子配置文件。default.conf文件是一个示例配置文件,用于演示和说明Nginx的基本用法。
在/etc/nginx/nginx.conf配置文件,通过include指令引入了conf.d目录下的所有配置文件,一般我们通过nginx.conf配置文件进行配置即可
Nginx 可以通过配置 Nginx 的 location 和 proxy_pass 指令来实现反向代理,location 用于指定处理哪些URL请求,proxy_pass 用于指定反向代理的服务器地址
以下是一个示例配置,用于将请求反向代理到本地的 8080 端口:
http {
server {
listen 80;
server_name localhost; # 你的域名
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
这个配置文件的含义是:当用户访问你的服务器(假设你的服务器 IP 是 your_server_ip)的 80 端口时,Nginx 会将请求转发到本地的 8080 端口。
listen 80:表示 Nginx 监听 80 端口。
location /:表示匹配所有 URI 的 location 块。就是说,这个 location 块会处理所有发送到 Nginx 服务器的请求,不管 URI 是什么。
location 是 Nginx 配置中的一个关键指令,用于根据请求的 URI 来进行相应的处理请求。
以下是一些常见的 location 使用示例:
1. location /: 匹配所有请求,包括根路径(例如 http://yourserver.com/)。
2. location /api/: 匹配以 /api/ 开头的所有请求,包括/api/(例如 http://yourserver.com/api/users)。
3. location /static/: 匹配以 /static/ 开头的所有请求(例如 http://yourserver.com/static/css/style.css)。
4. location ~* \.(jpg|jpeg|png)$: 匹配所有以 .jpg, .jpeg, 或 .png 结尾的请求,无论它们位于哪个路径下。
5. location = /path 精准匹配,只匹配/path这个请求路径
当请求到达 Nginx 时,Nginx 会根据 location 块的配置顺序和匹配规则来决定使用哪个 location 块来处理请求。如果请求的 URI 与多个 location 块匹配,Nginx 会选择第一个最精确的匹配。如果没有找到匹配的 location 块,Nginx 会使用默认的 location / 块。
你可以使用多个 location 块来根据不同的路径进行不同的转发
以下是一个示例配置:
http {
server {
listen 80;
location /api/ {
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;
}
location /static/ {
proxy_pass http://127.0.0.1:8001;
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:8002;
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:8000,所有以 /static/ 开头的请求会被转发到 http://127.0.0.1:8001,其他所有请求会被转发到 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 地址,以便后端服务器跟踪请求的来源。