×

OpenResty(nginx) 转发到Caddy Docker容器

2022-05-18 12:47:43 Falcon

创建Caddy Docker容器

创建并运行 run.sh

#!/bin/env bash

docker rm -f caddy

# $DOCKER_CONF是你存放caddy相关数据的映射目录

docker run -d --name caddy \
    -p 8888:80 \
    -p 8443:443 \
    -v 你的网站目录:/srv \
    -v $DOCKER_CONF/caddy/caddy_data:/data \
    -v $DOCKER_CONF/caddy/caddy_config:/config \
    caddy \
    caddy file-server --domain 你的域名

注意:caddy的80和443端口必须映射出来,否则无法自动签发SSL证书。

OpenResty设置

如果OpenResty同时Serve其他https服务,或者443端口运行其他服务,根据域名进行转发。

#ssl_preread_servername.conf ,在nginx.conf的http段前面include

stream {

    upstream ssh{
        server 127.0.0.1:22;
    }

    upstream www{
        server 127.0.0.1:4430;
    }

    upstream caddy{
        server 127.0.0.1:8443;
    }
    // ...
}
 map $ssl_preread_server_name $ssl_server {
        你的域名 caddy;
        // ... 
        default www;
}
server {
        listen 443;
        ssl_preread on;
        proxy_pass $ssl_server;
        proxy_connect_timeout 5s;
    }

openresty转发Server 80端口到本地8888端口:

server {
    listen      80;
    server_name  你的域名;                  #修改为自己的域名

    location / {
        add_header  Via "OpenResty";
        proxy_set_header Host 你的域名; #不能省略这一行,不然会被Caddy重定向到 https://localhost
        proxy_pass http://localhost:8888;
    }
}

 proxy_set_header Host 你的域名;

注意:不能省略这一行,不然会被Caddy重定向到 https://localhost

重启openresty

不要用reload,不然 sni preread 配置有可能不生效,强制重启。

systemctl restart openresty

本文收录于