如何配置 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 都能满足你的需求。

相关推荐
cominglately1 小时前
centos单机部署seata
linux·运维·centos
CircleMouse1 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
Karoku0661 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
木子Linux2 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8242 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
watermelonoops2 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
阿甘知识库2 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
saynaihe3 小时前
安全地使用 Docker 和 Systemctl 部署 Kafka 的综合指南
运维·安全·docker·容器·kafka
zhou周大哥4 小时前
linux 安装 ffmpeg 视频转换
linux·运维·服务器
loong_XL5 小时前
服务器ip:port服务用nginx 域名代理
服务器·tcp/ip·nginx