Nginx配置多域名共享80端口的实现方法
概述
在企业服务器部署场景中,经常会遇到单机需要托管多个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协议保障通信安全