17、全面部署、管理和自动更新NGINX并应用于实际场景

全面部署、管理和自动更新NGINX并应用于实际场景

1. 使用Ansible自动更新NGINX

为了实现系统的自动安全更新,我们可以安装 unattended-upgrades 包。具体操作步骤如下:
1. 编辑文件 roles/nginx_install/tasks/main.yml ,添加以下内容:

- name: Install unattended-upgrades
  apt:
    name: unattended-upgrades
    state: present
  1. 重新运行Playbook来安装该包:
root@ansible:~/nginx_install# ansible-playbook -i inventory.ini nginx_install.yml

安装完成后,系统就配置好了自动安全更新。对于希望进行全面更新的用户,可以参考该包的文档来微调设置。

2. 案例研究:实际应用场景

接下来,我们将通过一系列实际场景来应用所学知识,包括使用HTTPS确保通信安全、搭建WordPress网站和部署Nextcloud实例。

2.1 探索SSL证书和默认HTTPS

在数字安全至关重要的今天,SSL加密已成为新标准。我们可以使用 acme.sh 工具来生成通配符证书,具体步骤如下:
1. 安装acme.sh

root@nginx:~# curl https://get.acme.sh | sh
  1. 将别名 alias acme.sh=~/.acme.sh/acme.sh 添加到 /root/.bashrc 文件中。
  2. 关闭并重新打开终端(或SSH会话),然后验证 acme.sh 是否安装成功:
root@nginx:~# acme.sh --version

生成通配符证书的好处有:
- 简化操作:无需为不同子域名调整NGINX配置。
- 增强安全:防止扫描器获取证书信息。

使用DNS API生成通配符证书的流程如下:

graph LR
    A[创建临时子域名] --> B[证书颁发机构验证]
    B --> C[颁发证书]
    C --> D[每90天自动更新]

以Cloudflare API为例,获取API密钥的步骤如下:
1. 进入个人资料页面。
2. 选择查看全局API密钥。

假设API密钥为 abcd1234 ,将其和Cloudflare账户的邮箱地址存储在 /root/.acme.sh/account.conf 文件中:

SAVED_CF_Key='abcd1234'
SAVED_CF_Email=my-cloudflare-account@personal.email

然后使用以下命令颁发签名证书:

root@nginx:~# acme.sh --issue --dns dns_cf -d example.com -d *.example.com

为了避免配置重复,我们可以创建一个集中的NGINX SSL配置文件 ssl.conf ,存储在 /etc/nginx/ 目录下:

ssl_certificate /root/.acme.sh/example.com/fullchain.cer;
ssl_certificate_key /root/.acme.sh/example.com/example.com.key;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;
2.2 实现基于SSL的HTTP/2

HTTP/2是HTTP协议的重大演进,具有多路复用、头部压缩和服务器推送等特性,能显著提升网页性能。在服务器块中启用HTTP/2的配置如下:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ...
}

需要注意的是,启用HTTP/2时要确保使用安全连接,并且现代浏览器对其支持良好。虽然HTTP/3有很大的发展潜力,但目前还不适合广泛用于生产环境。

2.3 部署WordPress网站

WordPress是目前最流行的内容管理系统,市场份额达42%。部署WordPress网站的步骤如下:

系统要求
- 运行至少PHP 8.1和MySQL Server 8。
- Debian系统安装命令:

# apt install mysql-server php8.1-fpm php8.1-mysql php8.1-gd php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip
  • Red Hat系统安装命令:
# dnf install mysql-server php8.1-fpm php8.1-mysqlnd php8.1-gd php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip

PHP配置
- 编辑 php.ini 文件:
- cgi.fix_pathinfo 设置为0。
- 根据需要增加 post_max_size upload_max_filesize
- 设置 date.timezone
- 创建PHP-FPM配置池:

[wordpress]
user=wordpress
group=wordpress
listen=127.0.0.1:9000
allowed_clients=127.0.0.1
chroot /home/wordpress/www;

MySQL配置
1. 登录MySQL服务器:

# mysql -u root -p
  1. 创建新的SQL数据库:
mysql> CREATE DATABASE wordpress;
  1. 创建SQL用户并授予权限:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password';
  1. 退出并使用新账户登录:
mysql> exit
# mysql -u wordpress -p
mysql> SHOW DATABASES;

下载和提取WordPress

/home/wordpress/www# wget https://wordpress.org/latest.tar.gz
/home/wordpress/www# tar xzf latest.tar.gz
/home/wordpress/www# mv ./wordpress/* ./ && rm -r ./wordpress
/home/wordpress/www# chown -R wordpress ./
/home/wordpress/www# chgrp -R wordpress ./
/home/wordpress/www# chmod -R 0644 ./

