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/;
}
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