如果您想要重定向现有网站到另一个网址,或者隐藏现有网址的端口号,或者实现多服务共用80/443端口等,可通过自建反向代理服务。
Nginx反向代理
Nginx反向代理转发(Reverse Proxy),是网站和服务架构中极常用的技术手段。它最大的特点是:客户端并不直接访问后端应用(如 web 服务、API 服务、Tomcat、Node.js、后端存储等),而是统一访问 Nginx,然后由 Nginx “代理转发”请求到后端,收到响应再转发给客户端。
网络架构
用户访问域名,LocalDNS发起递归查询,最终返回域名配置的Nginx服务器IP。
用户访问IP,Nginx根据请求头中的Host将请求转发到正确的服务(Web/API/数据库)。
自建代理服务优势
隐藏服务真实IP、端口,避免服务公网暴露。
完全掌控转发规则,不受云解析DNS的URL转发额度限制。
支持HTTPS协议,可实现HTTPS->HTTPS转发。
多服务共享80/443端口。
安装Nginx
我们以阿里云ECS服务器Alinux3操作系统为例,介绍Nginx安装步骤。
参考控制台自定义购买并使用ECS实例,完成服务器创建,绑定公网IP并在安全组放行22/80/443端口等。
登录服务器,安装Nginx。
yum install nginx
启动Nginx并设置开启启动。
sudo systemctl start nginx sudo systemctl enable nginx
确认服务启动。
sudo systemctl status nginx
查看Nginx配置文件,主要关注配置文件:
/etc/nginx/nginx.conf
。(可选)后续修改配置,需要执行命令重启服务。
systemctl reload nginx
场景化配置
访问http://cloud-example.net
直接重定向到https://aliyun.com
常见于域名升级、品牌归并、网站迁移,旧域名不再使用,新域名上线场景。公网权威解析的URL转发功能虽然也能实现重定向功能,但其本身也是通过反向代理实现,无SLA保障,且无法支持HTTPS协议。自建Nginx代理配置如下:
# 将 http://cloud-example.net 显性转发至 https://aliyun.com
server {
listen 80;
server_name cloud-example.net;
location / {
return 301 https://aliyun.com$request_uri; # 301永久跳转
# return 302 https://aliyun.com$request_uri; # 302临时跳转
}
}
如果原域名支持HTTPS协议,需要实现支持HTTPS->HTTPS跳转,则需要配置SSL证书才可进行重定向。公网权威解析的URL转发由于无法配置证书,不支持HTTPS->HTTPS跳转。自建Nginx代理配置如下:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/old.com.crt;
location / {
return 301 https://aliyun.com$request_uri; # HTTPS到HTTPS跳转
}
}
访问http://example.com
,网址不变,直接返回http://aliyun.com
站点内容
常见于分销、品牌代理,或者多个后端服务,目标网站不适合或者不具备直接向客户暴露的场景。公网权威解析的URL转发功能虽然也能实现重定向功能,但其本身也是通过反向代理实现,无SLA保障,且无法支持HTTPS协议。自建Nginx代理配置如下:
# 将 example.com 隐性转发至 aliyun.com(保留地址栏显示)
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://aliyun.com; # 核心指令
proxy_set_header Host $host; # 传递原始域名
proxy_set_header X-Real-IP $remote_addr;
}
}
域名解析到端口
如果你的域名:example.com
,服务IP: 1.1.x.x
,服务端口:3000
,您想要实现的访问效果:http://example.com
-> 1.1.x.x:3000
。由于云解析DNS的A记录只能支持到IP维度,无法基于端口配置解析记录。自建Nginx代理配置如下:
# 通过域名访问 :3000 端口服务(隐藏端口号)
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000; # 转发到本地端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}
多服务共用80/443端口
例如你有多个Web服务、API服务、静态服务等,希望都通过同一个公网 80 端口对外访问,但一台服务器的同一个端口原则上只允许一个进程监听。借助反向代理,所有外部流量都进入Nginx,由Nginx根据请求的host、URL路径等规则,把请求“代理转发”到不同的本地端口或者内网服务。自建Nginx代理配置如下:
server {
listen 80;
server_name api.xxx.com;
location / {
proxy_pass http://localhost:8080;
}
}
server {
listen 80;
server_name www.xxx.com;
location / {
proxy_pass http://localhost:7001;
}
}
server {
listen 80;
server_name img.xxx.com;
location / {
proxy_pass http://localhost:9000;
}
}
后续步骤
完成了自建Nginx反向代理服务的搭建和配置后,需要根据代理的服务和关联的域名,配置DNS解析。
准备好域名,如您还没有购买域名,请前往 阿里云域名注册购买。若您域名关联的网站需要部署在中国内地,请提前完成ICP备案。
获取部署Nginx反向代理所在服务器的公网IP地址,本案例中直接获取ECS实例的公网IP地址。
访问云解析DNS-公网权威解析,找到要配置解析的目标域名。
添加解析记录,将域名指向Nginx服务对应的IP地址。详细表单说明请参考添加解析记录。