介绍
Docker是一个流行的应用程序容器化平台,可以让开发人员轻松打包、交付和运行应用程序。在这篇文章中,我们将介绍如何使用Docker容器配置Nginx代理服务器并启用SSL。先让我们了解一下Nginx和SSL。
什么是Nginx?
Nginx是一个高性能的Web服务器,它可以作为反向代理、负载均衡器和HTTP缓存。它的速度非常快,并且可以处理大量的并发连接请求。
什么是SSL?
SSL(Secure Sockets Layer)是一种安全传输协议,用于加密Web通信。通过使用SSL,可以保护与服务器之间的数据传输,防止敏感数据被黑客窃取。
步骤一:创建Docker文件
首先,在本地计算机上创建一个新目录,并在该目录中创建一个名为Dockerfile的文件。
接下来,我们需要在文件中定义我们的Docker映像。以下是基本Docker文件的格式:
FROM base_image
RUN install_packages
COPY src dest
CMD command
根据上述格式,我们将编写以下Docker文件,以配置Nginx代理服务器和启用SSL:
# 基于Ubuntu镜像
FROM ubuntu:18.04
# 更新APT软件包索引
RUN apt-get update
# 安装Nginx和SSL
RUN apt-get install -y nginx openssl
# 删除默认Nginx网页
RUN rm /var/www/html/*
# 复制Nginx配置文件
COPY nginx.conf /etc/nginx/nginx.conf
# 复制证书和密钥文件
COPY server.crt /etc/nginx/
COPY server.key /etc/nginx/
# 暴露80和443端口
EXPOSE 80 443
# 运行Nginx
CMD ["nginx", "-g", "daemon off;"]
接下来,我们将在文件夹中创建以下三个文件:
nginx.conf:Nginx配置文件
server.crt:SSL证书文件
server.key:SSL密钥文件
nginx.conf
以下是nginx配置文件,由于我们要对反向代理服务器进行配置,所以需要修改默认的nginx配置文件。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# 这里为了演示方便,我们不使用默认的配置
# use epoll;
# multi_accept on;
}
http {
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;
error_log /var/log/nginx/error.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
location / {
proxy_pass http://webserver:3000/;
proxy_http_version 1.1;
# 修改自定义头
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Nginx-Proxy true;
# websocket 配置,需要 back-end 也对 websocket 做一些配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
}
server.crt和server.key
我们需要生成SSL证书并将其保存在Dockerfile文件中定义的目录中。运行以下命令,生成证书和密钥:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /path/to/server.key -out /path/to/server.crt
这会生成名为server.crt和server.key的两个文件,可以复制并粘贴到Docker目录中。
步骤二:构建并运行Docker镜像
在完成Dockerfile编写和SSL证书生成后,我们需要构建Docker映像并运行它。
要构建映像,请在终端中导航到Dockerfile所在的目录,并执行以下命令:
sudo docker build -t nginx-proxy .
该命令将基于Dockerfile构建名为nginx-proxy的新映像。
接下来,运行以下命令启动Docker容器并将其连接到本地端口80:
sudo docker run -d -p 80:80 nginx-proxy
现在,您可以通过在Web浏览器中输入本地计算机的IP地址来测试Nginx代理服务器是否正在运行:
您应该能够在Web浏览器中输入您本地计算机的IP地址,并看到您对服务器做出的请求。
要测试SSL,请在浏览器中输入https://localhost,并验证浏览器是否显示SSL证书已成功验证。
结论
通过使用Docker容器和Nginx代理服务器,您可以轻松地部署和管理反向代理和负载均衡应用程序。通过启用SSL,可以保护Web应用程序和敏感信息,确保数据传输的安全性。