如何使用Docker容器配置Nginx代理服务器并启用SSL?

介绍

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应用程序和敏感信息,确保数据传输的安全性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签