插件窝 干货文章 怎么安装并调优Nginx

怎么安装并调优Nginx

Nginx http application 配置 747    来源:    2025-04-23

Nginx 安装与调优指南

一、Nginx 安装

Linux 系统安装

Ubuntu/Debian

# 更新软件包索引
sudo apt update

# 安装Nginx
sudo apt install nginx

# 启动Nginx
sudo systemctl start nginx

# 设置开机自启
sudo systemctl enable nginx

CentOS/RHEL

# 添加EPEL仓库(CentOS/RHEL 7)
sudo yum install epel-release

# 安装Nginx
sudo yum install nginx

# 启动Nginx
sudo systemctl start nginx

# 设置开机自启
sudo systemctl enable nginx

Windows 系统安装

  1. 从官网(https://nginx.org/en/download.html)下载Windows版本
  2. 解压到指定目录(建议不要包含中文路径)
  3. 运行nginx.exe即可启动

验证安装

浏览器访问 http://服务器IP,看到Nginx欢迎页面即安装成功。

二、基础配置

配置文件结构

  • 主配置文件:/etc/nginx/nginx.conf (Linux) 或 conf/nginx.conf (Windows)
  • 站点配置:通常放在 /etc/nginx/conf.d//etc/nginx/sites-available/

常用配置指令

# 用户和组
user www-data;

# 工作进程数(通常等于CPU核心数)
worker_processes auto;

# 错误日志路径和级别
error_log /var/log/nginx/error.log warn;

# 事件模块配置
events {
    # 每个worker最大连接数
    worker_connections 1024;

    # 使用高效事件模型
    use epoll;  # Linux系统
}

http {
    # MIME类型
    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压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # 包含其他配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

三、性能调优

1. 工作进程优化

# 设置为CPU核心数(或auto)
worker_processes auto;

# 绑定工作进程到特定CPU核心(减少上下文切换)
worker_cpu_affinity auto;

2. 连接优化

events {
    # 使用高效事件模型(Linux)
    use epoll;

    # 每个worker最大连接数
    worker_connections 10240;

    # 多连接请求时序列化
    multi_accept on;
}

3. 缓冲与超时优化

http {
    # 客户端请求头缓冲区大小
    client_header_buffer_size 4k;

    # 大型客户端请求头缓冲区大小
    large_client_header_buffers 4 8k;

    # 客户端请求体缓冲区大小
    client_body_buffer_size 128k;

    # 客户端最大请求体大小
    client_max_body_size 10m;

    # 客户端请求体超时
    client_body_timeout 12;

    # 客户端请求头超时
    client_header_timeout 12;

    # 发送响应超时
    send_timeout 10;
}

4. 静态文件服务优化

server {
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
        access_log off;
        add_header Cache-Control "public";
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

5. Gzip压缩优化

gzip on;
gzip_min_length 1k;       # 最小压缩文件大小
gzip_comp_level 6;       # 压缩级别(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;            # 根据Accept-Encoding头返回不同内容
gzip_disable "MSIE [1-6]\.";  # 对IE6以下禁用gzip

6. 文件传输优化

sendfile on;        # 启用高效文件传输模式
tcp_nopush on;      # 只在sendfile on时有效,减少网络包数量
tcp_nodelay on;     # 禁用Nagle算法,提高实时性

四、安全配置

1. 基础安全

# 隐藏Nginx版本号
server_tokens off;

# 禁用不需要的HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 405;
}

# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";

# 启用XSS保护
add_header X-XSS-Protection "1; mode=block";

# 禁用内容类型嗅探
add_header X-Content-Type-Options "nosniff";

2. SSL/TLS配置

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    # 启用会话缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 安全协议和加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # 启用OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
}

五、高级调优

1. 负载均衡配置

upstream backend {
    least_conn;           # 最少连接负载均衡
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com max_fails=3 fail_timeout=30s;

    # 保持连接池大小
    keepalive 32;
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

2. 微缓存优化(适用于动态内容)

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;

server {
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_lock on;

        proxy_pass http://backend;
    }
}

3. 日志优化

# 缓冲日志写入
access_log /var/log/nginx/access.log main buffer=32k flush=5m;

# 关闭不需要的日志
location /static/ {
    access_log off;
}

六、监控与维护

1. 状态监控

location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

2. 性能测试工具

# 使用ab(Apache Benchmark)测试
ab -n 1000 -c 100 http://example.com/

# 使用wrk测试
wrk -t4 -c100 -d30s http://example.com/

3. 日志分析

# 查看访问量最高的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

# 查看响应时间大于2秒的请求
awk '($NF > 2){print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

七、常见问题解决

  1. 502 Bad Gateway错误

    • 检查后端服务是否正常运行
    • 增加proxy_connect_timeoutproxy_read_timeout
  2. Too many open files错误

    • 增加系统文件描述符限制
    ulimit -n 65535
    
    • 在nginx.conf中设置
    worker_rlimit_nofile 65535;
    
  3. 性能瓶颈

    • 使用tophtop检查CPU和内存使用情况
    • 使用ss -snetstat -s检查网络连接状态
    • 使用vmstat 1检查系统整体性能

通过以上配置和调优,Nginx可以支持高并发、高性能的Web服务。实际应用中应根据具体业务需求和服务器资源进行适当调整。