NGINX配置
- HTTP块 :编辑 nginx.conf 文件:

user wordpress wordpress;
worker_processes 8;
pid /var/run/nginx.pid;
events {
    worker_connections 768;
}
http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    gzip on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    include /etc/nginx/sites-enabled/*;
}
  • 服务器块 :在 /etc/nginx/sites-available/ 目录下创建 wordpress.conf 文件:
server {
    listen [::]:80 default_server;
    listen 80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    include ssl.conf;
    server_name .example.com;
    root /home/wordpress/www;
    index index.php;
    client_body_in_file_only clean;
    client_body_buffer_size 32K;
    client_max_body_size 300M;
    send_timeout 10s;
    ...
}

创建符号链接:

ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/
  • 位置块
location ~* ^.+.(jpg|jpeg|png|gif|ico|css|js)$ {
    access_log off;
    expires max;
}
location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ .php$ {
    if (!-e $request_filename) {
        return 404;
    }
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
}

完成NGINX配置后,重新加载配置:

systemctl reload nginx

访问 https://example.com/wp-admin/install.php 运行WordPress安装程序,需要输入以下信息:
- 数据库名称: wordpress
- SQL用户名: wordpress
- 用户密码: password
- 数据库主机: 127.0.0.1
- 表前缀: wp_

安装完成后,可以在设置 | 永久链接中启用漂亮URL。

全面部署、管理和自动更新NGINX并应用于实际场景

3. 部署Nextcloud实例

Nextcloud是一个强大的个人云服务,以下是部署Nextcloud实例的步骤:

系统要求
| 软件 | 版本要求 |
| ---- | ---- |
| PHP | 至少8.1 |
| MySQL或MariaDB | 支持的版本 |
| Web服务器 | NGINX |

安装依赖
在Debian或Ubuntu系统上,使用以下命令安装必要的软件包:

apt install mariadb-server php8.1-fpm php8.1-mysql php8.1-gd php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip

在Red Hat或CentOS系统上:

dnf install mariadb-server php8.1-fpm php8.1-mysqlnd php8.1-gd php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip

数据库配置
1. 登录到MariaDB:

mysql -u root -p
  1. 创建一个新的数据库和用户:
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

下载和安装Nextcloud
1. 下载Nextcloud:

wget https://download.nextcloud.com/server/releases/nextcloud-24.0.0.zip
  1. 解压文件:
unzip nextcloud-24.0.0.zip -d /var/www/
  1. 设置文件权限:
chown -R www-data:www-data /var/www/nextcloud

NGINX配置
/etc/nginx/sites-available/ 目录下创建一个新的配置文件 nextcloud.conf

server {
    listen 80;
    server_name nextcloud.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.example.com;

    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    root /var/www/nextcloud;
    index index.php index.html /index.php$request_uri;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ^~ /.well-known {
        location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; }
        location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; }
        location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation { try_files $uri $uri/ =404; }
    }

    location / {
        rewrite ^ /index.php$request_uri;
    }

    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
        deny all;
    }
    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|core\/previewgenerator\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+\.php)(\/.*)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        include fastcgi_params;
    }

    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
    }

    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        expires 6M;
        access_log off;
    }

    location ~ \.(?:php|html|svg)$ {
        try_files $uri =404;
    }
}

创建符号链接:

ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/

重新加载NGINX配置:

systemctl reload nginx

Nextcloud安装向导
打开浏览器,访问 https://nextcloud.example.com ,按照安装向导的提示完成安装,输入数据库信息和管理员账户信息。

4. 总结

通过以上步骤,我们完成了使用Ansible自动更新NGINX,以及在实际场景中部署WordPress和Nextcloud的过程。整个流程可以用以下mermaid流程图表示:

graph LR
    A[自动更新NGINX] --> B[案例研究]
    B --> C[SSL证书和HTTPS]
    B --> D[HTTP/2实现]
    B --> E[部署WordPress]
    B --> F[部署Nextcloud]
    C --> C1[安装acme.sh]
    C --> C2[生成证书]
    C --> C3[集中配置]
    E --> E1[系统要求]
    E --> E2[PHP配置]
    E --> E3[MySQL配置]
    E --> E4[下载提取]
    E --> E5[NGINX配置]
    F --> F1[系统要求]
    F --> F2[安装依赖]
    F --> F3[数据库配置]
    F --> F4[下载安装]
    F --> F5[NGINX配置]
    F --> F6[安装向导]

这些步骤涵盖了从基础的系统配置到具体应用部署的各个方面,帮助我们建立一个安全、高效的Web服务环境。无论是个人博客还是企业级云存储,都可以通过这些技术实现稳定的运行。在实际应用中,我们可以根据具体需求对配置进行调整和优化,以达到最佳的性能和安全性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值