Nginx 入门使用

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。因其高并发处理能力、轻量级、模块化设计而广受开发者喜爱。本指南将帮助开发人员快速入门并掌握基本使用方法。

什么是 Nginx

Nginx 的名称源于“engine x”,它的主要功能包括:

  • 作为 HTTP 服务器:提供静态文件服务、HTTP 负载均衡和反向代理功能。
  • 作为反向代理服务器:将客户端请求转发到后端服务器。
  • 作为邮件代理服务器:支持 IMAP、POP3 和 SMTP 协议。

Nginx 的特点:

  • 高性能:基于事件驱动的异步架构,支持大规模并发。
  • 低内存消耗:运行效率高,占用系统资源少。
  • 模块化设计:易于扩展功能。

安装 Nginx

在开始使用 Nginx 前,需要先安装它。以下是针对不同平台的安装方法。

在 Linux 上安装

使用包管理工具

# 在 Debian/Ubuntu 上
sudo apt update
sudo apt install nginx

# 在 CentOS/RHEL 上
sudo yum install epel-release
sudo yum install nginx

编译安装

如果需要自定义 Nginx,可以从源码编译:

wget http://nginx.org/download/nginx-<version>.tar.gz
tar -zxvf nginx-<version>.tar.gz
cd nginx-<version>
./configure
make
sudo make install

在 macOS 上安装

使用 Homebrew:

brew install nginx

在 Windows 上安装

Windows 上支持运行 Nginx,但主要用于开发测试。

  1. 下载 Nginx:官方下载页面
  2. 解压到指定目录。
  3. 通过命令行运行:
cd <nginx_path>
start nginx

Nginx 配置文件结构

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,其基本结构如下:

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

events {
    worker_connections 1024;
}

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;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

配置文件主要分为以下几个部分:

  • 全局配置:如 userworker_processes 等。
  • 事件块:配置网络连接相关参数,如 worker_connections
  • HTTP 块:配置 HTTP 服务,包括虚拟主机、日志、MIME 类型等。

常见使用场景

1. 静态文件服务器

Nginx 能快速、高效地服务于静态文件。

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html;
    }
}

将上述配置添加到 /etc/nginx/conf.d/example.conf 中并重启 Nginx:

sudo systemctl restart nginx

2. 反向代理

反向代理是 Nginx 的核心功能之一。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

此配置将所有请求代理到本地的 8080 端口。

3. 负载均衡

Nginx 支持多种负载均衡策略。

基本轮询

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
    }
}

权重策略

upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com weight=1;
}

IP 哈希

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

4. HTTPS 配置

为站点启用 HTTPS:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    location / {
        root /var/www/html;
        index index.html;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

5. 缓存配置

通过 Nginx 实现简单的缓存加速:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_cache my_cache;
        proxy_pass http://127.0.0.1:8080;
    }
}

常用命令

启动和停止 Nginx

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

测试配置文件

sudo nginx -t

平滑重启

sudo nginx -s reload

Nginx 调试与排错

查看错误日志

错误日志文件通常位于 /var/log/nginx/error.log

检查端口占用

sudo netstat -tuln | grep 80

使用 Curl 测试

curl -I http://example.com

结语

Nginx 是一款功能强大且灵活的服务器软件,从简单的静态文件服务到复杂的反向代理和负载均衡配置,都能轻松实现。希望本指南能帮助开发者快速上手并熟练使用 Nginx。