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 返回信息不会再显示具体版本号。

参考文献