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