目录
1.反向代理简述
反向代理是一种代理服务器的配置模式,它代表服务器向客户端提供服务。客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。简单理解为用户直接访问反向代理服务器就可以获得目标服务器的资源。这一过程叫反向代理
2.功能介绍
Nginx 可以作为反向代理服务器,接收客户端的请求,并将请求转发到后端的真实服务器上。通过反向代理,可以实现负载均衡、缓存加速、SSL 终端、安全过滤等功能。
「 负载均衡」:Nginx 可以通过反向代理实现负载均衡,将请求分发到多个后端服务器上,从而提高系统的并发处理能力和可用性。常见的负载均衡算法有轮询、IP 哈希、最少连接等。
「 缓存加速 」:Nginx 可以缓存静态资源或动态页面,减少后端服务器的负载,提高响应速度。通过设置缓存时间、缓存规则等参数,可以灵活地控制缓存策略。
「 SSL终端 」:Nginx 可以作为 SSL 终端,接收 HTTPS 请求并进行 SSL/TLS 解密,然后将解密后的请求转发给后端服务器。这样可以减轻后端服务器的负担,提高安全性和性能。
「 安全过滤」:Nginx 可以通过反向代理实现安全过滤功能,例如防止恶意请求、DDoS 攻击、SQL 注入等。通过配置访问控制规则、限制请求频率等方式,可以提高系统的安全性。
「 配置文件」:Nginx 的反向代理功能通过配置文件进行配置。配置文件包含了全局配置、http 配置和 server 配置等部分,可以设置监听端口、代理规则、缓存配置、负载均衡策略等。
「 超高性能 」:Nginx 具有高性能的特点,采用异步非阻塞的事件驱动模型,可以处理大量并发连接。同时,Nginx 的内存消耗较低,适合在资源有限的环境中使用。
3.Nginx常用的代理协议
(1)HTTP/HTTPS:
HTTP:Nginx 可以作为 HTTP 代理,转发 HTTP 请求到后端服务器。使用 proxy_pass 指令可以轻松配置。
HTTPS:Nginx 也可以处理 HTTPS 请求,支持 SSL/TLS 加密。可以通过 ssl_certificate 和 ssl_certificate_key 指令配置 SSL。
(2)WebSocket:
Nginx 支持 WebSocket 协议,可以用作 WebSocket 代理。需要在配置中设置 proxy_http_version 为 1.1,并添加 Upgrade 和 Connection 头。
实例配置:
location /websocket {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
(3)TCP/UDP:
使用 Nginx 的 stream 模块可以处理 TCP 和 UDP 流量。这个模块允许 Nginx 作为 TCP/UDP 代理。
TCP实例代理配置:
stream {
server {
listen 12345;
proxy_pass backend:12345;
}
}
(4)FastCGI:
Nginx 可以作为 FastCGI 代理,与 PHP-FPM 等 FastCGI 进程管理器配合使用。使用 fastcgi_pass 指令配置。
FastCGI实例配置:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
(5)gRPC:
Nginx 支持 gRPC 协议,可以作为 gRPC 代理。需要在配置中使用 grpc_pass 指令。
gRPC实例配置:
location / {
grpc_pass grpc://backend;
}
(6)Mail:
Nginx 还可以作为邮件代理,支持 IMAP 和 POP3 协议。使用 mail 模块进行配置。
邮件代理实例配置:
mail {
server {
listen 110;
protocol pop3;
proxy_pass backend;
}
}
4.Nginx反向代理的配置语法
[root@Web01 ~]# vim /etc/nginx/conf.d/default.conf
location / {
root /code;
index index.php index.html;
}
location ~ \.php$ {
root /code;
fastcgi_pass 127.0.0.1:9000; #将当前请求转发给后端代理,后面可以是域名+端口+uri或者是IP地址+端口+uri
fastcgi_param SCRIPT_FILENAME $document_
root$fastcgi_script_name;
include fastcgi_params;
}
}
用户随机一个端口和代理80建立连接,80又随机了端口又像服务端的80端口重新建立连接,这就出现了端口限制问题,形成了一个瓶颈,80随机的端口最大是65535。
5.部署代理服务器
[root@lb01 ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name www.boss.com;
location / {
proxy_pass http://10.0.0.7:80; #指定服务端IP,因为Nginx是七层,所以前面必须带http
proxy_set_header Host $http_host; #指定host,携带头部信息
proxy_http_version 1.1; #指定http版本号,长连接
}
}
~
~
<nf.d/default.conf" 12L, 105C written
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 ~]# systemctl start nginx
[root@lb01 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@lb01 ~]#
将所有对 www.boss.com 的 HTTP 请求代理到后端服务器 10.0.0.7 的 80 端口。通过设置适当的请求头,确保后端服务能够正确处理请求。这个配置非常适合用作负载均衡、反向代理或将请求转发到不同的后端服务。
6.代理服务器的优化配置(看实际情况)
[root@LB01 ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name www.boss.com;
location / {
proxy_pass http://10.0.0.7:80; #指定服务端地址
proxy_set_header Host $http_host; #指定携带头部信息
proxy_http_version 1.1; #指定http长连接
proxy_connect_timeout 30s; #连接超时时间
proxy_read_timeout 60s; #等待响应时间
proxy_send_timeout 60s; #数据回传等待时间
proxy_buffering on; #缓存区开启
proxy_buffer_size 32k; #缓存头部信息大小
proxy_buffers 4 128k; #缓存数据大小
}
<nf.d/default.conf" 22L, 323C written