CentOS安装Nginx完整指南(含步骤详解)

CentOS 安装 Nginx 完整指南(含步骤详解)

Nginx (engine x) 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3 代理服务。Nginx 以其稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名。本文将详细介绍在 CentOS 系统上安装和配置 Nginx 的完整过程,包括安装前的准备、多种安装方式、基本配置、安全性加固以及常见问题排查。

一、安装前准备

在开始安装 Nginx 之前,需要确保你的 CentOS 系统满足以下条件:

  1. CentOS 版本: 本文以 CentOS 7 和 CentOS 8 为例,但大部分步骤也适用于其他 CentOS 版本。
  2. 服务器访问: 确保你可以通过 SSH 连接到你的 CentOS 服务器。
  3. root 权限: 你需要拥有 root 用户权限或者具有 sudo 权限的用户。
  4. 网络连接: 服务器需要能够访问互联网,以便下载 Nginx 软件包和依赖项。
  5. 关闭 SELinux(可选): SELinux(Security-Enhanced Linux)是 CentOS 的一个安全增强模块。在某些情况下,SELinux 可能会阻止 Nginx 的正常运行。为了简化安装过程,你可以选择临时禁用 SELinux(不推荐在生产环境中禁用):
    bash
    sudo setenforce 0

    如果你想永久禁用 SELinux,需要编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启服务器。
  6. 防火墙配置(可选): 如果你的服务器启用了防火墙(如 firewalld),你需要允许 HTTP (80) 和 HTTPS (443) 端口的流量通过。
    对于CentOS 7
    bash
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload

    对于CentOS 8
    bash
    sudo firewall-cmd --permanent --add-port=80/tcp
    sudo firewall-cmd --permanent --add-port=443/tcp
    sudo firewall-cmd --reload

二、安装 Nginx

在 CentOS 上安装 Nginx 有多种方式,包括:

  1. 使用 EPEL 仓库(推荐)
  2. 从 Nginx 官方仓库安装
  3. 从源码编译安装

下面分别介绍这三种安装方式:

1. 使用 EPEL 仓库安装(推荐)

EPEL (Extra Packages for Enterprise Linux) 是一个由 Fedora 社区维护的软件包仓库,提供了许多额外的软件包,包括 Nginx。使用 EPEL 仓库安装 Nginx 是最简单、最推荐的方式。

步骤:

  1. 安装 EPEL 仓库:
    bash
    sudo yum install epel-release -y

  2. 安装 Nginx:
    bash
    sudo yum install nginx -y

  3. 启动 Nginx:
    bash
    sudo systemctl start nginx

  4. 设置 Nginx 开机自启:
    bash
    sudo systemctl enable nginx

  5. 验证 Nginx 安装:
    bash
    systemctl status nginx

    如果 Nginx 正在运行,你会看到类似 "active (running)" 的输出。

    你也可以在浏览器中访问服务器的 IP 地址或域名,如果看到 Nginx 的欢迎页面,则表示安装成功。

2. 从 Nginx 官方仓库安装

Nginx 官方也提供了自己的软件包仓库,可以从中安装最新版本的 Nginx。

步骤:

  1. 创建 Nginx 仓库文件:

    创建一个名为 /etc/yum.repos.d/nginx.repo 的文件,并将以下内容复制到文件中(根据你的 CentOS 版本选择对应的内容):

    CentOS 7:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1

    CentOS 8:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=0
    enabled=1

  2. 安装 Nginx:
    bash
    sudo yum install nginx -y

  3. 启动 Nginx 并设置开机自启:
    bash
    sudo systemctl start nginx
    sudo systemctl enable nginx

  4. 验证安装: 与使用 EPEL 仓库安装的验证方法相同。

3. 从源码编译安装

从源码编译安装 Nginx 可以让你自定义编译选项,安装最新版本的 Nginx,但过程相对复杂。

