准备工作:
- Nginx
- Web服务
- SSL证书
- Docker环境(案例使用)
一.Nginx服务
编写nginx.conf文件,用来管理需要代理的服务
worker_processes 1;
events {
worker_connections 1024;
}
http {
sendfile on;
server {
listen 80 default_server;
location / {
proxy_pass http://pandora:8899;
proxy_set_header Host $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;
}
}
server {
listen 443 ssl default_server;
ssl_certificate /etc/nginx/certs/nginx.crt;
ssl_certificate_key /etc/nginx/certs/nginx.key;
location / {
proxy_pass http://pandora:8899;
proxy_set_header Host $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;
}
}
}
部分重要参数介绍:
- pandora:是需要代理Web服务的service名称(参考下方docker-compose.yml)
- ssl_certificate : 签名证书位置(.crt),docker-compose.yml里对该目录进行了映射(挂卷)
- ssl_certificate_key : 签名私钥(.key), docker-compose.yml里对该目录进行了映射(挂卷)
二.Web服务
(pandora)参考docker-compose.yml
三.SSL证书
这里采用自签证书的方式举例.
- 生成私钥(密钥文件):
openssl genpkey -algorithm RSA -out nginx.key
- 生成证书签名请求
openssl req -new -key nginx.key -out nginx.csr
- 使用生成的私钥和 CSR 来生成自签名证书
openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt
记住该系列文件存储位置(案例将文件存储到了/https中)
四.运行测试案例
Docker环境(案例使用)
案例基于dockerCompose方式启动,包含2个service分别是:
- nginx(Nginx)-> 包含Nginx的容器,也是用它来启动https代理。
- pandora (web服务) -> 用来案例测试的web容器,宿主机与容器的映射端口为0.0.0.0:8899 -> 0.0.0.0:8899
创建 docker-compose.yml,将以下内容替换Volumes其中SSL文件目录,如
volumes:
- ${宿主机nginx.conf目录}:/etc/nginx/nginx.conf
- ${宿主机nginx.crt目录}:/etc/nginx/certs/nginx.crt
- ${宿主机nginx.key目录}:/etc/nginx/certs/nginx.key
version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
- "443:443"
volumes:
- /https/nginx.conf:/etc/nginx/nginx.conf ##配置Nginx的文件(需要替代)
- /https/nginx.crt:/etc/nginx/certs/nginx.crt ##配置https所需证书文件(需要替代)
- /https/nginx.key:/etc/nginx/certs/nginx.key ##配置https所需证书文件(需要替代)
networks:
- pandora_network
depends_on:
- pandora
pandora:
image: pengzhile/pandora
environment:
- PANDORA_CLOUD=cloud
- PANDORA_SERVER=0.0.0.0:8899
ports:
- "8899:8899"
networks:
- pandora_network
networks:
pandora_network:
启动命令
docker compose up -d
测试是否成功配置
docker ps来查看是否存在nginx,如果存在则大概率已经启动成功
启动成功后使用https://ip/访问出现以下画面说明自签名Https配置成功,点击继续访问就成功跳到了web服务页面。
访问路径如下:
https:/ip/ -> nginx: 443 -> web:8899
http://ip/ -> nginx:80 -> web:8899
如何解除安全警告
如果想解除安全警告限制,可以找相应机构来颁发证书,如(阿里,腾讯…),
不考虑国内机构可以参考https://letsencrypt.org/