迁移反向代理到docker中nginx

《打造个人写作系统》中,部署的服务都是http的,然后使用群晖提供的反向代理配置的https,其实群晖内部使用的也是nginx,是不是可以通过docker部署nginx,并配置https呢?

一、安装配置nginx

安装配置nginx,主要是把nginx默认的配置拷贝出来,并且创建容器时,指定配置文件映射;

1.1 拉取镜像

可以指定版本,也可以使用默认的最新版本。

docker pull nginx

1.2 创建映射配置目录

这里是把docker相关的数据放在了/mnt/nvme0n1p1/docker/data目录下,当然大家可以根据自己的需要来设置,为了方便后续的目录操作,这里定义一个NGINX_DIR

NGINX_DIR=/mnt/nvme0n1p1/docker/data/nginx
mkdir -p $NGINX_DIR
cd $NGINX_DIR
mkdir html logs cert

1.3 启动临时nginx

docker run -d --name nginx_tmp nginx

1.4 拷贝容器的挂载文件

docker cp nginx_tmp:/etc/nginx $NGINX_DIR
mv $NGINX_DIR/nginx $NGINX_DIR/conf
docker cp nginx_tmp:/usr/share/nginx/html/index.html $NGINX_DIR/html

1.5 删除临时镜像

docker rm -f nginx_tmp

1.6 创建nginx

nginx容器可以选择host网络或者默认的bridge网络,最简单的区别是bridge网络要指定接口映射,比如后续nginx中增加了对其他端口的监听,也需要在端口映射中进行添加。

  1. 使用host网络
docker run -d \
  --name=nginx \
  --restart=unless-stopped \
  --network=host \
  -v $NGINX_DIR/html:/etc/nginx/html \
  -v $NGINX_DIR/logs:/var/log/nginx \
  -v $NGINX_DIR/conf:/etc/nginx \
  -v $NGINX_DIR/cert:/etc/nginx/cert \
  nginx
  1. 指定端口的方式
docker run -d \
  --name=nginx1 \
  --restart=unless-stopped \
  -p 5195:5195 \
  -v $NGINX_DIR/html:/etc/nginx/html \
  -v $NGINX_DIR/logs:/var/log/nginx \
  -v $NGINX_DIR/conf:/etc/nginx \
  -v $NGINX_DIR/cert:/etc/nginx/cert \
  nginx

二、反向代理配置

要达到的效果非常简答,就是把监控到的HTTPS请求转发到另一台主机提供的HTTP服务,并且配置ssl证书。

2.1 上传文件到cert目录

可以通过scp或桌面文件操作等方式,把ssl证书上传到证书目录。

ls -R $NGINX_DIR/cert
/mnt/nvme0n1p1/docker/data/nginx/cert:
69d1128d_zwenkai.com_nginx

/mnt/nvme0n1p1/docker/data/nginx/cert/69d1128d_zwenkai.com_nginx:
zwenkai.com.key  zwenkai.com.pem

2.2 添加反响代理配置

  1. nginx.conf配置文件中最后添加,include sites-enabled/*;
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include sites-enabled/*;
}
  1. 创建sites-enabled文件夹以及反响代理配置文件
mkdir $NGINX_DIR/conf/sites-enabled
cd $NGINX_DIR/conf/sites-enabled
touch server.ReverseProxy.conf
  1. server.ReverseProxy.conf添加配置
server {
    listen 5195 ssl;
    listen [::]:5195 ssl;

    server_name www.zwenkai.com;

    if ( $host !~ "(^www.zwenkai.com$)" ) { return 404; }

    ssl_certificate_key /etc/nginx/cert/69d1128d_zwenkai.com_nginx/zwenkai.com.key;
    ssl_certificate     /etc/nginx/cert/69d1128d_zwenkai.com_nginx/zwenkai.com.pem;

    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;

    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    location / {
        proxy_connect_timeout 60;
        proxy_read_timeout 60;
        proxy_send_timeout 60;
        proxy_intercept_errors off;
        proxy_http_version 1.1;
        proxy_set_header        Host                $http_host;
        proxy_set_header        X-Real-IP           $remote_addr;
        proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto   $scheme;
        proxy_pass http://192.168.2.115:28168;
    }

    error_page 403 404 500 502 503 504 /dsm_error_page;

    location /dsm_error_page {
        internal;
        root /usr/syno/share/nginx;
        rewrite (.*) /error.html break;
        allow all;
    }
}

三、其他说明

当然内网穿透也要穿透到这台设备上,之后网站就可以正常访问了。

原创文章,作者:Kevin,如若转载,请注明出处:https://zwenkai.com/migrate-response-proxy-to-nginx-in-docker/

(0)
KevinKevin
上一篇 2022年11月20日
下一篇 2024年1月14日

相关推荐

  • LskyPro企业版更新

    今天在图床网站的后台看,有新版本了,那就升级下吧。我去,竟然失败了~ 一、升级失败 在LskyPro后台的系统升级点击立即安装,提示「请安装 zip 拓展(ZipArchive)」…

    docker 2024年1月22日
    78300
  • 为docker容器分配ip

    在《打造个人写作系统》中,使用到数据库的地方,手动指定了172.17.0.2,也就是mysql docker的门牌号,一旦mysql搬家,就找不到它了。

    docker 2022年11月20日
    1.2K00
  • 使用docker中ffmpeg压缩视频

    最近找了个视频教程,下载过程中我发现这些视频的体积相当大,短短十分钟的一个小节就将近1G,整体还是非常占磁盘的。那是不是可以对视频进行压缩下呢? 压缩视频很容易想到ffmpeg就可…

    docker 2024年1月14日
    76400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注