步骤:

  1. 安装编译所需的工具和依赖项:
    bash
    sudo yum groupinstall "Development Tools" -y
    sudo yum install pcre-devel openssl-devel zlib-devel -y

  2. 下载 Nginx 源码包:
    访问 Nginx 官网下载页面 (http://nginx.org/en/download.html),找到最新稳定版的源码包链接,然后使用 wget 命令下载:
    bash
    wget http://nginx.org/download/nginx-1.24.0.tar.gz # 替换为最新版本链接

  3. 解压源码包:
    bash
    tar -zxvf nginx-1.24.0.tar.gz # 替换为实际的文件名

  4. 进入解压后的目录:
    bash
    cd nginx-1.24.0 # 替换为实际的目录名

  5. 配置编译选项:
    bash
    ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module

    这里是一些常用的编译选项:

    • --prefix: Nginx 安装目录
    • --conf-path: Nginx 配置文件路径
    • --sbin-path: Nginx 可执行文件路径
    • --pid-path: Nginx 进程 ID 文件路径
      *--with-http_ssl_module: 启用 HTTPS 支持
    • --with-http_v2_module: 启用 HTTP/2 支持
    • --with-http_realip_module: 获取客户端真实 IP 地址
    • --with-http_stub_status_module: 启用 Nginx 状态监控模块

    你可以根据自己的需求添加或删除编译选项。

  6. 编译和安装:
    bash
    make
    sudo make install

  7. 创建nginx.service文件
    /usr/lib/systemd/system/文件夹下创建nginx.service文件:
    bash
    sudo vi /usr/lib/systemd/system/nginx.service

    添加如下内容
    ```
    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target

    [Service]
    Type=forking
    PIDFile=/var/run/nginx.pid
    ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
    ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID

    [Install]
    WantedBy=multi-user.target

```

  1. 启动 Nginx 并设置开机自启:
    bash
    sudo systemctl start nginx
    sudo systemctl enable nginx

  2. 验证安装: 与使用 EPEL 仓库安装的验证方法相同。

三、Nginx 基本配置

安装完成后,你需要对 Nginx 进行基本配置才能使其正常工作。Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf

  1. 备份配置文件: 在修改配置文件之前,建议先备份一份:
    bash
    sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

  2. 编辑配置文件: 使用你喜欢的文本编辑器打开配置文件:
    bash
    sudo vi /etc/nginx/nginx.conf

  3. 主要配置项:

    Nginx 配置文件使用一种简洁的语法,主要由指令和块组成。以下是一些重要的配置项:

    • user 指定 Nginx 工作进程的用户和组。通常设置为 nginx
    • worker_processes 指定 Nginx 工作进程的数量。通常设置为 CPU 核心数或 auto
    • error_log 指定错误日志文件的路径和日志级别。
    • pid 指定 Nginx 进程 ID 文件的路径。
    • events 块: 配置 Nginx 的事件处理模型。
      • worker_connections:指定每个工作进程的最大连接数。
    • http 块: 配置 HTTP 服务器。
      • include:包含其他配置文件。
      • default_type:设置默认的 MIME 类型。
      • sendfile:启用 sendfile() 系统调用,提高文件传输效率。
      • keepalive_timeout:设置 keep-alive 连接的超时时间。
      • server 块:定义一个虚拟主机。
        • listen:指定监听的端口。
        • server_name:指定服务器的域名或 IP 地址。
        • root:指定网站的根目录。
        • index:指定默认的索引文件。
        • location 块:定义 URL 匹配规则和处理方式。
          • proxy_pass:将请求转发到后端服务器。
          • try_files:尝试按顺序查找文件。
  4. 配置示例:

下面是一个简单的 Nginx 配置示例,用于托管一个静态网站:

```nginx
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

sendfile on;
keepalive_timeout 65;

server {
    listen 80;
    server_name example.com www.example.com; # 替换为你的域名
    root /var/www/html; # 替换为你的网站根目录
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

}
5. **创建网站根目录(如果尚不存在):**
sudo mkdir -p /var/www/html
在该文件夹下创建index.html文件,用于测试html




Welcome to Nginx!

Welcome to Nginx on CentOS!

If you see this page, the Nginx web server is successfully installed and working.


```

  1. 检查配置文件语法:
    bash
    sudo nginx -t

    如果配置文件语法正确,你会看到 "syntax is ok" 和 "test is successful" 的输出。

  2. 重新加载 Nginx 配置:
    bash
    sudo systemctl reload nginx

    或者
    bash
    sudo nginx -s reload

四、Nginx 安全性加固

为了提高 Nginx 服务器的安全性,建议采取以下措施:

  1. 更新 Nginx: 及时更新 Nginx 到最新版本,以修复已知的安全漏洞。
  2. 隐藏 Nginx 版本号:http 块中添加以下指令:
    server_tokens off;
  3. 限制请求方法: 只允许必要的 HTTP 方法(如 GET、POST、HEAD),拒绝其他方法(如 DELETE、TRACE)。在 serverlocation 块中添加以下指令:
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;
    }
  4. 防止缓冲区溢出攻击: 调整以下指令的值:
    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;
  5. 配置 SSL/TLS: 如果你的网站需要使用 HTTPS,你需要配置 SSL/TLS 证书。可以使用 Let's Encrypt 等免费证书颁发机构获取证书。
  6. 限制 IP 地址访问: 使用 allowdeny 指令限制特定 IP 地址或 IP 地址段的访问。
  7. 使用防火墙: 确保你的服务器启用了防火墙,并只允许必要的端口(如 80、443)的流量通过。
  8. 定期审查日志: 定期检查 Nginx 的错误日志和访问日志,以及时发现和解决安全问题。
  9. 防止点击劫持
    在 http, server 或 location 配置中添加:
    add_header X-Frame-Options SAMEORIGIN;
  10. 禁用服务器签名
    在server配置下添加:
    server_tokens off;

五、常见问题排查

  1. Nginx 无法启动:

    • 检查 Nginx 配置文件语法是否正确:sudo nginx -t
    • 检查错误日志:sudo tail -f /var/log/nginx/error.log
    • 检查端口是否被占用:sudo netstat -tulpn | grep :80sudo ss -tulpn | grep :80
    • 检查 SELinux 是否阻止了 Nginx 的运行:sudo getenforce
    • 查看nginx状态: sudo systemctl status nginx
  2. 无法访问网站:

    • 检查防火墙是否允许 80 和 443 端口的流量通过。
    • 检查 Nginx 是否正在运行:sudo systemctl status nginx
    • 检查 DNS 解析是否正确。
    • 检查网站根目录和文件权限是否正确。
  3. 403 Forbidden 错误:

    • 检查 Nginx 工作进程的用户是否对网站根目录有读取权限。
    • 检查 index 指令是否正确配置了默认的索引文件。
  4. 502 Bad Gateway错误

    • Nginx作为反向代理时,后面的服务器没有正确响应时,报这个错误。
    • 检查代理的端口是否正确,服务器是否正常启动。

六、总结

本文详细介绍了在 CentOS 系统上安装和配置 Nginx 的完整过程,包括多种安装方式、基本配置、安全性加固以及常见问题排查。希望这份指南能帮助你成功搭建和管理 Nginx 服务器。请记住,根据你的具体需求,你可能需要进一步调整 Nginx 的配置。建议参考 Nginx 官方文档 (http://nginx.org/en/docs/) 以获取更多信息。

THE END