Debian 12 安装配置 nginx
安装 nginx
更新 APT 软件包索引:
sudo apt update
安装 nginx:
sudo apt install -y nginx
查看安装的 nginx 版本:
nginx -v
nginx version: nginx/1.22.1
安装完成后,nginx 会自动运行,并且在系统启动时自动运行。
查看 vsftpd
服务运行状态:
sudo systemctl status nginx
防火墙配置
ufw
防火墙添加对应的端口号:
sudo ufw allow 80/tcp
重新加载防火墙规则:
sudo ufw reload
查看防火墙状态:
sudo ufw status verbose
VPS 如果自带了网络防火墙服务,还需要添加对应的防火墙端口配置。
访问测试
在浏览器中使用服务器 IP 地址访问,看到 nginx 的欢迎页面即说明安装成功。
禁止使用 IP 访问
生成无效 SSL 证书
创建用于保证书的目录:
sudo mkdir -p /etc/ssl/fake
生成无效的 RSA 私钥:
sudo openssl genrsa -out /etc/ssl/fake/key.pem 2048
生成无效的自签名证书:
sudo openssl req -new \
-x509 \
-days 36500 \
-key /etc/ssl/fake/key.pem \
-out /etc/ssl/fake/cert.pem \
-subj "/C=XX/ST=Invalid/L=Invalid/O=Invalid/CN=Invalid"
新建默认配置
nginx 安装后,会自带一个 default
配置文件在 /etc/nginx/sites-available/
目录下,并建立了一个符号链接到 /etc/nginx/sites-enabled/
目录(该目录下的所有配置文件会被 nginx 自动引用)下。
删除 /etc/nginx/sites-enabled/
目录下 default
配置文件的符号链接:
sudo rm /etc/nginx/sites-enabled/default
在 /etc/nginx/sites-available/
目录下新建 default.conf
配置文件:
sudo vim /etc/nginx/sites-available/default.conf
插入配置:
# default
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/ssl/fake/cert.pem;
ssl_certificate_key /etc/ssl/fake/key.pem;
return 444;
}
建立符号链接到 /etc/nginx/sites-enabled/
目录下:
sudo ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf
重启 nginx 服务
验证 nginx 配置是否正确:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 nginx 服务:
sudo systemctl restart nginx
访问测试
此时使用 IP 访问会直接提示不安全(或者报错)。
配置 AppArmor
创建配置文件
创建 nginx 对应的 AppArmor 配置文件:
sudo vim /etc/apparmor.d/usr.sbin.nginx
插入配置:
#include <tunables/global>
/usr/sbin/nginx {
#include <abstractions/base>
#include <abstractions/apache2-common>
#include <abstractions/nis>
#include <abstractions/openssl>
#include <abstractions/web-data>
capability dac_override,
capability dac_read_search,
capability setgid,
capability setuid,
# binary file
/usr/sbin/nginx mr,
# runtime
/run/nginx.pid rw,
# configuration files
/etc/nginx/** r,
# logs
/var/log/nginx/** rw,
# cache
/var/lib/nginx/body/** rw,
/var/lib/nginx/proxy/** rw,
# SSL
/etc/ssl/fake/* r,
# sites
/usr/share/nginx/** r,
}
加载配置文件
加载 AppArmor 配置文件:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
重启 nginx
服务:
sudo systemctl restart nginx
调试与日志
检查状态:
sudo aa-status | grep nginx
查看 vsftpd
的拒绝日志:
sudo journalctl -xe | grep "apparmor.*DENIED.*nginx"
进入抱怨模式(Complain Mode)临时调试:
sudo aa-complain /usr/sbin/nginx
管理 nginx
服务管理
查看 vsftpd
服务状态:
sudo systemctl status nginx
启动 vsftpd
服务:
sudo systemctl start nginx
停止 vsftpd
服务:
sudo systemctl stop nginx
重启 vsftpd
服务:
sudo systemctl restart nginx
设置 vsftpd
服务开机启动:
sudo systemctl enable nginx
取消 vsftpd
服务开机启动:
sudo systemctl disable nginx
隐藏 nginx 版本号
修改 nginx 主配置文件:
sudo vim /etc/nginx/nginx.conf
找到:
http {
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
在 http
域里面插入配置:
http {
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
# hide nginx version
server_tokens off;
}
验证 nginx 配置是否正确:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 nginx 服务:
sudo systemctl restart nginx
此时 nginx 返回信息不会再显示具体版本号。