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

相关推荐
jugt4 分钟前
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
linux·运维·centos
hunter1271 小时前
Nginx 事件驱动理解
nginx
21号 12 小时前
9.进程间通信
linux·运维·服务器
搬码临时工7 小时前
电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
运维·服务器·网络
藥瓿亭7 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
Gaoithe7 小时前
ubuntu 端口复用
linux·运维·ubuntu
gsls2008089 小时前
ocrapi服务docker镜像使用
运维·docker·容器
文牧之9 小时前
PostgreSQL 的扩展pg_freespacemap
运维·数据库·postgresql
AWS官方合作商10 小时前
基于AWS Serverless架构:零运维构建自动化SEO内容生成系统
运维·serverless·aws
whp40410 小时前
windows server2019 不成功的部署docker经历
运维·docker·容器