Nginx配置反向代理隐藏服务端口

Nginx配置反向代理隐藏服务端口

前言

对于个人开发者来说,在一台 Linux 服务器或自己的 VPS 上,通常会部署多个 Web 服务,有的服务默认监听的是 80/443 端口,只需对 Nginx 进行简单的配置、设置伪静态等等即可完成,而有的服务既非静态网页,也不使用 Linux 中既有的 PHP 等程序,而是使用自己项目内部构建的程序(比如 Node.js、Tomcat 等),这些服务往往监听的是非 80/443 端口,在配置个人域名后,不得不在域名后加上服务器端口才能访问,既不美观,也不方便。是否有办法可以隐藏 URL 中的服务器端口,使用域名进行区分?

例如:http://1.1.1.1:1111 -> http://1.example.comhttp://1.1.1.1:2222 -> http://2.example.comhttp://example.com:3333 -> http://3.example.com

代理服务器的类型

与代理服务器相关的概念,主要有正向代理、反向代理、透明代理。这三者的关系在这篇文章里介绍的很清楚,在此言简意赅地做举例梳理:假设有客户端 A、代理服务器 B、Web 服务器 C:

正向代理:客户端 A 向 代理服务器 B 发送一个请求并指定 Web 服务器 C 为目标,代理服务器 B 转交请求并将获得的内容返回给 客户端 A。主要实践是突破网络封锁的各类工具。

反向代理:客户端 A 类似于 Web 服务器,发出的内容和请求将由 代理服务器 B 进行判断分发,客户端 A 不知道 代理服务器 B 的存在。主要实践是 WEB 服务。

透明代理:客户端 A 不知道 代理服务器 B 的存在,在访问 服务器 C 时,由 代理服务器 B 代为访问,但 代理服务器 B 对报文进行改写和过滤。主要实践是公司内部的网络管理系统(如深某服)。

反向代理的意义

如前言所述,把不同的子域名转发到同一机器的不同的服务上。

进一步地,把不同的请求转发到不同的服务器上——即负载均衡。

隐藏实际服务,提升安全性

配置 Nginx 反向代理

实际上对前沿所述的情况,针对某个服务进行 Nginx 反向代理配置很简单,下面是监听域名 example.com 并转发到 8080 端口的例子:

复制

server { listen 80; server_name example.com; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://127.0.0.1:8080/; }}

在另外一篇文章中,我看到了如下示例:

复制

upstream webServer01 { server 127.0.0.1:3001; keepalive 64;}upstream webServer02 { server 127.0.0.1:3002; keepalive 64;}server { listen 80; server_name www.myApp01.com; #access_log /var/log/nginx/test.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://webServer01; }}server { listen 80; server_name www.myApp02.com; #access_log /var/log/nginx/test.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://webServer02; }}

这一配置也能实现以 www.myApp01.com 访问时,将进入webServer01,当我们以 www.myApp02.com 访问时,将进入webServer02。其中已经用到的 upstream 模块就是用来配置负载均衡的。关于负载均衡的详细资料,可以参考 Nginx 开发从入门到精通

宝塔面板配置

如果使用了宝塔面板进行建站,可以在面板菜单【网站】中对特定网站进行设置,转发 1200 端口的例子如下图:

参考链接:图解正向代理、反向代理、透明代理Nginx 反向代理的一次使用总结Nginx 开发从入门到精通

🎎 相关推荐

泗的成语
🎯 365bet电脑网站

泗的成语

📅 07-08 👀 924
50寸电视机长宽是多少尺寸的 50寸电视机长宽介绍【详解】
微信听筒模式怎么取消
🎯 5443655

微信听筒模式怎么取消

📅 07-12 👀 4157