一个nginx上面监听80端口,对应servicename不一样开源吗? 比如 abc.net,zztools.mmm.com 都使用80端口,怎么办。都是指向同一个ip

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 经验分享
  • 时间:2026-05-23 22:34
  • 20人已阅读
简介 你的问题正是Nginx的核心功能之一,它通过“基于域名的虚拟主机”技术,完美支持多个域名共用一个80端口,无需额外付费,完全是开箱即用的。🚀核心:每个域名一个server块解决这个问题的关键在于,为每个域名创建一个独立的server配置块。Nginx会检查HTTP请求头中的Host字段,并根据server_name的配置将请求路由到正确的server块。以下是一个最基础的配置示例,展示了如何让j

🔔🔔好消息!好消息!🔔🔔

有需要的朋友👉:微信号 kaigejava2022

你的问题正是Nginx的核心功能之一,它通过 “基于域名的虚拟主机” 技术,完美支持多个域名共用一个80端口,无需额外付费,完全是开箱即用的。

🚀 核心:每个域名一个 server

解决这个问题的关键在于,为每个域名创建一个独立的 server 配置块。Nginx会检查HTTP请求头中的 Host 字段,并根据 server_name 的配置将请求路由到正确的 server 块。

以下是一个最基础的配置示例,展示了如何让 abc.netzztools.kaigejava.com 分别指向服务器上不同的网站目录:

server {
    listen 80;                     # 监听 80 端口
    server_name abc.net;    # 处理指向此域名的请求
    root /var/www/abc;      # 网站文件存放的根目录
    index index.html index.htm;
}

server {
    listen 80;                     # 同样监听 80 端口
    server_name zztools.kaigejava.com; # 处理指向此域名的请求
    root /var/www/zztools;        # 为第二个域名指定不同的网站目录
    index index.html index.htm;
}

🔄 常用组合模式:静态文件 + 反向代理

实际业务中,一个项目是静态网站,另一个是后端服务的情况很常见。下面这种组合非常实用:abc.net 直接处理静态文件,而 zztools.kaigejava.com 作为反向代理,将请求转发给服务器上运行的 Node.js 或 Java 应用。

server {
    listen 80;
    server_name abc.net;
    root /var/www/jiahoayou;
    index index.html;
}

server {
    listen 80;
    server_name zztools.kaigejava.com;
    
    location / {
        proxy_pass http://localhost:3000; # 转发给本地 3000 端口的应用
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

📋 最佳实践与建议

  • 配置文件拆分管理:为每个域名在 /etc/nginx/conf.d/ 目录下创建一个独立的 .conf 文件(如 abc.net.conf),然后在主配置文件 nginx.confhttp 块中统一引入。这种方式清晰明了,便于维护和排查问题。

  • 测试与重载:每次修改配置后,务必先运行 sudo nginx -t 进行语法测试。测试通过后,用 sudo systemctl reload nginxsudo nginx -s reload 重新加载配置,使修改生效,此过程不会中断服务。

⚠️ 常见问题与排查

  • server_name 重复警告:如果启动或重载时遇到 [warn] conflicting server name ... 警告,说明你在相同的端口(如80)上为同一个域名配置了多个 server 块。检查并删除或禁用重复的配置块即可。

  • 域名指向错误网站:这通常是你配置的默认 server 块生效了。Nginx会使用第一个监听了80端口的 server 块作为默认处理者。你可以通过创建一个 default_server 来返回404或指定错误处理行为。

  • 网站无法访问:请检查本地防火墙(如 iptables, firewalld)是否放行了80端口。同时,需要确保所有域名都已通过域名服务商正确解析到了服务器的公网IP。

💎 进阶说明

  • 动态后端:如果你的后端应用是动态的(如PHP, Python, Node.js),server 块内的配置会不同。例如,PHP项目通常需要配合 fastcgi_pass 指令将请求转发给PHP-FPM服务来处理。你可以根据你的具体技术栈进行扩展。

  • HTTPS配置:如果未来需要启用HTTPS,请使用 listen 443 ssl; 并配置证书路径。对于多个HTTPS站点,Nginx支持SNI,可以在同一个IP和端口上使用不同证书。

💎 总结

总的来说,通过配置多个 server 块,Nginx能轻松实现你“不同域名共用80端口”的需求。基于上面提供的模板,你可以很方便地为每个域名设置专属的网站目录,或者通过反向代理,让不同域名的请求流转到后端的各种服务上。

你的这两个域名,后端分别对应什么类型的应用呢?比如一个是静态网站,另一个是Java或Node.js的服务?告诉我具体的应用类型,我可以直接给你生成拿来即用的配置参考~


TopTop