如何配置 Nginx:从入门到进阶

Nginx 是一款高性能的开源 Web 服务器,也可以用作反向代理、负载均衡器和 HTTP 缓存。由于其轻量级和高效的设计,Nginx 被广泛用于处理高并发连接场景。在这篇博客中,我将介绍 Nginx 的基本配置,并分享一些常见的实用配置技巧,帮助你快速上手。

1. Nginx 基础配置

Nginx 的核心配置文件通常是 nginx.conf,它通常位于 /etc/nginx/nginx.conf 路径下(对于 Linux 系统),或者在 Windows 下位于 Nginx 的安装目录。以下是一个基本的 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;
    
    # 日志配置
    access_log /var/log/nginx/access.log;

    # 发送文件优化
    sendfile on;
    tcp_nopush on;

    # 连接超时
    keepalive_timeout 65;
    
    # 压缩传输
    gzip on;

    # 虚拟主机配置
    server {
        listen 80;
        server_name example.com;

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

        # 错误页面配置
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
}

配置结构解析:

  • worker_processes:Nginx 使用的工作进程数,可以根据服务器 CPU 数量自动设置(auto)。
  • events:定义工作进程可以处理的最大连接数。
  • http:HTTP 服务的全局配置块,包括日志、文件传输和虚拟主机等配置。
  • server:虚拟主机配置,用于定义不同的域名和端口的请求处理方式。
  • location:定义 URL 路径的匹配规则。

2. Nginx 虚拟主机配置

虚拟主机允许我们在同一台服务器上处理多个站点。Nginx 的虚拟主机配置主要通过 server 块来实现。

基于域名的虚拟主机配置

假设我们有两个站点,分别为 example.comtest.com,可以通过以下方式配置 Nginx:

nginx 复制代码
server {
    listen 80;
    server_name example.com www.example.com;
    
    location / {
        root /var/www/example;
        index index.html;
    }
}

server {
    listen 80;
    server_name test.com www.test.com;
    
    location / {
        root /var/www/test;
        index index.html;
    }
}

基于端口的虚拟主机配置

如果你希望基于不同的端口来处理多个站点,例如 http://example.com:8080http://example.com:8081,可以这样配置:

nginx 复制代码
server {
    listen 8080;
    server_name example.com;

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

server {
    listen 8081;
    server_name example.com;

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

3. Nginx 反向代理配置

Nginx 常用于反向代理,它能够将客户端的请求转发到后端服务器上,并将响应返回给客户端。这在负载均衡和应用分离的场景中非常常见。

以下是一个简单的反向代理配置,将请求转发给运行在 localhost:3000 的后端服务:

nginx 复制代码
server {
    listen 80;
    server_name example.com;

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

反向代理设置解析

  • proxy_pass:指定后端服务地址。
  • proxy_set_header:用于设置请求头信息,确保后端应用能获取客户端的真实 IP 等信息。

4. Nginx HTTPS 配置(SSL/TLS)

为了提升网站安全性,我们通常使用 HTTPS。Nginx 支持使用 SSL 证书来加密流量,以下是基本的 HTTPS 配置步骤:

获取 SSL 证书

你可以通过 Let's Encrypt 获取免费的 SSL 证书,或者从其他 CA 购买。获取证书后,将 .crt(证书文件)和 .key(私钥文件)保存在服务器上。

配置 HTTPS 虚拟主机

假设证书路径为 /etc/ssl/certs/example.com.crt 和 /etc/ssl/private/example.com.key,你可以这样配置:

nginx 复制代码
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;

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

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

# 重定向 HTTP 到 HTTPS
server {
    listen 80;
    server_name example.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

5. 负载均衡配置

Nginx 还可以配置为负载均衡器,将请求分发到多个后端服务器。常见的负载均衡方式包括轮询(默认)、权重和 IP 哈希等。

轮询负载均衡

nginx 复制代码
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    listen 80;
    server_name example.com;

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

基于权重的负载均衡

你可以为不同的后端服务器设置不同的权重,权重越高的服务器将接收到更多的请求。

nginx 复制代码
upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com weight=1;
}

IP 哈希负载均衡

使用 IP 哈希将相同 IP 的请求分配到同一个后端服务器上。

nginx 复制代码
upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

6. 总结

Nginx 作为一个功能强大的 Web 服务器,其配置灵活性和强大的反向代理、负载均衡、HTTPS 支持,使其成为构建高性能 Web 应用的首选。无论你是想运行简单的静态网站,还是构建复杂的微服务架构,Nginx 都能满足你的需求。

相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode7 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220708 天前
如何搭建本地yum源(上)
运维
ping某9 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql