要将一个域名映射到同一个 IP 地址的不同端口上,通常需要结合 DNS 解析和 Web 服务器配置来实现。由于 DNS 本身只能解析域名到 IP 地址,而不能直接指定端口,因此需要通过 Web 服务器(如 Nginx 或 Apache)来处理不同端口的请求,并将它们路由到相应的服务。
以下是实现这一目标的详细步骤:
example.com。192.0.2.1。假设你想通过 example.com 的不同端口(如 8080 和 8443)访问不同的服务。
如果你还没有安装 Nginx,可以使用以下命令安装:
编辑 Nginx 配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。你可以为每个端口创建单独的服务器块。
# 监听 8080 端口
server {
listen 8080;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000; # 将请求转发到本地的 8000 端口
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;
}
}
# 监听 8443 端口(HTTPS)
server {
listen 8443 ssl;
server_name example.com;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
proxy_pass http://127.0.0.1:8443; # 将请求转发到本地的 8443 端口
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;
}
}listen 8080; 和 listen 8443 ssl; 分别让 Nginx 监听 8080 和 8443 端口。proxy_pass 将请求转发到本地的不同端口(如 8000 和 8443),你可以根据需要修改这些端口以指向不同的服务。如果你需要为 8443 端口启用 HTTPS,可以使用 Let's Encrypt 获取免费的 SSL 证书:
测试配置是否正确:
sudo nginx -t如果没有错误,重启 Nginx:
sudo systemctl restart nginx确保服务器的防火墙允许 8080 和 8443 端口的流量:
如果你希望通过同一个端口(如 80 或 443)访问不同服务,可以使用路径来区分。例如:
http://example.com/app1 → 端口 8000http://example.com/app2 → 端口 8001server {
listen 80;
server_name example.com;
location /app1/ {
proxy_pass http://127.0.0.1:8000/;
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;
}
location /app2/ {
proxy_pass http://127.0.0.1:8001/;
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;
}
}这样,用户访问 http://example.com/app1/ 会被代理到本地的 8000 端口,访问 http://example.com/app2/ 会被代理到 8001 端口。
http://example.com:8080。example.com 正确解析到服务器的 IP 地址 192.0.2.1。ping example.com 或 nslookup example.com 来验证 DNS 解析。app1.example.com 和 app2.example.com),可以在 DNS 中添加相应的 A 记录,并在 Nginx 中配置不同的 server_name。假设你有两个服务:
127.0.0.1:8000127.0.0.1:8001你希望通过 example.com:8080 访问服务 A,通过 example.com:8443 访问服务 B。
# 监听 8080 端口,代理到服务 A
server {
listen 8080;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
}
# 监听 8443 端口,代理到服务 B,并启用 HTTPS
server {
listen 8443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
proxy_pass http://127.0.0.1:8001;
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;
}
}http://example.com:8080https://example.com:8443注意:由于 8443 是非标准 HTTPS 端口,浏览器可能会显示安全警告,建议使用标准端口 443。
假设你希望通过同一个端口(如 443)访问不同服务,可以使用路径来区分。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 服务 A
location /app1/ {
proxy_pass http://127.0.0.1:8000/;
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;
}
# 服务 B
location /app2/ {
proxy_pass http://127.0.0.1:8001/;
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;
}
}https://example.com/app1/https://example.com/app2/这种方式更符合用户的访问习惯,且无需指定额外端口。
没有搜到相关的沙龙