Linux安装Nginx:从基础到最佳实践

简介

Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它以其稳定性、丰富的功能集、低内存消耗和高性能而闻名。在 Linux 系统上安装 Nginx 是许多开发者和系统管理员的常见任务,无论是搭建网站、配置反向代理还是实现负载均衡,Nginx 都能发挥重要作用。本文将详细介绍在 Linux 上安装 Nginx 的基础概念、使用方法、常见实践以及最佳实践,帮助读者深入理解并高效使用这一强大工具。

目录

  1. 基础概念
    • Nginx 是什么
    • 安装 Nginx 的意义
  2. 安装前准备
    • 确认 Linux 系统版本
    • 更新系统软件包
  3. 安装 Nginx
    • 在不同 Linux 发行版上安装(CentOS、Ubuntu 等)
    • 从源码安装
  4. Nginx 基本使用方法
    • 启动、停止和重启 Nginx 服务
    • 配置文件结构解析
    • 简单网站部署示例
  5. 常见实践
    • 配置反向代理
    • 实现负载均衡
    • HTTPS 配置
  6. 最佳实践
    • 性能优化
    • 安全配置
    • 日志管理
  7. 小结

基础概念

Nginx 是什么

Nginx 最初是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本发布于 2004 年 10 月。Nginx 可以作为 HTTP 服务器、反向代理服务器、邮件(IMAP/POP3)代理服务器,并提供了丰富的功能,如虚拟主机、URL 重写、SSL/TLS 支持、HTTP 缓存等。

安装 Nginx 的意义

  • 高性能:Nginx 采用事件驱动的异步非阻塞模型,能够高效处理大量并发连接,适合高流量的网站和应用程序。
  • 稳定性:经过多年的发展和广泛的应用,Nginx 在稳定性方面表现出色,能够长时间稳定运行。
  • 丰富的功能:提供了反向代理、负载均衡、HTTP 缓存等功能,满足各种复杂的网络架构需求。

安装前准备

确认 Linux 系统版本

不同的 Linux 发行版安装 Nginx 的方式略有不同,因此首先需要确认你的 Linux 系统版本。可以使用以下命令查看:

# 在 CentOS 上
cat /etc/redhat-release

# 在 Ubuntu 上
lsb_release -a

更新系统软件包

在安装 Nginx 之前,建议更新系统的软件包,以确保系统的安全性和稳定性。

# 在 CentOS 上
sudo yum update

# 在 Ubuntu 上
sudo apt update
sudo apt upgrade

安装 Nginx

在不同 Linux 发行版上安装

CentOS

  1. 安装 EPEL 仓库:Nginx 在默认的 CentOS 仓库中没有提供,需要安装 EPEL(Extra Packages for Enterprise Linux)仓库。
sudo yum install epel-release
  1. 安装 Nginx
sudo yum install nginx

Ubuntu

  1. 更新软件包列表并安装 Nginx
sudo apt update
sudo apt install nginx

从源码安装

从源码安装可以获取最新的功能和更好的定制性,但过程相对复杂。

  1. 安装依赖包
# 在 CentOS 上
sudo yum install gcc zlib-devel pcre-devel openssl-devel

# 在 Ubuntu 上
sudo apt install build-essential zlib1g-dev libpcre3-dev openssl libssl-dev
  1. 下载 Nginx 源码 可以从 Nginx 官方网站下载最新的源码包,例如:
wget http://nginx.org/download/nginx-1.23.3.tar.gz
  1. 解压并编译安装
tar -zxvf nginx-1.23.3.tar.gz
cd nginx-1.23.3
./configure
make
sudo make install

Nginx 基本使用方法

启动、停止和重启 Nginx 服务

# 在 CentOS 上
sudo systemctl start nginx  # 启动
sudo systemctl stop nginx   # 停止
sudo systemctl restart nginx # 重启

# 在 Ubuntu 上
sudo service nginx start    # 启动
sudo service nginx stop     # 停止
sudo service nginx restart  # 重启

配置文件结构解析

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf,主要包含以下几个部分:

  • 全局块:设置 Nginx 服务器整体运行的参数,如进程数、运行用户等。
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
  • http 块:配置 HTTP 服务器相关的参数,如 MIME 类型、日志格式、虚拟主机等。
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
  • server 块:定义虚拟主机,每个虚拟主机可以有不同的配置,如监听端口、域名、根目录等。
