docker 部署nginx并配置通过https访问
之前的nginx都是直接在宿主机上部署的,今天使用docker部署尝试下。
1.在dockerHub上搜索对应的版本
dockerHub官网地址:https://hub.docker.com
搜索nginx 查看版本,支持的版本很多,就选个1.20的版本吧
2.拉取nginx:1.20镜像
docker pull nginx:1.20
docker images查看是否拉取下来
3.在宿主机上将配置文件和html文件配置好
我们需要将配置文件nginx.conf
文件、静态html文件、证书文件在宿主机上配置完毕
在usr/local/nginx/
下创建对应的文件(nginx.conf)和文件夹(cert、html)
cert文件夹中的文件
html文件夹中的文件
nginx.conf 配置文件内容
location /backend/ 中是后端代理的地址
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# HTTPS server
#
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /backend/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8991;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4.运行nginx镜像
docker run -d --privileged=true --name nginx1.2 \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/cert:/usr/local/nginx/cert \
--restart always \
-p 443:443 -p 80:80 nginx:1.20
--privileged=true # 容器内被赋予root权限
--name nginx1.2 # 容器名称为nginx1.2
-v /usr/local/nginx/html:/usr/share/nginx/html # 挂载的静态文件目录
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf # 挂载的nginx配置文件目录
-v /usr/local/nginx/cert:/usr/local/nginx/cert # ssl证书挂载目录
--restart always # 自启动
-p 443:443 -p 80:80 # 映射的端口号 由于是https协议 所以443需要映射出来
使用docker ps -a
查看容器运行的状况,运行成功
如果防火墙开着的话,把443、80端口放行
systemctl status firewalld # 查看防火墙状态
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80端口
firewall-cmd --zone=public --add-port=443/tcp --permanent # 开放443端口
systemctl restart firewalld # 重启防火墙
访问https://ip,即可访问