nginx 简单实践:正向代理、反向代理【nginx 实践系列之二】
〇、前言
本文为 nginx 简单实践系列文章之二,主要简单实践了两个内容:正向代理、反向代理,仅供参考。
关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章:
https://www.cnblogs.com/hnzhengfy/p/Nginx.html
注意:可以使用测试域名,但前提是要修改 hosts 文件。
路径和重启:Linux(/etc/hosts)(重启命令:/etc/init.d/network restart);Windows(C:\Windows\System32\drivers\etc\hosts)。
例如:192.168.1.1 www.testczzj.com
一、正向代理
1.1 正向代理简介
正向代理主要是为了客户端服务,位于客户端和目标服务器之间。
当客户端(如 Web 浏览器或移动应用程序)需要访问互联网上的资源时,它会向正向代理发送一个请求,并指定目标服务器。然后,正向代理会代替客户端向目标服务器转发这个请求。一旦目标服务器处理了请求并生成了响应,正向代理会将这个响应返回给客户端。

主要用途:
- 正向代理常用于在防火墙内的局域网客户端提供访问 Internet 的途径。例如,公司内部网络,通过一个或多个代理服务器访问互联网资源,以节省带宽、提高访问速度或进行内容过滤。
- 正向代理可以用于提高网络性能,例如通过缓存经常访问的内容来减少带宽使用量。
- 正向代理还可以隐藏客户端的真实身份,客户端主动使用代理服务器,服务端不知道实际发起请求的客户端,使客户端能够访问一些原本无法直接访问的资源,如Google、YouTube等。
1.2 正向代理的示例
Nginx 默认情况下是作为反向代理服务器使用的。为了让其充当正向代理,需要通过配置文件进行修改。
配置文件的路径:/usr/local/nginx/conf/nginx.conf。配置内容如下:
server {
listen 8888;
resolver 8.8.8.8 ipv6=off;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass $scheme://$host;
proxy_set_header Host $host;
allow all;
#if ($request_method = "CONNECT") {
# proxy_pass https://$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;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
}
如下示例,通过正向代理方式,访问百度首页:
[root@www ~]# curl -x http://www.testczzj.com:8888 http://www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
[root@www ~]# curl -x https://www.testczzj.com:8888 https://www.baidu.com
curl: (56) Received HTTP code 400 from proxy after CONNECT
[root@www ~]#
注意,百度首页的协议为 https 时,会返回 400 错误,此问题尚未解决,有哪位大佬知道烦请指教,再做补充。
参考:https://blog.csdn.net/qq_42978535/article/details/142653929
https://blog.csdn.net/weixin_43334761/article/details/135863106
二、反向代理
2.1 反向代理简介
- 位于服务器端和客户端之间,主要用于服务器端的负载均衡、缓存静态内容、加密和SSL加速、安全防护等。
- 服务器主动使用代理服务器,客户端不知道实际提供服务的服务端。
- 常用于网站后端,将客户端的请求转发到内部服务器,然后将响应返回给客户端,对外表现为统一的服务地址。

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是无感的。
反向代理广泛应用于网站托管、大型分布式系统以及需要高效管理网络流量的各种场景中。
2.2 反向代理示例一:加载新地址的页面,但 url 不进行跳转
例如,将 http://www.testczzj.com:8888 的请求转发至示例地址 http://www.testczzj.com:5000。
先准备一个示例项目:

注:通过dotnet new mvc和dotnet run,运行一个示例网站,配置为:"applicationUrl": "https://www.testczzj.com:5001;http://www.testczzj.com:5000"。(另外,代码行app.UseHttpsRedirection();需注释掉,否则 url 会自动重写到 https)
下面是 nginx 的配置详情:
server {
listen 8888;
server_name www.testczzj.com;
#charset utf-8;
#charset koi8-r;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
root /usr/tmp/dotnet_project_test;
index index.html index.htm test_page.html;
proxy_pass http://www.testczzj.com:5000;
}
}
如下图,自动加载页面 http://www.testczzj.com:5000 的内容,同时 url 未跳转:

2.3 反向代理示例二:根据路径访问不同的地址
例如,根据路径中的 user1、user2,将请求转发到不同的端口:
- 访问地址:http://www.testczzj.com:8888/user1/,转发至:http://www.testczzj.com:5000。
- 访问地址:http://www.testczzj.com:8888/user2/,转发至:http://www.testczzj.com:5003。
先准备两个示例项目:

nginx 配置示例:
server {
listen 8888;
server_name www.testczzj.com;
#charset utf-8;
#charset koi8-r;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /user1/ {
rewrite ^/user1/(.*)$ /$1 break; # 通过重写,将路径中的 /user1/ 去掉
proxy_pass http://www.testczzj.com:5000;
}
location /user2/ {
rewrite ^/user2/(.*)$ /$1 break; # 将路径中的 /user2/ 去掉
proxy_pass http://www.testczzj.com:5003;
}
}
效果如下:

