A服务器端口b转发C服务器端口d的一次实践[nginx反向代理实现]

174 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

准备工作

项目部署在C服务器的端口d,现在用服务器A的端口b来转发。 假设:

  • C服务器公网ip为1.2.3.4,d端口为666
  • A服务器公网ip为2.3.4.5,b端口为888

如果实现后
任意浏览器地址栏输入 1.2.3.4:6662.3.4.5:888 均可访问项目(前提:服务器和相应的端口需要允许外网访问...)
另外,本文不涉及C服务器如何部署项目,只涉及如何用A服务器的端口b转发相关,为详细记录,关键步骤处均截图
ok,开始实践

下载并启动nginx

nginx官网地址:nginx.org/

点击右下方下载按钮 image.png

跳转到各种版本界面如下图
由于我的服务器为window操作系统,选择下载nginx/window 1.18.0版本(我常用,其他版本也行) image.png

解压下载的zip文件,进入到如下路径
选择打开文件扩展名,可以看到exe后缀,可双击直接运行 image.png

当然,也可以用cmd的命令start nginx来运行/启动nginx image.png

【动图教程】cmd可以直接在路径栏中直接打开 动画2.gif 命令nginx -v是查看nginx版本信息
注意:这样打开的cmd当前路径正好是nginx.exe文件所在位置处,如果不是,nginx会找不到,导致报错,切记!

这里有一个检测nginx配置是否成功的方式
打开C服务器上的任意浏览器(IE也行),访问localhost,出现如下界面,代表成功启动nginx image.png

nginx反向代理配置(关键)

打开conf文件夹 image.png

用记事本打开nginx.conf(vs code打开更好,不过我服务器环境没装...) image.png

其中代码只用找到server{....}模块即可,可以将他的server整体注销(每行开头用#注释),也可以在他的基础上进行修改,修改后如下即可

server {
    listen       888;  //监听A服务器的端口888      
    server_name  127.0.0.1; //监听的地址,也可以写成localhost
    index index.html;

    location / {            
        proxy_pass             http://1.2.3.4:666; // 被转发的地址
        proxy_set_header    Host $proxy_host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

特此说明:

  1. 上面监听的地址127.0.0.1那一行完全可以不写,因为就是本地监听
  2. proxy_pass http://1.2.3.4:666这一行中的被转发地址为 C服务器的外网IP + 端口 ;如果写成 C服务器的内网IP + 端口 更佳!,因为不用通过外网了,直接内网映射,省了一层,速度翻倍(想不到吧....)

保存配置 + 重启 nginx + 测试访问

保存nginx.conf文件后,cmd窗口还没关闭吧,如果关了,那就用上面方式打开,并进入到nginx.exe所在目录
执行命令nginx -s reload即可重启nginx,如果报错了,那就是nginx.conf修改的不对
报错会提示多少行写的不对,可再次打开配置文件修改后重新尝试重启nginx,直至重启成功(没有任何返回,即为成功)

常见错误:如果报错行为n,那也有可能n-1行结尾处的分号忘记加了(每一行都以分号结尾)

测试的话,可以分两种方式测试是否成功

(1)C服务器上测试
C服务器上任意浏览器中输入localhost:888访问到C服务器的端口d上部署的项目,则为成功!
(2)非C服务器任意终端的浏览器上测试
用C服务器的外网IP + 端口号访问:2.3.4.5:888

结语

其实回想起来,原理还是很简单的,会者不难,难者不会吧。希望能帮助到你!
有时间可以研究下深层次的原理,但前提是先会用,然后再剖析其内层逻辑