Nginx代理服务器转发解决跨服务器访问
前言 老样子,先来讲讲我所遇到的问题,大概是需要外网访问一个内网服务器,想通过这台内网服务器访问到到另外一台内网服务器(两台内网服务器互通),可以说是跨服务器访问。咨询过大佬后自己在总结一下。大佬一听,立马跟我说,这个很简单,需要nginx做反向代理即可,那么如何操作呢,接下来回顾一下。 &nb
前言
老样子,先来讲讲我所遇到的问题,大概是需要外网访问一个内网服务器,想通过这台内网服务器访问到到另外一台内网服务器(两台内网服务器互通),可以说是跨服务器访问。咨询过大佬后自己在总结一下。大佬一听,立马跟我说,这个很简单,需要nginx做反向代理即可,那么如何操作呢,接下来回顾一下。
首先情况摸清楚:两台服务器,一台外网可访问到的内网服务器一【10.25.7.169:8070】,另一台外网不可访问到的内网服务器二【10.25.12.188:8080】。我们要让外网去访问服务器一,然后通过nginx做反向代理,间接访问服务器二。首先要在服务器一上安装nginx。
linux离线安装Nginx详细步骤
下载nginx安装环境:gcc、g++、pcre、zlib、nginx
1)gcc
## 安装nginx需要将官网下载的源码进行编译,编译一以来gcc和g++,如果没有gcc环境,需要安装gcc
## 下载好所需要的文件后上传至服务器,进入gcc的根目录执行如下操作,
## 当执行下面语后,系统会总动选出所需要的依赖包进行安装不需要的就会自动清理。
[root@xjxx-wwapp gcc]#rpm -Uvh *.rpm --nodeps --force
## 最后查询一下是否安装成功
[root@xjxx-wwapp gcc]#gcc -v
[root@xjxx-wwapp gcc]#g++ -v
## 如果出现他们各自的版本号,说明安装成功
2)pcre
## pcre是一个库,包括perl兼容的正则表达式库
## nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
## 同样进入到pcre根目录下执行如下命令。
[root@xjxx-wwapp pcre]#rpm -ivh pcre-8.32-17.el7.x86_64.rpm --force
[root@xjxx-wwapp pcre]#rpm -ivh pcre-devel-8.32-17.el7.x86_64.rpm --force
3)zlib
## zlib库提供了很多种压缩和解压缩的方式,nigin使用zlib对http包的内容进行gzip。
[root@xjxx-wwapp zlib]#rpm -ivh zlib-1.2.7-18.el7.x86_64.rpm --force
[root@xjxx-wwapp zlib]#rpm -ivh zlib-devel-1.2.7-18.el7.x86_64.rpm --force
4)nginx
## 进入nginx的根目录解压
[root@xjxx-wwapp nginx]#tar -xzvf nginx-1.18.0.tar.gz
## 将源码移动到对应目录下
[root@xjxx-wwapp nginx]#sudo mv nginx-1.18.0 /usr/local/
[root@xjxx-wwapp nginx]#cd /usr/local/nginx-1.18.0/
[root@xjxx-wwapp nginx-1.18.0]#./configure
## 编译
[root@xjxx-wwapp nginx-1.18.0]#make
## 安装
[root@xjxx-wwapp nginx-1.18.0]#make install
## 运行nginx
[root@xjxx-wwapp nginx-1.18.0]#cd sbin/
[root@xjxx-wwapp sbin]#./nginx
## 检查是否安装正确
[root@xjxx-wwapp sbin]#/usr/local/nginx-1.18.0/sbin/nginx -t
## nginx的启动、停止、退出、重新加载配置文件的命令
[root@xjxx-wwapp sbin]#/./nginx
[root@xjxx-wwapp sbin]#/./nginx -s stop
[root@xjxx-wwapp sbin]#/./nginx -s quit
[root@xjxx-wwapp sbin]#/./nginx -s reload
接下来开始配置nginx反向代理
## 进入nginx配置文件
[root@xjxx-wwapp conf]#vim nginx.conf
## 复制一组server,然后进行如下修改
server {
## 监听8080端口
listen 8080;
server_name localhost;
## 路由1配置:如果请求的url包含/,走本地的8070端口访问
location / {
proxy_pass http://127.0.0.1:8070;
proxy_connect_timeout 300s;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
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;
}
## 路由2配置:如果url遇到/appFileDownLoad/的请求,走另外一台内网服务器的8080端口
location /appFileDownLoad/ {
## rewrite 重写当前路径,去掉/appFileDownLoad/标记
rewrite ^/appFileDownLoad/(.*) /$1 break;
proxy_pass http://10.25.12.188:8080;
}
}
假设我们通过外网访问到一个请求:http://外网ip:9527/HVPS/MainServlet/op=report&pid=MAX_DAY,外网访问到内网服务器一【10.25.7.169:8070】,通过nginx反向代理,根据请求url发现,并没有特殊的标记,然后nginx将请求发送给本地;
再假设我们通过外网访问一个请求:http://外网ip:9527/appFileDownLoad/norone/fileDownLoad.do?type=reportDoc&file=1603247989056.xls,外网访问到内网服务器一【10.25.7.169:8070】,通过nginx反向代理,根据请求url发现,有特殊标记/appFileDownLoad/,然后nginx将请求发送给内网服务器二【http://10.25.12.188】
到此为止,我的问题就已经解决了。
更多推荐
所有评论(0)