参考:https://zhuanlan.zhihu.com/p/451825018
nginx 简单实践:正向代理、反向代理【nginx 实践系列之二】的更多相关文章
- Nginx 之六: Nginx服务器的正向及反向代理功能
一:Nginx作为正向代理服务器: 1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代 ...
- 正向代理/反向代理理解、Nginx概述、安装及配置详解
一.Nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理, ...
- 前nginx后Apache+Node反向代理
前几天一直在被一个问题困扰,机器上跑的站点太多了,Apache上面有十几个,NodeJS的也有一堆,记端口号都要烦死,于是萌生了使用反向代理的想法.出发点貌似太low了,完全不是出于负载均衡.高并发什 ...
- Nginx服务器的使用与反向代理负载均衡
目录 Nginx服务器 一:什么是Nginx? 什么是Nginx - Nginx与其他服努器的性能比较 二:如何在Linux中搭建Nginx服务器? 常见的错误 三:Nginx的反向代理和负载均衡 什 ...
- Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化
一.什么是负载均衡和反向代理 随着网站访问量的快速增长,单台服务器已经无法承担大量用户的并发访问,必须釆用多台服务器协同工作,以提高计算机系统的处理能力和计算强度,满足当前业务量的需求.而如何在完成同 ...
- Nginx服务器部署 负载均衡 反向代理
Nginx服务器部署负载均衡反向代理 LVS Nginx HAProxy的优缺点 三种负载均衡器的优缺点说明如下: LVS的优点: 1.抗负载能力强.工作在第4层仅作分发之用,没有流量的产生,这个特点 ...
- openresty开发系列2--nginx的简单安装,正向、反向代理及常用命令和信号控制介绍
openresty开发系列2--nginx的简单安装,正向.反向代理及常用命令和信号控制介绍 一.nginx的安装下载及编译安装1.Nginx下载:nginx-1.13.0.tar.gz,下载到:/u ...
- nginx的负载均衡和反向代理
本文介绍一些负载均衡和反向代理的一些基本概念,然后介绍如何基于nginx实现,包括两种安装nginx的方法:yum安装和源码安装,以及ngix该如何配置等. 什么是负载均衡? 概念 负载均衡是高可用网 ...
- 使用Nginx对.NetCore站点进行反向代理
前言 之前的博客我已经在Linux上部署好了.NetCore站点且通过Supervisor对站点进行了进程守护,同时也安装好了Nginx.Nginx的用处非常大,还是简单说下,它最大的功能就是方便我们 ...
- Centos 7 上使用nginx为Node.js配置反向代理时错误:(13: Permission denied) while connecting to upstream
错误来源:Centos 7 上使用nginx为Node.js配置反向代理时产生(13: Permission denied) while connecting to upstream的错误 nginx ...
随机推荐
- IDEA如何使用快捷键进行驼峰命名转换
idea菜单栏-file-settings-plugins-在marketplace搜索"CamelCase"-点击安装 安装后重新打开idea,选中内容,使用快捷键:shit+a ...
- django admin 后台管理 新手学习步骤记录 (2)
学习使用django admin后台管理. 参考.Django基础之Admin后台数据管理_django admin_马航行的博客-CSDN博客
- 【杂谈】如何选择:Session 还是 JWT?
服务端如何验证客户端已经登录? 在用户成功登录后,服务端会发放一个凭证.之后,客户端的每次请求都需要携带该凭证,服务端通过验证凭证的有效性来判断用户是否已登录,并处理请求. 以下是 Session 和 ...
- 用 16G 内存存放 30亿数据(Java Map)转载
在讨论怎么去重,提出用 direct buffer 建 btree,想到应该有现成方案,于是找到一个好东西: MapDB - MapDB : http://www.mapdb.org/ 以下来自:ko ...
- 设置Docker的默认文件存储位置
对于windows下,直接修改docker desktop界面的配置项目.对于rocky linux下面,对应的配置文件存储在: vim /etc/docker/daemon.json 文件可以配置镜 ...
- 【NAS】绿联NAS UGOS PRO 使用natfrp(Sakura Frp)内网穿透访问Docker应用
配置加速 https://registry.cn-hongkong.aliyuncs.com 下载镜像 创建容器 [容器]-[创建]-[手动创建]- 选择你下载的镜像即可 在日志中查看密码 访问容器 ...
- 【数据库】MySQL的一些基础知识
ALTER TABLE 表名 DROP 属性名 删除数据表 DROP TABLE 数据库名.表名; 用户管理 创建用户 CREATE USER 'username'@'host' IDENTIFIED ...
- java 随机生成字符串 RandomStringUtils
使用RandomStringUtils,可以选择生成随机字符串,可以是全字母.全数字或自定义生成字符等等... 其最基础的方法如下: public static String random(int c ...
- mac 10.15 国内如何安装brew
下载文件 brew_install.sh,然后执行 sh brew_install.sh 通常会卡在 tapping homebrew/core ,没关系, 执行如下命令即可 解决方法,手动执行下面 ...
- vue3项目实战+element-plus
记录自己搭建前端项目的学习过程和开发过程,希望一起学习进步 采用Vue3+element-plus+axios+vue-router+sass--(目前刚开始是用到了这些,随着开发慢慢更新) npm是 ...