Skip to content

快速部署nginx

简介

  • nginx是一款轻量级http服务器,同时具备反向代理,可以提供tcp/udp代理的功能
  • nginx可运行在x86、ARM等多种不同CPU架构上,同时支持Linux,Windows等主流操作系统

下文展示如何快速在linux系统上部署一个支持https协议的nginx服务器

创建应用目录

以root身份登录或者sudo为root用户,创建应用目录,后续步骤会挂载到容器上

sh
export APP_NAME=webapp

# 创建应用根目录
mkdir /opt/$APP_NAME
# 创建应用配置目录
mkdir /opt/$APP_NAME/conf
# 创建应用SSL证书目录
mkdir /opt/$APP_NAME/cert
# 创建应用html代码目录
mkdir /opt/$APP_NAME/html
# 创建应用日志目录
mkdir /opt/$APP_NAME/log

初始化nginx配置

初始化一个基础容器,从容器中拷贝默认配置

nginx最好指定版本,避免使用latest,避免后续出现配置兼容问题

sh
docker run --name $APP_NAME -d nginx:1.27.1
docker cp $APP_NAME:/etc/nginx/nginx.conf /opt/$APP_NAME/conf
docker cp $APP_NAME:/etc/nginx/conf.d /opt/$APP_NAME/conf

生成自签名SSL证书

注意

使用自签名证书部署的网站在用浏览器访问的时候会有安全警告

sh
cd /opt/$APP_NAME/cert
openssl genrsa -out $APP_NAME.key 2048
openssl req -new -key $APP_NAME.key -out $APP_NAME.csr
openssl x509 -req -in $APP_NAME.csr -signkey $APP_NAME.key -out $APP_NAME.crt

配置https协议

sh
cat << EOF >> /opt/$APP_NAME/conf/conf.d/default.conf
server {
    listen       443 ssl;

    ssl_certificate /etc/nginx/cert/$APP_NAME.crt;
    ssl_certificate_key /etc/nginx/cert/$APP_NAME.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   /opt/$APP_NAME/html;
        index  index.html index.htm;
    }
}
EOF

创建应用html代码目录

将网站html代码拷贝到/opt/$APP_NAME/web目录下,如果没有合适的,也可以拷贝默认nginx页面

sh
docker cp $APP_NAME:/usr/share/nginx/html /opt/$APP_NAME

部署nginx

sh
# 删除基础容器
docker rm -f $APP_NAME
# 重建容器并挂载到本地目录
docker run --name $APP_NAME \
-p 80:80 \
-p 443:443 \
-v /opt/$APP_NAME/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /opt/$APP_NAME/conf/conf.d:/etc/nginx/conf.d \
-v /opt/$APP_NAME/cert:/etc/nginx/cert \
-v /opt/$APP_NAME/html:/opt/$APP_NAME/html \
-v /opt/$APP_NAME/log:/var/log/nginx \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--restart=always \
-d nginx:1.27.1