当前位置:首页 > 技术 > 正文内容

Nginx配置多域名共享80端口的实现方法

访客 技术 2026年5月28日 5

概述

在企业服务器部署场景中,经常会遇到单机需要托管多个Web应用的需求。这些应用都希望通过标准端口(80或443)对外提供服务,以便用户可以直接通过域名访问而无需记住复杂的端口号。本文将详细介绍如何利用Nginx实现多域名共享80端口的配置方案。

配置思路

HTTP服务默认监听80端口,HTTPS服务默认监听443端口。当用户通过浏览器访问网站时,可以直接使用域名进行访问而无需额外指定端口。Nginx作为高性能的反向代理服务器,能够根据请求的域名智能分发到对应的后端服务,从而实现多个服务共享同一端口的需求。

环境准备

Nginx配置文件通常位于/etc/nginx目录。可以通过以下命令查看配置文件结构:

# 查看nginx配置目录
ls -la /etc/nginx

# 主要配置文件说明
# nginx.conf          - 主配置文件
# conf.d/             - 自定义配置目录
# sites-enabled/      - 启用的站点配置
# sites-available/    - 可用的站点配置

方案一:反向代理模式

该方案适用于后端服务运行在不同端口的场景,Nginx作为反向代理服务器,根据域名将请求转发到对应的后端服务端口。

步骤1:配置后端服务

首先在nginx.conf中配置两个后端应用服务,分别监听不同端口:

// 配置后端应用服务
// nginx.conf

// 应用一配置
server {
    listen       8080;
    server_name localhost;
    try_files $uri $uri/ /index.html;
    root    /var/www/app1;
}

// 应用二配置
server {
    listen       8081;
    server_name  localhost;
    try_files $uri $uri/ /index.html;
    root    /var/www/app2;
}

步骤2:配置反向代理

添加反向代理配置,根据域名将请求转发到对应的后端服务:

// 配置反向代理
// nginx.conf

// 应用一域名代理
server {
    listen       80;
    server_name app1.example.com;
    location / {
        proxy_pass http://localhost:8080;
    }
}

// 应用二域名代理
server {
    listen       80;
    server_name app2.example.com;
    location / {
        proxy_pass http://localhost:8081;
    }
}

步骤3:重启服务

# 重启Nginx服务使配置生效
sudo systemctl restart nginx

步骤4:域名解析配置

需要在DNS服务器或本地hosts文件中添加域名解析记录,将域名指向服务器IP地址。如果是公网部署,还需要确保防火墙开放相应端口。

方案二:直接服务模式

该方案适用于静态文件服务场景,Nginx直接托管多个域名的静态资源,无需额外配置后端服务。

配置示例

// nginx.conf
// 监听app1二级域名

server {
    listen  80;
    server_name     app1.example.com;
    location / {
        root   /var/www/app1;
        index  index.html index.htm;
    }
}

// 监听app2二级域名

server {
    listen  80;
    server_name     app2.example.com;
    location / {
        root   /var/www/app2;
        index  index.html index.htm;
    }
}

验证配置

完成配置后,执行以下命令验证配置文件的语法正确性:

# 检查配置语法
sudo nginx -t

# 重新加载配置
sudo systemctl reload nginx

配置验证

可以通过以下方式进行验证:

  • 使用nginx -t命令检查配置语法
  • 通过浏览器访问各域名确认能否正确跳转
  • 查看nginx日志排查潜在问题

注意事项

  • 确保server_name与实际域名完全匹配
  • 修改配置后记得重启或重载nginx服务
  • 注意检查防火墙和网络策略是否允许相应端口通信
  • 建议生产环境使用HTTPS协议保障通信安全
标签: Nginx

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。