Nginx代理-端口转发

该博客介绍了如何通过nginx和docker配置端口转发,实现一台服务器上多个服务容器的端口分发。在服务器上安装nginx并修改配置文件,设置不同server块监听不同端口或域名,将请求转发到对应的服务容器。同时,讲解了如何在不使用docker的单容器环境中,通过nginx配置实现不同服务在80端口的访问。此外,还提及了修改nginx请求path的方法,以及配置https和多个域名共用80端口的技巧。

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

1. 端口转发

使用nginx+docker实现端口转发

背景:
一台服务器,使用docker搭建了多个服务容器;
服务1:0.0.0.0:3010->80/tcp
服务2:0.0.0.0:3000->80/tcp

实现目标:
1.在服务器监听访问端口,实现指定的端口分发
2.多个域名绑定一台服务器的不同服务,都使用80端口

实现方法:
在服务器端,最外层使用nginx服务

apt-get install nginx

修改nginx配置(/etc/nginx/sites-enabled)
1.监听不同端口
server_name 使用域名、服务器ip地址都可以

## nginx代理转发
# 根据接收的域名/ip+端口号 转发到指定端口的docker容器服务

server {
    listen  80;
    server_name     www.micico.cn;
    location / {
        proxy_pass      http://0.0.0.0:3010; # 转发
    }
}

server {
    listen  8999;
    server_name     www.micico.cn;
    location / {
        proxy_pass      http://0.0.0.0:3000; # 转发
    }
}

2.多域名都使用80端口

## nginx代理转发
# 根据接收的域名/ip+端口号 转发到指定端口的docker容器服务

server {
    listen  80;
    server_name     www.micico.cn;
    location / {
        proxy_pass      http://0.0.0.0:3010; # 转发
    }
}

server {
    listen  80;
    server_name     test.micico.cn;
    location / {
        proxy_pass      http://0.0.0.0:3000; # 转发
    }
}

3.若需要配置多个https,则需要在域名服务商申请ssl,下载之后
然后再nginx配置

server {
   listen 443 ssl;
   server_name www.micico.cn;
   ssl_certificate /path/to/www.micico.cn.crt;
   ssl_certificate_key /path/to/www.micico.cn.key;
   location / {
       proxy_pass      http://0.0.0.0:3010; # 转发
   }
}

server {
   listen 443 ssl;
   server_name test.micico.cn;
   ssl_certificate /path/to/test.micico.cn.crt;
   ssl_certificate_key /path/to/test.micico.cn.key;
   location / {
       proxy_pass      http://0.0.0.0:3000; # 转发
   }
}


未使用docker(单容器)实现

背景:
单个nginx服务,使用不同端口开启了多个服务

nginx配置:/etc/nginx/sites-enabled/default.conf

1.正常的nginx配置(示例)使用你自己的即可,不用复制

# 服务1的监听配置
# 正常访问:www.micico.cn:8080
# 注意:不用复制,使用自己的配置就可以,此处为示例
server {
    listen       8080;
    root         /var/www/html/service1/publish/;
    index        index.html;
    location / {
        try_files $uri $uri/ /index.html;
    }
}
 
# 服务2的监听配置
# 正常访问:www.micico.cn:8081
# 注意:不用复制,使用自己的配置就可以,此处为示例
server {
    listen       8081;
    root         /var/www/html/service2/publish/;
    index        index.html;
    location / {
    	try_files $uri $uri/ /index.html;
    }
}

2.需要不同域名都使用80端口访问,可在conf文件添加以下配置

## nginx代理转发
# 根据接收的域名/ip+端口号 转发到指定端口服务

server {
    listen  80;
    server_name     www.micico.cn;
    location / {
        proxy_pass      http://0.0.0.0:8080; # 转发
    }
}

server {
    listen  80;
    server_name     test.micico.cn;
    location / {
        proxy_pass      http://0.0.0.0:8081; # 转发
    }
}

注意事项

若多个域名需要使用80端口,则搭建服务时,需要使用80端口以外的其他端口

2. nginx修改请求path

有时候我们想把abc的路径修改为实际请求的是/def这个路径 我们就可以这样写,利用rewrite来实现

改path

location ^~ /abc {
   rewrite ^/abc$ /def break;
   #proxy_pass http://aaa.com;
}

也可以进行地址拼接转换,下面是去掉v1

location ^~/v1/ {
   rewrite ^/v1/(.*)$ /$1 break;
}

如果是增加一个别的前缀,比如v1/xxx改成v1/aaa/xxx
就要在后面代理拼上path

location ^~/v1/ {
   rewrite ^/v1/(.*)$ /v1/aaa/$1 break;
   proxy_pass http://localhost:8080/v1/aaa/;
}
### Nginx 端口转发与反向代理配置 Nginx端口转发功能通过其强大的反向代理能力实现。以下是关于如何配置 Nginx 进行端口转发的具体方法。 #### 1. 配置文件位置 在开始之前,需找到 Nginx 的主配置文件 `nginx.conf`,该文件通常位于 `/etc/nginx/nginx.conf` 或 `/usr/local/nginx/conf/nginx.conf` 中[^2]。 #### 2. 基本配置结构 Nginx 的反向代理配置主要写入 `server` 块中。以下是一个基本的配置模板: ```nginx http { server { listen 80; server_name localhost; # 转发规则定义 location /example/ { proxy_pass http://127.0.0.1:9001/; } } } ``` 上述配置表示当客户端请求路径为 `/example/` 时,Nginx 将把请求转发至本地运行的服务地址 `http://127.0.0.1:9001/`[^3]。 #### 3. 多路径多端口转发示例 如果需要针对不同的 URL 路径映射到多个后端服务的不同端口,则可以扩展配置如下: ```nginx http { server { listen 80; server_name localhost; # 对于 /edu/ 开头的请求,转发端口 8080 location ~ /edu/ { proxy_pass http://127.0.0.1:8080; } # 对于 /vod/ 开头的请求,转发端口 8081 location ~ /vod/ { proxy_pass http://127.0.0.1:8081; } } } ``` 此配置实现了基于路径区分的流量分发机制,使得不同类型的请求能够被路由到对应的后端服务。 #### 4. 测试与生效 完成配置修改后,执行以下命令验证并重新加载 Nginx 配置: ```bash sudo nginx -t # 检查语法错误 sudo systemctl reload nginx # 平滑重启使新配置生效 ``` 以上操作确保新的端口转发规则得以应用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值