全面部署、管理和自动更新NGINX并应用于实际场景
1. 使用Ansible自动更新NGINX
为了实现系统的自动安全更新,我们可以安装
unattended-upgrades
包。具体操作步骤如下:
1. 编辑文件
roles/nginx_install/tasks/main.yml
,添加以下内容:
- name: Install unattended-upgrades
apt:
name: unattended-upgrades
state: present
- 重新运行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
-
将别名
alias acme.sh=~/.acme.sh/acme.sh添加到/root/.bashrc文件中。 -
关闭并重新打开终端(或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
- 创建新的SQL数据库:
mysql> CREATE DATABASE wordpress;
- 创建SQL用户并授予权限:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password';
- 退出并使用新账户登录:
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
- 创建一个新的数据库和用户:
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
- 解压文件:
unzip nextcloud-24.0.0.zip -d /var/www/
- 设置文件权限:
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服务环境。无论是个人博客还是企业级云存储,都可以通过这些技术实现稳定的运行。在实际应用中,我们可以根据具体需求对配置进行调整和优化,以达到最佳的性能和安全性。
超级会员免费看

被折叠的 条评论
为什么被折叠?



