Nginx配置同一端口不同域名或同一IP不同端口
以下是如何在Nginx中配置同一端口不同域名,以及同一IP不同端口的详细说明:
一、同一端口不同域名(基于名称的虚拟主机)
场景:
通过80端口,让 example.com
和 test.com
指向不同的网站目录(如 /var/www/example
和 /var/www/test
)。
配置步骤:
-
创建两个域名对应的网站目录:
sudo mkdir -p /var/www/example sudo mkdir -p /var/www/test
-
编辑Nginx配置文件(通常位于
/etc/nginx/sites-available/
或直接在/etc/nginx/nginx.conf
中):# 配置 example.com server {listen 80;server_name example.com; # 指定域名root /var/www/example; # 网站根目录index index.html; # 默认首页# 其他配置(如日志、反向代理等)access_log /var/log/nginx/example_access.log;error_log /var/log/nginx/example_error.log; }# 配置 test.com server {listen 80;server_name test.com;root /var/www/test;index index.html;access_log /var/log/nginx/test_access.log;error_log /var/log/nginx/test_error.log; }
-
测试配置并重启Nginx:
sudo nginx -t # 检查配置语法 sudo systemctl reload nginx # 或重启:sudo systemctl restart nginx
验证:
- 浏览器访问
http://example.com
和http://test.com
,将分别显示对应目录的内容。
二、同一IP不同端口
场景:
通过IP的8080端口提供静态页面,8081端口运行一个Node.js应用。
配置步骤:
-
创建不同端口的服务目录:
sudo mkdir -p /var/www/static sudo mkdir -p /var/www/nodeapp
-
配置Nginx监听不同端口:
# 静态站点(8080端口) server {listen 8080;server_name localhost; # 可省略或指定IProot /var/www/static;index index.html; }# Node.js应用代理(8081端口) server {listen 8081;server_name localhost;location / {proxy_pass http://localhost:3000; # 假设Node.js运行在3000端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;} }
-
测试配置并重启Nginx:
sudo nginx -t sudo systemctl reload nginx
验证:
- 访问
http://服务器IP:8080
查看静态页面。 - 访问
http://服务器IP:8081
将请求转发到本地的Node.js应用。
三、关键注意事项
-
域名解析:
确保域名已正确解析到服务器IP(通过DNS设置或本地hosts文件临时测试)。 -
防火墙开放端口:
如果使用防火墙(如UFW或firewalld),需放行对应端口:sudo ufw allow 80/tcp sudo ufw allow 8080/tcp sudo ufw allow 8081/tcp
-
默认服务器:
如果请求未匹配任何server_name
,Nginx会使用第一个server
块作为默认。可手动指定:listen 80 default_server;
-
HTTPS扩展:
若需启用HTTPS,每个域名需单独配置SSL证书:server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/example.crt;ssl_certificate_key /path/to/example.key;... }
-
日志分离:
建议为每个服务配置独立日志,便于排查问题。
通过以上配置,您可以灵活实现基于域名或端口的请求分发,适用于多站点托管或微服务架构。