Nginx代理-端口转发

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

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/;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值