什么是反向代理?
正向代理: 一般的访问流程是客户端直接向目标服务器发送请求并获取内容,使用正向代理后,客户端改为向代理服务器发送请求,并指定目标服务器(原始服务器),然后由代理服务器和原始服务器通信,转交请求并获得的内容,再返回给客户端。正向代理隐藏了真实的客户端,为客户端收发请求,使真实客户端对服务器不可见。
反向代理: 反向代理(Reverse Proxy)是一种服务器架构模式,它充当服务器和客户端之间的中间层,将客户端的请求转发到多个后端服务器,并将响应返回给客户端。在反向代理中,客户端不直接与后端服务器通信,而是通过反向代理服务器与后端服务器进行通信,使真实服务器对客户端不可见。
反向代理的工作原理?
客户端发送请求到反向代理服务器。
反向代理服务器接收到请求后,根据配置规则或负载均衡算法选择一个后端服务器。
反向代理服务器将请求转发给所选的后端服务器。
后端服务器处理请求并生成响应。
反向代理服务器将后端服务器的响应返回给客户端。
如何配置反向代理?
打开 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
在 http 块中添加以下配置来配置反向代理:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://backend_server;
}
}
listen:指定 Nginx 监听的端口。
server_name:指定服务器的域名或 IP 地址。
location /:指定要代理的 URL 路径。
proxy_pass:指定反向代理的目标服务器地址。
在上面的配置中,将 your_domain.com
替换为你的域名或 IP 地址,将 http://backend_server
替换为实际的后端服务器地址。
重启 Nginx:
完成配置后,保存文件并重新启动 Nginx 服务,以使配置生效。在 Ubuntu 上,可以使用以下命令重启 Nginx:
sudo service nginx restart
验证反向代理:
确保你的反向代理已正确配置。访问 your_domain.com
或配置的域名,Nginx 将会代理请求并将其转发到指定的后端服务器。后端服务器的响应将通过 Nginx 返回给客户端。
uwsgi_pass和proxy_pass的区别
uwsgi_pass和proxy_pass是Nginx配置中用于将请求转发到不同类型后端服务器的指令,它们有以下区别:
uwsgi_pass:
uwsgi_pass用于将请求转发给uwsgi服务器,通过uwsgi协议与后端uwsgi应用程序进行通信。uwsgi服务器是专门用于处理uwsgi协议的服务器,它能够直接与uwsgi应用程序进行交互,提供更高效和定制化的通信方式。当使用uwsgi_pass指令时,Nginx会将请求直接传递给uwsgi服务器,而不会进行HTTP协议的解析和转发。
proxy_pass:
proxy_pass用于将请求转发给HTTP或HTTPS服务器,通过HTTP协议与后端应用程序进行通信。这个后端服务器可以是任何支持HTTP协议的服务器,如Nginx、Apache、Node.js等。当使用proxy_pass指令时,Nginx会充当反向代理服务器,接收客户端的请求,并将其转发给后端的HTTP服务器进行处理。
反向代理实例一
实现效果:使用 Nginx 反向代理,访问 http://www.123.com 直接跳转到 127.0.0.1:8080
注意:此处如果要想从http://www.123.com
跳转到本机指定的ip,需要修改本机的hosts文件。此处略过
配置代码
server {
listen 80;
server_name www.123.com;
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080
}
}
如上配置,我们监听 80 端口,访问域名为 http://www.123.com
(不加端口号时默认为 80 端口),故访问该域名时会跳转到 127.0.0.1:8080 路径上。
此处的意思为:nginx 反向代理服务监听 192.168.17.129的80端口,如果有请求过来,则转到proxy_pass配置的对应服务器上,仅此而已。
反向代理的作用?
负载均衡:反向代理可以将请求分发给多个后端服务器,平衡服务器负载,提高系统的性能和可靠性。它可以根据不同的算法(如轮询、加权轮询、最少连接数等)来选择后端服务器,确保请求被合理地分配。
缓存加速:反向代理可以缓存静态内容或频繁请求的动态内容,减轻后端服务器的负载并加快响应速度。它可以在缓存中保存响应,并在后续请求中直接返回缓存的响应,而无需访问后端服务器。
安全性和访问控制:反向代理可以充当安全屏障,隐藏后端服务器的真实IP地址和架构细节,提供一定的安全性。它可以实施访问控制、身份验证和授权策略,保护后端服务器免受恶意请求和攻击。
SSL加密和解密:反向代理可以承担SSL终止(SSL Termination)的功能,将客户端和后端服务器之间的SSL/TLS加密和解密处理在代理层进行,减轻后端服务器的计算负载。