Loading... ## 配置nginx反向代理 首先,比方说,2个容器,一个开了80,一个开了8080,这里需要去查找各自在docker内部网络的ip和端口,`iptables -v -n -L`,即可从nginx的80端口代理到另一个服务的8080端口,当然也可以用服务器自己的ip端口,即这里`-p 8089:8080`。 ```sh server { listen 80; server_name zjgcjy.top;# 域名地址 location / { proxy_pass http://172.18.0.3:8080; #proxy_pass http://xx.x.xx.x:8089; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 404 /404.html; } ``` 注意这时候只能代理到一个http端口,如果代理到https端口,会显示`Client sent an HTTP request to an HTTPS server.`。 ### 配置nginx的HTTPS反向代理 比如这里我只开一个443端口,将该端口的流量发送到同一个docker网口下,另一台容器的8080端口,方式是https,即可实现反向代理。 ```sh server { #listen 80; listen 443 ssl;#这个是https访问的端口 server_name zjgcjy.top;#域名地址 #增加ssl ssl on; #如果强制HTTPs访问,这行要打开 ssl_certificate /etc/nginx/cert/cert.crt;#你的xxxx.pem文件名称 ssl_certificate_key /etc/nginx/cert/cert.key;#你的xxxx.key文件名称 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1.2;# 指定密码为openssl支持的格式 ssl_ciphers HIGH:!aNULL:!MD5; # 密码加密方式 ssl_prefer_server_ciphers on; #依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码 location / { proxy_pass http://172.18.0.3:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 404 /404.html; } ``` 这时候访问443即会访问8080,但是必须要是https的流量。 ```sh docker run -d \ --name nginx \ -p 5000:447 \ --restart=always \ -v /home/ubuntu/docker/nginx:/etc/nginx \ nginx ``` 因为这样会开放2个端口,所以我选择另一个容器不映射端口,从nginx映射进去,因为docker那个网卡各个容器之间是通的,这样只需要1个端口就行了。 ### 强制http转https 网上说可以用这个,但我试了怎么不行啊。 ```sh if ($scheme != "https") { return 301 https://$host$request_uri; } ``` https://blog.spencerwoo.com/2019/11/reverse-proxy/ ## caddy Caddy服务器(或者Caddy Web)是一个开源的使用 GoLang 编写,支持 HTTP/2 的 Web 服务端。它使用 GoLang 标准库提供 HTTP 功能, Caddy 一个显著的特性是默认启用 HTTPS,它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。 Caddy和我们常用的Nginx、Apache等Web服务器相比,最大的特点就是部署简单,它拥有基本的apache或者nginx有的web server模块,同时还有一些很有特色的功能,比如: HTTP/2、Automatic HTTPS、Multi-core、Websockets、Markdown、IPv6等等。 这里我依然选择caddy的docker镜像。 ```sh docker run -d \ --name caddy \ -p 443:443 \ -v /home/ubuntu/docker/webhook/site:/usr/share/caddy/ \ -v /home/ubuntu/docker/caddy/Caddyfile:/etc/caddy/Caddyfile \ -v /home/ubuntu/docker/caddy/data:/data \ -v /home/ubuntu/docker/caddy/config:/config \ --restart=always \ caddy ``` ### 服务器状态监控 基于uptimerobot的api, https://uptimerobot.com/dashboard.php#mySettings https://github.com/yb/uptime-status ```sh docker run -d \ --name state \ -p 777:443 \ -v /home/ubuntu/docker/status:/usr/share/caddy/ \ -v /home/ubuntu/docker/caddy/Caddyfile:/etc/caddy/Caddyfile \ -v /home/ubuntu/docker/caddy/data:/data \ -v /home/ubuntu/docker/caddy/config:/config \ --restart=always \ caddy ``` 其中CaddyFile的文件配置,因为Caddy v2版本更新较大,需要查看文档https://caddyserver.com/docs/v2-upgrade。和v1不同之处以v2为准。 ## Traefik traefik是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具,它支持多种后台来自动化、动态的应用它的配置文件设置。 - 域名 api.domain.com 将指向你的私有网络中的微服务 api - 路径 domain.com/web 将指向你的私有网络中的微服务 web 但一个微服务的结构时动态的。。。 服务在会经常被添加、移除、杀死或更新,可能一天之内就会发生许多次。传统的反向代理原生不支持动态配置。你不可能轻易的通过热更新更改它们的配置。 在这里,我只讨论web服务的情况。现在我有多个docker容器,如何通过traefik进行反向代理,自动TLS,链接到若干容器中。 在traefik中,定义了很多名词。 - 入口点,请求在入口点进来,是Træfɪk的网络入口,可以进行端口监听,重定向,强制HTTPS等 - 之后流量会导向一个匹配的前端,前端是定义入口点到后端之间的路由。通过请求字段,比如主机名、路径等来定义,它可以匹配或否定一个请求。 - 前端将会把请求发送到后端。后端可以由一台或一个负载均衡策略配置后的多台服务器组成。 - 最后,服务器将转发请求到对应私有网络的微服务当中去。 https://segmentfault.com/a/1190000018098324 https://my.oschina.net/guol/blog/2209678 https://docs.traefik.cn/basics#entrypoints ``` ``` Last modification:January 16th, 2021 at 01:01 pm © 允许规范转载 Support 确定不打赏一下支持博主吗 ×Close Appreciate the author Sweeping payments Pay by AliPay