当前位置:网站首页 >  攻略

运维岗位实战:Linux下快速搭建Nginx高可用服务指南

时间:2026年06月15日 21:13:00 来源:易频IT社区

环境准备与Docker安装

在开始部署之前,我们需要确保服务器环境干净且依赖项完整。本指南以CentOS 7/8或Alibaba Cloud Linux为例,使用Docker容器化部署Nginx,这种方式便于后续迁移和扩展。执行以下命令卸载旧版本的Docker并安装最新版:

1. 卸载旧版本Docker(如有):

```bash sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest-logrotate \ docker-logrotate \ docker-engine ```

2. 安装依赖工具包:

```bash sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ```

3. 添加Docker官方仓库(使用阿里云镜像源加速):

```bash sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ```

4. 安装Docker Engine:

```bash sudo yum install -y docker-ce docker-ce-cli containerd.io ```

5. 启动Docker并设置开机自启:

```bash sudo systemctl start docker sudo systemctl enable docker ```

安装完成后,输入docker version查看版本信息,确认安装成功。接下来,我们需要安装Docker Compose工具,以便通过YAML文件管理服务:

```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ```

目录结构规划

为了保证配置文件的持久化和易管理性,我们不能将数据直接存储在容器内部。请在服务器根目录下创建标准的项目目录结构。执行以下命令一次性创建所有必要的文件夹:

```bash mkdir -p /data/nginx/{conf,html,logs,ssl} ```

这里解释一下各目录的用途:conf目录用于存放nginx.conf配置文件;html目录存放网页静态资源;logs目录挂载容器内的日志文件,防止日志随容器销毁丢失;ssl目录用于存放HTTPS证书文件。

创建一个简单的测试首页,以便后续验证服务是否正常:

```bash echo "Nginx Deployment Success" > /data/nginx/html/index.html ```

Nginx核心配置文件编写

这是运维工作中最核心的环节。我们需要编写一个完整、优化的nginx.conf文件。使用vim编辑器创建配置文件:

```bash vim /data/nginx/conf/nginx.conf ```

将以下完整的配置内容直接复制粘贴进去。该配置包含了Gzip压缩、反向代理设置、日志格式定义以及基本的性能优化参数:

```nginx user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; 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; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } } ```

保存并退出编辑器(:wq)。此配置文件已经处理了静态资源服务和基础的日志记录,能够满足大部分Web服务的初始需求。

SSL证书配置与HTTPS启用

在现代运维中,HTTPS是标配。为了演示完整流程,我们将生成一份自签名证书用于测试。在生产环境中,请将申请好的域名证书(.crt和.key文件)上传至/data/nginx/ssl目录。

1. 生成自签名证书:

```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /data/nginx/ssl/nginx.key \ -out /data/nginx/ssl/nginx.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=DevOps/OU=IT/CN=localhost" ```

2. 修改Nginx配置以支持HTTPS:

再次编辑/data/nginx/conf/nginx.conf,在http {}块内的server {}块下方添加一个新的443端口监听配置:

```nginx server { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.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; index index.html index.htm; } } ```

注意:证书路径在容器内映射为/etc/nginx/ssl/,这将在接下来的Docker Compose配置中通过挂载实现。

Docker Compose服务编排

运维岗位实战:Linux下快速搭建Nginx高可用服务指南

使用Docker Compose可以避免输入冗长的docker run命令。创建编排文件:

```bash vim /data/nginx/docker-compose.yml ```

输入以下内容,定义Nginx服务、端口映射、卷挂载以及重启策略:

```yaml version: '3.8' services: nginx-web: image: nginx:latest container_name: nginx_server restart: always ports: - "80:80" - "443:443" volumes: - /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro - /data/nginx/html:/usr/share/nginx/html:ro - /data/nginx/logs:/var/log/nginx - /data/nginx/ssl:/etc/nginx/ssl:ro networks: - web-net networks: web-net: driver: bridge ```

配置详解:restart: always确保服务器重启或Docker守护进程崩溃后容器自动重启;volumes项将宿主机目录映射进容器,其中配置文件和证书使用了:ro(只读)挂载,提升安全性;日志目录使用读写挂载。

防火墙与SELinux配置

服务启动后,如果无法访问,通常是防火墙拦截或SELinux权限限制。我们需要提前处理这两个常见坑点。

1. 配置防火墙开放端口:

```bash sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload ```

如果使用的是云服务器(如阿里云、腾讯云),请务必去控制台安全组规则中放行80和443端口,否则外网依然无法访问。

2. 临时关闭SELinux(用于快速排错):

```bash sudo setenforce 0 ```

如果需要永久关闭,可以编辑/etc/selinux/config文件将SELINUX=enforcing改为SELINUX=disabled。在生产环境中,建议配置SELinux策略而非直接关闭,但为了本指南的零门槛落地,我们采用临时关闭策略。

服务启动与验证

所有准备工作就绪,现在启动服务。进入项目目录并执行启动命令:

```bash cd /data/nginx docker-compose up -d ```

参数-d表示在后台运行。查看容器运行状态:

```bash docker-compose ps ```

如果状态显示为Up,说明启动成功。接下来进行功能验证。

1. 验证HTTP服务:

```bash curl -I http://localhost ```

预期返回HTTP/1.1 200 OK

2. 验证HTTPS服务:

```bash curl -k -I https://localhost ```

由于是自签名证书,需要加-k参数忽略证书校验,预期同样返回200 OK。

3. 查看实时日志:

此时访问http://服务器IP,应该能看到之前创建的"Success"页面。查看服务器日志确认请求记录:

```bash tail -f /data/nginx/logs/access.log ```

如果需要重启服务或应用新的配置,只需在宿主机修改配置文件后执行:

```bash docker-compose restart ```

至此,一套基于Docker的Nginx高可用Web服务已完全部署完毕,具备了HTTP/HTTPS访问能力、日志持久化存储以及开机自启功能。

标签 运维岗位

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图