nginx配置多个域名使用同一个端口

本文介绍了如何利用Nginx的代理转发功能,实现在同一台服务器上多个服务共享80端口,并通过不同域名进行区分。详细配置了Nginx的server块,分别针对a.com和b.com设置代理,使得a.com请求转发到8080端口的服务,b.com请求转发到8081端口的服务。同时,还展示了如何设置默认域名,确保未明确指定域名时的请求处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着服务器性能的提升和业务的需求,一台服务器上往往会同时有多个服务,这些服务都希望监听80端口,比如有a.com和b.com。这时候我们可以使用nginx的代理转发功能帮我们实现共用80端口的需求。

先在两个空闲的端口上分别部署项目(非80,假设是8080和8081)nginx配置如下:

# a项目配置nginx
server {
    listen       8080;
    root         /usr/share/nginx/html;    #这里是默认路径,生产中代码存放路径:root /web/vue-base-demo/dist/;
    index        index.html;
    location / {}
}
# b项目配置nginx
server {
    listen       8081;
    root         /usr/share/nginx/html;    #这里是默认路径,生产中代码存放路径:root /web/react-base-demo/build;
    index        index.html;
    location / {}
}

紧接着如果已经做好域名解析,希望a.com打开a项目,b.com打开b项目。我们需要再做两个代理,如下:


# nginx 80端口配置 (监听a二级域名)
server {
    listen  80;
    server_name     a.com;
    location / {
        proxy_pass      http://localhost:8080; # 转发
    }
}
# nginx 80端口配置 (监听b二级域名)
server {
    listen  80;
    server_name     b.com;
    location / {
        proxy_pass      http://localhost:8081; # 转发
    }


nginx如果检测到a.com的请求,将原样转发请求到本机的8080端口,如果检测到的是b.com请求,也会将请求转发到8081端口。

测试:浏览器输入http://a.com或http://b.com即可。
如果还有其它的想让谁做为默认的为80端口,后listen 80 后加上default_server; 就好

server {
    listen  80 default_server; 
    server_name     b.com;
    location / {
        proxy_pass      http://localhost:8081; # 转发
    }
### 实现单个域名映射至多个端口 为了使单一域名能够访问服务,位于不端口上的应用,Nginx配置需利用 `location` 或者基于路径的路由分发机制。这允许根据 URL 中的不路径将流量导向特定的服务端口。 #### 使用 Location 块区分路径并转发请求 对于域名下运行于不端口的应用程序,比如教育平台(edu)和视频点播(vod),可以在 Nginx 配置文件中定义不的 location 块来处理这些情况: ```nginx http { upstream backend_servers { server localhost:8080 weight=5; server localhost:8081 weight=1; } server { listen 80; server_name example.com; # 教育平台路径 location /edu/ { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 视频点播平台路径 location /vod/ { proxy_pass http://localhost:8081/; proxy_set_header Host $host; proxy_set_headre X-Real-IP $remote_addr; } # 如果需要负载均衡,则可以直接使用upstream定义好的backend_servers location /loadbalancedpath/ { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 上述配置展示了如何针对 `/edu/` 和 `/vod/` 路径分别指向本地机器上监听在 8080 和 8081 端口的服务[^4]。 时也展示了一个简单的负载均衡例子,其中两个后端服务器被分配了不的权重值以影响它们接收请求的比例。 #### 关键要点说明 - **listen**: 定义此虚拟主机响应哪个 IP 地址及端口号,默认情况下会监听所有可用接口。 - **server_name**: 设置本虚拟主机所对应的域名列表,支持精确匹配、前缀匹配以及正则表达式匹配等多种方式[^2]。 - **location**: 对应 HTTP 请求 URI 的一部分,用来指定资源的位置模式,进而决定如何处理来自客户端的请求。 - **proxy_pass**: 将接收到的请求转交给另一个 Web 服务器去完成实际的内容生成工作,并把得到的结果返回给原始客户机。 - **proxy_set_header**: 修改或添加发送到上游服务器之前HTTP头部字段的信息,确保正确传递客户端的真实地址和其他必要信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值