server {
    listen       80;
    server_name  example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

简单网站部署示例

  1. 创建网站目录和文件
sudo mkdir -p /var/www/example.com/html
sudo nano /var/www/example.com/html/index.html

index.html 文件中写入一些内容,例如:

<!DOCTYPE html>
<html>
<head>
    <title>My First Nginx Site</title>
</head>
<body>
    <h1>Welcome to my Nginx site!</h1>
</body>
</html>
  1. 配置虚拟主机/etc/nginx/conf.d/ 目录下创建一个新的配置文件,例如 example.com.conf
server {
    listen       80;
    server_name  example.com;

    location / {
        root   /var/www/example.com/html;
        index  index.html index.htm;
    }
}
  1. 重启 Nginx 服务
sudo systemctl restart nginx

现在,通过浏览器访问 http://example.com 就可以看到部署的网站了。

常见实践

配置反向代理

反向代理是 Nginx 最常见的应用之一,它可以将客户端的请求转发到后端的服务器,并将后端服务器的响应返回给客户端。

  1. 配置反向代理示例 假设后端服务器的地址是 192.168.1.100:8080,在 Nginx 配置文件中添加如下配置:
server {
    listen       80;
    server_name  example.com;

    location / {
        proxy_pass http://192.168.1.100:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  1. 重启 Nginx 服务
sudo systemctl restart nginx

实现负载均衡

Nginx 可以通过配置实现简单的负载均衡,将请求均匀分配到多个后端服务器上。

  1. 配置负载均衡示例 假设有两个后端服务器 192.168.1.100:8080192.168.1.101:8080,在 Nginx 配置文件中添加如下配置:
upstream backend {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
}

server {
    listen       80;
    server_name  example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  1. 重启 Nginx 服务
sudo systemctl restart nginx

HTTPS 配置

为了提高网站的安全性,通常需要配置 HTTPS。

  1. 获取 SSL 证书 可以从证书颁发机构(CA)购买证书,也可以使用 Let’s Encrypt 提供的免费证书。这里以 Let’s Encrypt 为例:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
  1. 配置 Nginx 使用 SSL 证书 在 Nginx 配置文件中添加如下配置:
server {
    listen       443 ssl;
    server_name  example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root   /var/www/example.com/html;
        index  index.html index.htm;
    }
}
  1. 重启 Nginx 服务
sudo systemctl restart nginx

最佳实践

性能优化

  • 调整 worker_processes 和 worker_connections:根据服务器的 CPU 核心数和内存大小调整 worker_processes 的值,根据并发连接数调整 worker_connections 的值。
worker_processes  auto;
events {
    worker_connections  1024;
}
  • 启用 HTTP 缓存:合理配置 proxy_cachefastcgi_cache 等缓存模块,提高网站的响应速度。
http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;

    server {
        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 302 60m;
            proxy_cache_valid 404 10m;
            proxy_pass http://backend;
        }
    }
}

安全配置

  • 限制访问:通过 allowdeny 指令限制 IP 地址的访问。
server {
    location / {
        allow 192.168.1.0/24;
        deny all;
        root   /var/www/example.com/html;
        index  index.html index.htm;
    }
}
  • 防止 DDoS 攻击:配置 limit_reqlimit_conn 模块,限制请求频率和并发连接数。
http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        location / {
            limit_req zone=mylimit;
            root   /var/www/example.com/html;
            index  index.html index.htm;
        }
    }
}

日志管理

  • 设置合理的日志格式:根据需求设置 log_format,记录必要的信息。
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
  • 定期清理日志:可以使用 logrotate 工具定期清理和压缩 Nginx 日志文件。
sudo nano /etc/logrotate.d/nginx

在文件中添加如下内容:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

小结

通过本文的介绍,我们深入了解了在 Linux 系统上安装 Nginx 的基础概念、使用方法、常见实践以及最佳实践。从安装前的准备工作到不同发行版的安装方式,再到 Nginx 的各种功能配置和优化,希望读者能够掌握 Nginx 的安装和使用技巧,并应用到实际项目中。Nginx 作为一款强大的服务器软件,在 Web 开发和运维领域有着广泛的应用,不断学习和实践将有助于提升我们的技术水平和解决实际问题的能力。