文章目录
- 一、前言
- 二、Nginx反向代理的工作原理
- 三、Nginx反向代理的主要功能
- 四、Nginx反向代理的配置和使用场景
- 五、实战配置
- 5.1 首先,修改宝塔面板配置
- 5.2 接着配置代理服务器
- 5.3 完成上面所有配置后
- 5.4最后还要在原来的index.html文件里添加
- 5.5 或者可以操作服务端的话,也可以在nginx配置里添加
一、前言
Nginx
反向代理是一种将客户端请求转发到后端服务器的技术,主要用于负载均衡、提高安全性和提升性能。与正向代理不同,反向代理隐藏了后端服务器的真实地址,客户端与之交互时只知道反向代理服务器的地址。
二、Nginx反向代理的工作原理
当客户端发送请求到反向代理服务器时,Nginx
会接收这些请求,并根据配置将请求转发到后端的真实服务器上。Nginx
可以将多个请求分发到多个后端服务器,从而实现负载均衡,提高系统的并发处理能力和可用性。常见的负载均衡算法有轮询、IP
哈希、最少连接等。
三、Nginx反向代理的主要功能
- 负载均衡:
Nginx
可以通过反向代理实现负载均衡,将请求分发到多个后端服务器上,从而提高系统的并发处理能力和可用性。 - 缓存加速:
Nginx
可以缓存静态资源或动态页面,减少后端服务器的负载,提高响应速度。通过设置缓存时间、缓存规则等参数,可以灵活地控制缓存策略。 - SSL终端:
Nginx
可以作为SSL
终端,接收HTTPS
请求并进行SSL/TLS
解密,然后将解密后的请求转发给后端服务器,减轻后端服务器的负担,提高安全性和性能。 - 安全过滤:
Nginx
可以通过反向代理实现安全过滤功能,例如防止恶意请求、DDoS
攻击、SQL
注入等。通过配置访问控制规则、限制请求频率等方式,可以提高系统的安全性。
四、Nginx反向代理的配置和使用场景
Nginx
的反向代理功能通过配置文件进行配置,配置文件包含了全局配置、http配置和 server
配置等部分,可以设置监听端口、代理规则、缓存配置、负载均衡策略等。Nginx
具有高性能的特点,采用异步非阻塞的事件驱动模型,可以处理大量并发连接,同时内存消耗较低,适合在资源有限的环境中使用。
五、实战配置
网站使用 nginx
作为服务器,协议从 http
升级为 https
的注意事项。
5.1 首先,修改宝塔面板配置
选择配置文件,http
请求重定向为 https
。所有 80
端口请求都重定向为 https
请求。
# server代表的是nginx其中的一个服务器
server
{listen 80; # listen表示监听端口号80 (http)listen 443 ssl http2; # 表示监听443 端口号(https)server_name www.abc.com abc.com ip地址; # server_name表示服务器名称,现在同时匹配3个index index.php index.html index.htm default.php default.htm default.html; # 匹配/www/wwwroot/abc/index.htmlroot /www/wwwroot/abc; # abc表示路径,网站的起始位置为/www/wwwroot/abc#HTTP_TO_HTTPS_STARTif ($server_port !~ 443){ # 端口号不等于443,则重写url到https://当前主机/后面所有路径,并永久重定向(permanent)rewrite ^(/.*)$ https://$host$1 permanent;}
5.2 接着配置代理服务器
# 代理serve图片服务器apilocation /api/ {# 通过代理,访问https://ip|域名/api/...时,代理到http://你的ip或域名:3004/api/...proxy_pass http://你的ip或域名:3004; # 注意`http://你的ip或域名:3004`末尾不添加`/`,这样的话`/api/`将会添加到3004后面proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}# 代理音乐服务器api# /musicapi/,必须加上后面的/,不然代理服务不成功location /musicapi/ {# 访问https://你的ip或域名/musicapi/...,# 代理到http://你的ip或域名:3005/...,不包括/musicapiproxy_pass http://你的ip或域名:3005/; # 这里末尾添加了`/`,将不会添加`/musicapi/`在端口号后面proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
5.3 完成上面所有配置后
http
网站升级到 https
网站,浏览器可正常访问网站,网站请求的 api
接口,需要从 http://ip| 域名 :3005/lyric?id=32507038
修改为 http(s)://ip|域名/musicapi/lyric?id=32507038
。这里的流程就是,把原本请求的 :3005
用 /musicapi
替换掉,然后浏览器发出并重定向成 https
开头的请求,接着 nginx
发现你的请求中带有 /musicapi
,就把你的请求转发给匹配上的 http://
你的ip
或域名 :3005/
服务器。
5.4最后还要在原来的index.html文件里添加
# 把http链接升级为https
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
5.5 或者可以操作服务端的话,也可以在nginx配置里添加
server
{listen 80;listen 443 ssl http2;......#升级可以升级为https的连接,兼容httpadd_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";
}